论PHP常见漏洞第二弹:常见的包含漏洞

包含一般也就分为LFI、RFI,即local file inclusion和remote file inclusion

### LFI
对于LFI的话,因为很多都限制了包含的后缀结尾必须为.php,`Include ($a.’.php’)`例如这种的。
所以我们想包含我们的图片马儿的话,那么就需要截断后面的这.php

1. 00截断。需要gpc off && php<5.3.4 2. 长文件名截断。反正这个我很少成功。 3. 转换字符集造成的截断。这个对包含的话基本用不上。还有一些cms限制包含的后缀必须为.php,例如下面一段简单的代码 $include_file=$_GET[include_file]; if ( isset( $include_file ) && strtolower( substr( $include_file, -4 ) ) == ".php" ) { require( $include_file ); }对传递过来的截取了后面4个字符,然后判断是不是“.php”,如果是“.php”才进行包含。这里可以用zip(或者phar)协议嘛(当然这个也是找laterain学的,哈哈)。首先新建一个1.php,里面随便写个phpinfo吧,然后压缩成.zip,接着把zip的名字改成 yu.jpg。然后把这个.jpg上传上去 然后包含: ![1.png][1]对于一些LFI找不到上传图片的地方的话,也有很多牛发过了一些不能上传图片LFI的技巧,各种包含日志、环境变量啥的,这里我就也不多说了。### RFI下面再来说RFI。如果能RFI的话,那么就是最方便的了。包含远程文件,或者又是`php://input data`啥的,各种伪协议。但是也都知道RFI最大的限制条件就是需要`allow_url_include on`且“变量前未定义路径”或者“常量”。而`Allow_url_include`默认都是off,那么无论是`allow_url_include on` 还是“变量前无路径”或者“常量”,那都是RFI的硬伤。这里介绍一种在allow_url_include off的情况下也能rfi的技巧,但是成功率也并不太高。首先在php.ini里看一下`allow_url_include`: ; Whether to allow include/require to open URLs (like http:// or ftp://) as files. allow_url_include = Off翻译过来就是,允许包含url,例如`http://`、`ftp://`之类的协议。当off的时候肯定就是不允许去包含这样的协议。这里我们先来测试一下: 转载自:http://drops.wooyun.org/papers/4544,在原文基础上有简单整理修改。

[1]: https://www.typechodev.com/usr/uploads/2016/06/2194055885.png
[2]: https://www.typechodev.com/usr/uploads/2016/06/3892146600.png
[3]: https://www.typechodev.com/usr/uploads/2016/06/3624029000.png
[4]: https://www.typechodev.com/usr/uploads/2016/06/1656989712.png
[5]: https://www.typechodev.com/usr/uploads/2016/06/4131775017.png
[6]: https://www.typechodev.com/usr/uploads/2016/06/1909700189.png
[7]: https://www.typechodev.com/usr/uploads/2016/06/4068662572.png
[8]: https://www.typechodev.com/usr/uploads/2016/06/1688234156.png

上一篇 2016-05-31 上午10:13
下一篇 2016-06-06 上午4:54