1. PHP 伪协议
在PHP之中提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。这些通常被称作PHP的伪协议。
PHP伪协议使用方法
zip://archive.zip#dir/file.txt
zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]
漏洞利用例子:
xxx.php?file=zip://D:/soft/phpStudy/WWW/file.jpg%23phpcode.txt
先将要执行的PHP代码写好文件并命名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件命名为file.zip,如果可以上传zip文件便直接上传,若不能,便将file.zip重命名为file.jpg后再上传,其他几种压缩格式也可以这样操作。
2. 实际利用
在ctf中这种情况还是比较多的,所以这里以root-me的一道例题来讲述。
http://challenge01.root-me.org/web-serveur/ch43/
这是一道
PHP LFI
的题目,解决方法就是
利用php伪协议和文件包含漏洞,从而实现getshell
(这里只要get flag就够了)。
首先写一个webshell,然后再将该webshell打包成压缩文件,就可以利用伪协议解析,在这里由于上传文件的地方只能够上传图片格式的文件,所以我们还需要将rar文件改成jpg文件后才能上传,但这只是修改了文件的后缀,本质上我们上传的还是压缩文件。
上传后会得到一个上传文件的文件名,我们利用phar://加上本地文件包含就行。以下是存在LFI的url:
http://challenge01.root-me.org/web-serveur/ch43/index.php?page=
其
中page参数是我们能够控制的
,利用它可以包含其他的本地文件。
通过访问以下链接,我们就可以顺利获取flag了。
http://challenge01.root-me.org/web-serveur/ch43/index.php?page=phar://tmp/upload/xxxxxxx.jpg/1
如果以上webshell不是一个获取flag的功能,而是一个命令执行,那服务就有可能被控制。
*转载请注明来自“骇极安全”。
返回搜狐,查看更多
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。