phpinfo lfi 上传shell

0x00 基本原理

建议阅读参考文章1的pdf,基本都是根据那篇文章进行分析的,这里单纯记录下我实验过程。

任意php文件都会处理一个上传请求,上传文件都会被暂时存储在一个临时目录下面。直到php页面完全处理完请求。

In particular he notes that if file_uploads = on is set in the PHP configuration file, then PHP will accept a file upload post to any PHP file. He also notes that the upload file will be stored in the tmp location, until the requested PHP page is fully processed.

The file will be deleted from the temporary directory at the end of the request if it has not been moved away or renamed.

总之: 用分块传输,增长数据长度来延迟响应时间。然后趁机去包含临时文件。

0x01 实际攻击测试

1.攻击条件

  • 存在phpinfo页面
  • 存在一个lfi漏洞php文件

2.实现测试EXP

先编写个上传页面,让phpinfo处理:

在返回数据中可以看到临时文件地址:

自己调一下文中给的EXP,后面给出。成功上传shell到/tmp目录下,之后使用lfi进行文件包含即可。

3.使用phar协议包含

有时LFI漏洞代码中,会限制后缀为php的文件,才能进行包含。于是使用phar协议进行绕过。

(1) 构建phar文件

(2) 使用phar协议包含

先测试下:

可以成功写文件,但是修改POC后,测试始终未成功~ 有机会再看一下~~

关键:

  • 读取phar,直接写二进制内容
  • 包含其中的shell.php

(3) 写python程序进行攻击

上传phar然后进行包含未成功,之后再看看。 单纯上传文件成功,这部分代码如下:

0x02 phar包含未成功原因

1. 问题原因

对于phar协议,我们他会把http://10.10.10.135/lfi/lfi.php?f=phar:///tmp/phptmppath/shell.php 会看成目录,而phptmppath其实就是上传的临时文件~

2. 问题解决

使用zip协议:

没有了上述问题,成功包含。
注意: 压缩zip文件时,一定要选择存储(only store)~ 不要压缩~
参考: https://lightless.me/archives/include-file-from-zip-or-phar.html

0x03 参考

https://www.insomniasec.com/downloads/publications/LFI%20With%20PHPInfo%20Assistance.pdf
http://www.freebuf.com/articles/web/79830.html
https://www.91ri.org/11298.html