php过waf 一句话,(转)一句话木马绕过WAF
在渗透测试的后期,为了维持权限。我们通常都会选择使用大小马或者通过添加账户等各种各样的方式给自己留个后门。但是事情总不是一帆风顺的,在上传一句话木马以及使用一句话木马的过程中我们要跟WAF斗智斗勇。今天这期我们从一句话木马的工作机制和WAF工作机制入手来讲如何绕过WAF的检测。
一、一句话木马和WAF介绍
在这里就不再科普一句话木马的介绍,不明白的得可以看这里:一句话木马-百度百科。
WAF的介绍可以看这里:WAF-百度百科
二、一句话木马机制
我们这里以php的一句话木马为例子:
Eval函数去执行post过来的数据,这个数据当然就是代码。在代码中,我们可以自定义实现所要的功能。比如说是文件管理,或者是模拟终端等。
但是众所周知,服务器端的语言又比较多,极少有人能够知道这么多语言中各个函数的用途。所以这个时候菜刀之类的工具应运而生。它将我们常用的代码封装在软件之中,通过和一句话木马的交互完成工作。如果各位对此菜刀有兴趣,下面奉上“新版中国菜刀”(Cknife)的开源代码。
回到正题,通过上面的描述,那么一句话木马的工作机制也就很明了了,主要包含两个功能,第一个是必须可以接收数据,这个数据是get或者post以及其他方式传送到服务端的指令代码。第二个需要将接收到的代码成功执行。
对于上述,我们可以通过抓取菜刀的发送包进行验证。
图1 抓取的菜刀HTTP包
可以发现,菜刀通过post方式发送数据,将数据进行url解码和base64解码,还原后的php代码如下:
@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$D=dirname($_SERVER["SCRIPT_FILENAME"]);
if($D=="")
$D=dirname($_SERVER["PATH_TRANSLATED"]);
$R="{$D}\t";
if(substr($D,0,1)!="/"){
foreach(range("A","Z") as $L)
if(is_dir("{$L}:"))
$R.="{$L}:";}
$R.="\t";
$u=(function_exists('posix_getegid'))?@posix_getpwuid(@posix_geteuid()):'';
$usr=($u)?$u['name']:@get_current_user();
$R.=php_uname();
$R.="({$usr})";
print $R;;
echo("|
die();
?>
上述代码的功能不是本文重点,就不再赘述。
三、WAF检测机制
图2 WAF日志记录
通过对WAF的反复测试,发现对一句话木马的检测,WAF主要分为两个部分。第一个部分,当一句话木马在服务器中的时候,首先检测文件中的内容,正如上文一句话木马工提到的两大特征,WAF也会匹配上述两个特征,当一个php文件具有执行功能和接收数据功能时就会被判定为具有了一句话木马的特征,所以说对于未变形的一句话木马来说,上传上去活下来的机率几乎为零,等不到访问就被查杀掉了。
其第二部分检测在于当一句话木马和菜刀进行通信的时候,WAF会判定提交的数据,当发现危险函数特征的时候也会进行拦截。而且根据测试结果推测,WAF出于降低误拦截的考虑,短时间内并不会对可能是一句话木马的连接进行拦截。而是当多次出现时候才确定。
四、绕过WAF
根据上文提到的一句话木马的工作原理以及WAF的检测机制,我们首先要做到的是一句话木马能够存活在服务器中,要不然后续的步骤无从下手。那么我们首先来看下防止一句话木马被检测出来常见的绕过手段。
1、单特征类
该一句话木马只有数据接收功能,不含有执行函数,可以完美绕过WAF的在线检测。当然也可以使用get函数和post函数搭配进行。与菜刀连接执行的时候通过test1内容为“assert”即可实现代码的执行。
假如我们要利用phpinfo()函数,那么可以在地址栏输入:www.xxx.com/test.php?test1=assert&test2=phpinfo(),结果如下。
图3验证结果
2、混淆编码类
该方式将eval和接收函数通过rot13编码进行了替换,完全抹去了一句话木马的两个特征。完美绕过。当然编码方式不止上述一种,也可以使用其他编码方式。
3、字符替换类
该方式将执行函数进行了字符替换,从而完成了特征的绕过。
本文重在思路,所以只是列举三种,更多的情况,大家可以看看公众号之前发的关于sql注入绕过WAF的文章,同时也可以发挥脑洞,利用php一些特性,根据WAF的检测机制,进行字符填充、混淆和替换、分割等各种方式实现检测绕过。
当一句话木马到服务器端之后,剩下的工作就是利用菜刀跟一句话木马进行连接。菜刀的种类很多,有基于c/s架构的,也有基于b/s架构的,但是其原理都是相通的。菜刀的出现减少了一句话木马使用的门槛,但是对于绕过WAF来说就需要花费一些心思了。
我们之前也提到过,WAF会对客户端提交的参数进行审查,对于含有危险函数的会进行拦截和过滤,下面看图。
图4 抓取的菜刀HTTP包
实际使用中直接使用菜刀,不进行特殊的配置,几乎很难绕过,经过分析两个地方触发了WAF的报警机制,第一个是提交函数中存在的base64_decode方法,第二个是参数中存在的eval函数。那么如何在提交参数中避免这些,从而绕过呢。
1、加密编码法
在一句话木马中只要加上对应的解密,解码方法。那么在提交过程中则可以进行任何危险函数的加密,编码绕过WAF。比如说我们在一句话木马中提前构造好base_64解密方法如下:
则在数据提交过程中则为:
www.xxx.com/ test.php?test2=cGhwaW5mbygpOw==
图5验证结果
完全避免了任何函数的提交,当然在这里也可以使用一些常见的加密算法,比如AES、RSA等,关键在于一句话木马之中具有解密函数即可。
2、迂回法
该方法和大马方式类似,属于大马和一句话木马之间,就是将文件管理、下载文件等代码放在一句话木马文件之中,并且重命名功能函数,通过传参数调用,从而绕过WAF的检测。这种方法基本上可以保证不含有任何危险字段,但是对在线检测的抵抗能力加强。至于云端代码的绕过可以参考第一部分。该方法是Cknife作者提出来的。下面可以看例子:
$pass= 'yirendai'; //密码
if($_GET [$pass] == 1&$_GET [$action]=="file") {
//该处可以写上列出文件的代码;其他功能类似;
}
?>
这样我们在调用的时候输入www.xxx.com/test.php?pass=yirendai&action=file 可以直接使用了文件功能。
3、浏览器法
随着Cknife软件的开源,在软件丰富的同时,WAF对于菜刀得判断也越来越精确。所以这个时候不妨回归原始,通过最简单的表单进行提交。发现菜刀不能连接的,通过这个方式又可以快乐的玩耍了。(ps:通过给菜刀加header仍然被拦截,欢迎大牛讲解。)
图6浏览器实验
然而道高一尺魔高一丈,随着一句话木马变种的增多,安全厂商的规则也越来越完善。所以在绕过的过程中,要不停的尝试、总结、完善。安全技术也是在这个过程中快速发展。本文主要目的在于讲解思路,抛砖引玉。毕竟知其然,那么剩下的就都很好理解了。
附录菜刀:Cknife:https://github.com/Chora10/Cknife
Webshell集合: https://github.com/tennc/webshell
php过waf 一句话,(转)一句话木马绕过WAF相关推荐
- 如何让一句话木马绕过waf的检测 ?
一.什么是一句话木马? 一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能.为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令. ...
- 过云锁php木马,绕过waf的另类木马文件攻击方法
很久没写文章了,继上次发先文章到今天已经很久了:很久没写文章了,继上次发先文章到今天已经很久了:今天突发异想:因为之前打了西湖论剑,遇到了宝塔的waf,最后也是过去了,便觉得另类的攻击方法值得写篇文章 ...
- waf怎么读_1.如何绕过WAF(Web应用防火墙)
一:大小写转换法: 看字面就知道是什么意思了,就是把大写的小写,小写的大写.比如: SQL:sEleCt vERsIoN(); XSS: 出现原因:在waf里,使用的正则不完善或者是没有用大小写转 ...
- 深入理解SQL注入绕过WAF和过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- 深入理解SQL注入绕过WAF与过滤机制
知己知彼,百战不殆 --孙子兵法 [目录] 0x0 前言 0x1 WAF的常见特征 0x2 绕过WAF的方法 0x3 SQLi Filter的实现及Evasion 0x4 延伸及测试向量示例 0x5 ...
- [转]杂谈如何绕过WAF(Web应用防火墙)
技术分享:杂谈如何绕过WAF(Web应用防火墙) 0×01开场白 这个议题呢,主要是教大家一个思路,而不是把现成准备好的代码放给大家. 可能在大家眼中WAF(Web应用防火墙)就是"不要脸& ...
- 一句话木马绕WAF(小宇特详解)
webshell绕过WAF 常见的PHP一句话木马就是 <?php eval($_REQUEST['a'];)?> WAF的工作原理以正则匹配为主,这里尝试他到底是正则匹配了什么 这里首先 ...
- 一句话木马绕过检测的常见思路
0x0 背景 一句话木马短小精悍,而且功能强大,隐蔽性非常好,在入侵中始终扮演着强大的作用,居家生活搞站越货必备神器.主要总结一下常见的绕过安全检测的思路,欢迎各位大佬参与讨论. 0x1 关键函数编码 ...
- php7版本一句话木马,一句话查找 PHP 木马
一句话查找 PHP 木马 find ./ -name "*.php" |xargs egrep "phpspy|c99sh|milw0rm|eval\(gunerpres ...
最新文章
- Windows任务计划创建计划,定时执行PowerShell命令
- 使用GPU在caffe上进行CNN训练
- php 显示数据库操作错误,php操作mysql数据库编码错误
- C和指针之字符串总结
- Java 9 新特性概述
- jwt如何防止token被窃取_如何使用 NodeJS 实现 JWT 原理
- Silverlight Tools 安装失败 解决办法
- 面向对象编程(十)——继承之Super关键字及内存分析
- 【网络-实验】rip最大有效跳数15
- Wineskin不能打开添加的程序?macOS版本太高?
- Docker安装Jenkins教程
- FPGA学习3-Vivado简易使用方法
- java毕业设计宿舍管理系统mybatis+源码+调试部署+系统+数据库+lw
- TrustedInstaller权限的问题
- (转)yolov3运行及保存检测视频(包括摄像头)
- CATIA二次开发(一):CAA简介
- 计算机被格式化怎么找回资料,文件被格式化 硬盘格式化删除的文件怎么找回...
- LibreOffice 宏
- 华为:将在员工绩效考核中增加“伙伴满意度”选项;谷歌研究员“走火入魔”,被罚带薪休假;魅族回应被吉利收购 | EA周报...
- 关于纯前端excel上传、下载功能
热门文章
- Hotspot 垃圾回收之VM_Operation 源码解析
- 兄弟们,这波是我上当了
- html form表单数据转为json传输
- C# 的DateTime的12小时和24小时制
- af if no sooner than..
- 【分析笔记】LVGL v8.2.0 使用 freetype 概率性无显示的问题
- 从LLM到MLLM,多模态大规模语言模型KOSMOS-1赋予了语言模型看见世界的能力
- [WTL/ATL]_[初级]_[设置超链接字体颜色]
- 业务异常 java_浅谈RxJava处理业务异常的几种方式
- 小白如何找价值类优质基金