pass-1 js绕过
js绕过即在前端js代码中做了限制
解题思路
1、查看源代码是否有限制,或者直接上传一句话木马php看是否有返回提示框
2、上传木马
方法1:
(1)使用火狐插件disable禁用js,正常上传php木马文件即可
方法2:
(1)将一句话木马php伪装成允许类型的文件,如jpg、png等
(2)上传使用burpsuite抓包,然后更改后缀名为php,上传
3、查看木马上传路径
返回图片情况:右键图片,选择复制图片链接,可得到上传路径
http://101.34.216.248/upload/zc.png
4、验证文件是否上传成功
情况1:如果上传了木马图片,访问该地址显示如下即上传成功
情况2:如果上传了木马php文件,访问该地址报错,可提示上传路径位置
5、使用菜刀连服务器即可
pass-2 MIME限制绕过
服务器MIME限制,即限制文件类型
解题思路:
1、查看源码没有特殊限制,考虑是后台做了限制,只能遍历可能的限制
2、上传木马
方法1:可通过burpsuite抓包,修改Content-Type的类型,上传木马
一般类型为:image/jpeg,image/png,image/gif
方法2:上传更改后缀名的木马文件,burpsuite抓包后,修改后缀为php(该方法是以图片上传的,所以content-type已经是图片类型了)
原上传文件类型:
修改后的上传类型:
3、通过上传正常文件,获得其路径,然后通过该路径访问木马文件看是否存在
情况1:如果上传了木马图片,访问该地址显示如下即上传成功
情况2:如果上传了木马php文件,访问该地址报错,可提示上传路径位置
4、使用菜刀连服务器即可
pass-3 黑名单验证
基于文件后缀名验证方式的分类:
1、基于白名单验证:只针对白名单中有的后缀名,文件才能上传成功。
2、基于黑名单验证:只针对黑名单中没有的后缀名,文件才能上传成功。
本题是基于黑名单验证,禁止.jsp、.php、.asp、.aspx后缀名的文件上传。
实际做题中是看不到以下源码的!
if(!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file,$img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '不允许上传.asp,.aspx,.php,.jsp后缀文件!';
}
但是可以其他后缀名嘛,例如php1、php2、phtml、php5等等。
解题思路:
1、直接改后缀名即可,php1、php2、phtml、php5等等,其中有个问题,以上后缀名要能够解析,需要遍历能够解析的后缀
http.conf
2、上传成功后,文件名会被更改,所以需要查看文件上传的位置以及文件名。
pass 4-黑名单验证-htaccess
禁止上传:
.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf后缀文件
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
其中.htaccess文件内容:
内容1:指定文件
SetHandler application/x-httpd-php
设置当前目录所有文件都使用PHP解析,那么无论上传任何文件,只要文件内容符合PHP语言代码规范,就会被当作PHP执行。不符合则报错。
解题思路:
1、.htaccess配置有效
2、创建.htaccess,并将其上传:
SetHandler application/x-httpd-php
3、再上传图片马即可。如 pic.jpg
内容2:指定类型,可任意定义类型
AddType application/x-httpd-php .mochu
最后用菜刀连接更改后缀名的木马文件的路径即可
pass5 黑名单验证-大小写绕过
本pass禁止上传
.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf|.htaccess后缀文件!
解题思路:
由于.htaccess也限制了,但是Linux系统下,对于文件名中的大小写敏感。例如:test.php和 TesT.php就是不一样的。上传.phP成功。
也可使用.user.ini上传,前提条件上传路径中需要存在php文件
(1)先上传一个内容为auto_prepend_file=1.png的.user.ini文件
(2)然后在上传一个内容为一句话木马的脚本,命名为1.png
(3)通过.user.ini文件配置可实现,所有php文件都自动包含1.png文件
pass 6-黑名单验证-空格绕过
黑名单:
“.php”,”.php5”,”.php4”,”.php3”,”.php2”,”.html”,”.htm”,”.phtml”,”.pht”,”.pHp”,”.pHp5”,”.pHp4”,”.pHp3”,”.pHp2”,”.Html”,”.Htm”,”.pHtml”,”.jsp”,”.jspa”,”.jspx”,”.jsw”,”.jsv”,”.jspf”,”.jtml”,”.jSp”,”.jSpx”,”.jSpa”,”.jSw”,”.jSv”,”.jSpf”,”.jHtml”,”.asp”,”.aspx”,”.asa”,”.asax”,”.ascx”,”.ashx”,”.asmx”,”.cer”,”.aSp”,”.aSpx”,”.aSa”,”.aSax”,”.aScx”,”.aShx”,”.aSmx”,”.cEr”,”.sWf”,”.swf”,”.htaccess”
解题思路:
Windows系统下,对于文件名中空格会被作为空处理,程序中的检测代码却不能自动删除空格。
针对这样的情况需要使用Burpsuite阶段HTTP请求之后,修改对应的文件名添加空格。
pass 7-黑名单验证-点绕过
点绕过原理:Windows系统下,文件后缀名最后一个点会被自动去除
处理方法和空格绕过一样,用burpsuite抓包后修改文件名后缀加点
pass 8-黑名单验证-::$DATA特殊符号绕过
特殊符号绕过原理:
Windows系统下,如果上传的文件名中test.php::$DATA会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。
pass 9-黑名单验证- . .绕过(点+空格+点)
pass10-黑名单验证- 双写字符串绕过
解题思路:
后台代码中str_ireplace函数将符合黑名单中的后缀名进行替换为空。可考虑双写绕过,保证替换后正好为php后缀。如后缀.pphphp
$deny_ext = array(“php”,”php5”,”php4”,”php3”……);
file_name = str_ireplace(deny_ext,””, $file_name);
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
if (file_exists(UPLOAD_PATH)) {
$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");
$file_name = trim($_FILES['upload_file']['name']);
$file_name = deldot($file_name);//删除文件名末尾的点
$file_ext = strrchr($file_name, '.');
$file_ext = strtolower($file_ext); //转换为小写
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
$file_ext = trim($file_ext); //首尾去空
if (!in_array($file_ext, $deny_ext)) {
$temp_file = $_FILES['upload_file']['tmp_name'];
$img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
if (move_uploaded_file($temp_file, $img_path)) {
$is_upload = true;
} else {
$msg = '上传出错!';
}
} else {
$msg = '此文件类型不允许上传!';
}
} else {
$msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
}
}
pass 11-白名单绕过GET型 00截断
设置了白名单,且最后路径为拼接
%00截断:可作为结束符被解析,后面的字符均被截断,如上传一个名为test.php%00.png的文件时,字符串校验会匹配到.png后缀,但解析的时候读到%00则认为结束了,文件就变成了test.php从而绕过白名单
%00截断,php5.3.29以下才可以用
解题思路:
(1)上传更改后缀名的木马文件a.png,burpsuite抓包
(2)在POST位置加上1.php%00,这里实际是给a.png重命名
(3)Send to Repeater,go,%00截断让程序认为1.php后已经结束,所以上传的a.png被重命名为1.php
(4)菜刀连接1.php即可
pass 12-白名单绕过POST型 00截断
00截断是用在POST中,需在二进制中进行修改。因为POST不会像GET那样对%00进行自动解码。
解题思路:
(1)上传更改后缀名的木马文件test.png,burpsuite抓包
(2)在上传路径加上重命名的555.php+,后面的加号十六进制是2b,方便在HEX中修改
在Hex界面,通过右边的字符串,找到+标记位,将其改为00
(3)运行上传成功
(4)菜刀连接555.php即可
pass 13-15 图片码
提示:上传图片码,必须要有include.php漏洞
解题思路:
1、上传图片码
方式1:上传一句话木马,后缀改为gif,直接上传后台会检测内容报错,需要在文件开头加上GIF89a
方式2:上传一句话木马,后缀改为png或jpg(windows自带copy命令)
copy miao.jpeg/b + abc.php zzz.jpg
/a 表示一个 ASCII 文本文件
/b 表示一个二进位文件
方式3:利用010编辑器,在图片后面添加一句话木马
2、利用文件包含漏洞,连接菜刀
http://192.168.43.188/include.php?file=upload/9020210920185004.jpg
pass 16-图片码 二次渲染
本题中将上传的图片进行二次渲染,所以直接在图片中插入的木马程序会被删掉
可以针对(git、png、jpg)不同类型的图片插入木马制作图片码
pass 17-条件竞争
原理在删除木马文件之前读取该文件
1、首先开一个上传木马文件mm.php的intruct,clear所有参数
2、设置payload sets,因为没有参数,所以payload type 选中 Null payloads,执行150次
3、再设置一个读文件(/upload/mm.php)的payload,数量要比上传的payload数大,保证读的速度快于上传的速度
4、直到读payload返回200,证明竞争成功
5、则mm.php被保留