一句话木马
什么是一句话木马
一句话木马就是只需要一行代码的木马,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句话木马出现了无数中变形,但本质是不变的:木马的函数执行了我们发送的命令。
waf(Web Application Firewall):主要功能是拦截入侵尝试,比如SQL Injection, XSS, 路径遍历, 窃取敏感数据,CC攻击等。
常见分类:
1.单机WAF,比如Modsecurity,需要在每一台目标服务器上部署;
2.自建WAF,较多的是Agent + 云管理 模式,Agent较多基于 nginx + lua 实现,需要在每一台目标服务器上部署,云管理的实现方式就比较多样化了;
3.使用第三方WAF服务,一般为反向代理式WAF,通常整合CDN、WAF,缺点:(1)如果需要支持https的话,需要将自己的证书私钥交出去;(2)流量跟第三方WAF提供商的其他客户的流量混在一起,如果其他客户有恶意行为而被搜索引擎封杀,自己的网站会受到牵连;
4.云服务商提供的网络层WAF,一般透明实现;缺点:如果需要支持https的话,需要将自己的证书私钥交出去。
5.硬件网络层WAF,一般透明实现;缺点:如果需要支持https的话,需要将自己的证书私钥交出去。
6.应用网关( Application Gateway ), 这是将网关和第三方WAF服务私有化的一种部署形式,以消除第三方WAF服务的缺点,通常整合证书管理、HTTPS、WAF等功能。比如 Janusec Application Gateway ,特点参见:Web安全防御从WAF到应用网关
如何发送命令,如何执行命令
我们可以通过GET 、POST 、COOKIE
这三种方式向一个网站提交数据,一句话木马用$_GET[' ']、$_POST[' ']、$_COOKIE[' ']
接收我们传递的数据,并把接收的数据传递给一句话木马中执行命令的函数,进而执行命令。
所以看到的经典一句话木马大多都是只有两个部分,一个是可以执行代码的函数部分,一个是接收数据的部分。
例如:<?php eval(@$_POST['a']); ?>
其中eval就是执行命令的函数,**$_POST[‘a’]**就是接收的数据。eval函数把接收的数据当作PHP代码来执行。这样我们就能够让插入了一句话木马的网站执行我们传递过去的任意PHP语句。这便是一句话木马的强大之处。
示例:
因为木马是接收post请求中 “a” 的数据( $_POST[‘a’]),所以我们必须以post方法发送数据并且将我们要执行的代码赋值给“a”。如果把木马中的post替换成get,那么我么就需要以GET方法发送“a”,( 就像这样: http://127.0.0.1/test.php?a=phpinfo(); )我就不再另行演示了。
使用其他函数制作一句话木马
assert函数
<?php assert(@$_POST['a']); ?>