upload-labs文件上传漏洞(Pass-01~Pass-21)

目录

pass-1(js前端绕过)

pass-2(MiMe绕过)

pass-3(黑名单绕过)

pass-04(.htaccess文件上传)

pass-05

pass-06(大小写绕过)

pass-07(空格绕过)

pass-08(windows特性加点绕过)

pass-09(::$DATA绕过)

pass-10(点空点绕过)

pass-11(双写绕过)

pass-12(GET请求00截断)

pass-13(POST请求00截断)

pass-14(头文件绕过、图片码绕过、文件包含)

pass-15(头文件绕过、图片码绕过、文件包含)

pass-16(头文件绕过、图片码绕过、文件包含)

pass-17(二次渲染)

pass-18(条件竞争)

pass-19(中间件解析漏洞&条件竞争)

pass-20(%00截断)

pass-21(MIME、数组、/绕过)


upload-labs文件上传漏洞(Pass-01~Pass-21)_第1张图片

upload-labs文件上传漏洞(Pass-01~Pass-21)_第2张图片

pass-1(js前端绕过)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第3张图片

由于是直接对上传的文件进行判断,只允许.jpg|.png|.gif,上传文件后,substring()函数会提取文件后缀名,由indexOf()处理返回指定的字符串值在字符串中首次出现的位置,然后进行比较,不符合或没有找到则返还 -1

从源码判断出只是在提交时,对后缀名进行检测然后上传至后台

1.上传一句话

 

2.burpsuite抓包,修改后缀,将. jpg 改为.php

upload-labs文件上传漏洞(Pass-01~Pass-21)_第4张图片

访问1.php

upload-labs文件上传漏洞(Pass-01~Pass-21)_第5张图片

pass-2(MiMe绕过)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第6张图片

1.上传一句话

2.bp抓包,修改content-type

MiMe是什么?一串简单的字符串组成的初期标识了邮件e-mail的附件的类型,后来在html文件中可以使用属性表示,当文件上传后,content-type会标记文件类型,简单来说当我们上传一个1.php文件的时候,content-type会自动将我们这个文件类型标识为application/octet-stream,不匹配时上传失败,这里仅允许content-type为image/jpeg,image/png,image/gif属性的通过

将content-type标识的application/octet-stream修改为image/jpeg

upload-labs文件上传漏洞(Pass-01~Pass-21)_第7张图片upload-labs文件上传漏洞(Pass-01~Pass-21)_第8张图片上传后访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第9张图片

MiMe常见的绕过格式

upload-labs文件上传漏洞(Pass-01~Pass-21)_第10张图片

pass-3(黑名单绕过)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第11张图片

过滤大写绕过,过滤php、asp等为后缀的文件,只是对文件名进行了限制,但是上传文件后,会更改文件名为当前时间

1.上传一句话

2.bp抓包,更改文件后缀

upload-labs文件上传漏洞(Pass-01~Pass-21)_第12张图片

注意:在phpstudy下apache服务下,默认配置文件无法解析以.pthml,.php5等等为后缀的文件,不更改的话服务器无法解析

修改步骤

进入phpstudy的根目录→找到apache文件夹→打开conf→更改httpd.conf配置文件

upload-labs文件上传漏洞(Pass-01~Pass-21)_第13张图片更改AllowOverride为All

upload-labs文件上传漏洞(Pass-01~Pass-21)_第14张图片

修改默认值#AddType application/x-httpd-php

AddType application/x-httpd-php .php .phtml .php5 .pht

upload-labs文件上传漏洞(Pass-01~Pass-21)_第15张图片访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第16张图片

pass-04(.htaccess文件上传)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第17张图片

过滤大小写绕过,phtml,php5等等

1.先上传.htaccess文件

2.再上传1.jpg

.htaccess文件全称Hypertext Access(超文本入口),提供了针对目录改变配置的方法,通过修改此配置文件,可以帮我们实现自定义错误页面、更改扩展名、使用其他文件作为index文件等等

先上传一个.htaccess文件

SetHandler application/x-httpd-php //所有上传的文件都会当成php来解析  

upload-labs文件上传漏洞(Pass-01~Pass-21)_第18张图片

再上传一个1.jpg,被当成php解析

upload-labs文件上传漏洞(Pass-01~Pass-21)_第19张图片

访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第20张图片

pass-05

(注:更新后的upload-labs又在第四关后插入第五关,原第五关改为第六关,第六关改为第七关,第七关改为第八关,以此类推)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第21张图片

方法一:

过滤phtml,php5等等,禁止上传.htaccess文件

1.过滤不严谨,没有过滤Php1,上传1.Php1

upload-labs文件上传漏洞(Pass-01~Pass-21)_第22张图片

方法二:

点绕过

上传文件:1.php. .

upload-labs文件上传漏洞(Pass-01~Pass-21)_第23张图片访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第24张图片

pass-06(大小写绕过)

upload-labs文件上传漏洞(Pass-01~Pass-21)_第25张图片

过滤phtml,php5等等,禁止上传.htaccess文件

1.过滤不严谨,没有对大小写严格过滤,上传1.Php

upload-labs文件上传漏洞(Pass-01~Pass-21)_第26张图片访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第27张图片

pass-07(空格绕过)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第28张图片

没有对后缀去空处理,没有对大小写进行转换,因此可以在后缀名加空格绕过

1.上传一句话1.Php

2.bp抓包,在filename的文件名1.Php后增加一个空格

upload-labs文件上传漏洞(Pass-01~Pass-21)_第29张图片访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第30张图片

pass-08(windows特性加点绕过)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第31张图片

没有对后缀名"."进行处理,利用windows特性,会自动去掉后缀名中最后的".",可在后缀名中加"."绕过

1.上传1.php

2.bp抓包,将后缀修改为1.php.

upload-labs文件上传漏洞(Pass-01~Pass-21)_第32张图片访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第33张图片

pass-09(::$DATA绕过)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第34张图片在window的时候如果文件名+'::$DATA'会把::$DATA之后的数据当成文件流处理,不会检测后缀名。且保留::$DATA之前的文件名。利用windows特性,可在后缀名中加::$DATA绕过

upload-labs文件上传漏洞(Pass-01~Pass-21)_第35张图片访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第36张图片

pass-10(点空点绕过)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第37张图片代码先去除文件名最后的'.',去除文件名前后的空格,第15行和之前不太一样,路径拼接的是处理后的文件名,导致可以利用1.php. .(点+空格+点)绕过

upload-labs文件上传漏洞(Pass-01~Pass-21)_第38张图片访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第39张图片

pass-11(双写绕过)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第40张图片

str_ireplace函数:替换字符串中的一些字符(不区分大小写)。

语法:str_ireplace(find,replace,string)

find:规定查找的值。

replace:规定替换 find 中的值的值

string:规定被搜索的字符串

如:

        

输出:

                Hello Shanghai!

1.双写绕过,上传一个1.pphphp

2.bp抓包

upload-labs文件上传漏洞(Pass-01~Pass-21)_第41张图片访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第42张图片

pass-12(GET请求00截断)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第43张图片入手点在substr函数,返回白名单后进行拼接,如果将后缀名改为.php再利用%00截断后面的内容,即可执行一句话

$img_path = $_GET['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

当以GET方式提交请求的时候,数据会在url内暴露出来,以?分割,多个参数之间用&连接

1.上传文件

2.bp抓包,添加%00

upload-labs文件上传漏洞(Pass-01~Pass-21)_第44张图片访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第45张图片

注意:

截断条件:php版本小于5.3.4,magic_quotes_gpc为NO

更改php版本

upload-labs文件上传漏洞(Pass-01~Pass-21)_第46张图片

勾选magic_quotes_gpc

upload-labs文件上传漏洞(Pass-01~Pass-21)_第47张图片

pass-13(POST请求00截断)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第48张图片

$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext; 

以POST方式提交请求的时,数据不会在url内暴露出来,会放置在http包的包体中,以二进制流的方式传输,所以需要在二进制中进行修改增加%00

注:有些人的bp是新版,界面上可能并没有找到可以直接修改二进制的Hex

首先做个标记

upload-labs文件上传漏洞(Pass-01~Pass-21)_第49张图片

然后从右拉栏里找到

upload-labs文件上传漏洞(Pass-01~Pass-21)_第50张图片

将2b修改为00即可

upload-labs文件上传漏洞(Pass-01~Pass-21)_第51张图片

上传文件

upload-labs文件上传漏洞(Pass-01~Pass-21)_第52张图片

访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第53张图片

pass-14(头文件绕过、图片码绕过、文件包含)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第54张图片

ction getReailFileType($filename){ $file = fopen($filename, "rb"); $bin = fread($file, 2); fclose($file); $strInfo = @unpack("C2chars", $bin);

检测是否为真实图片格式,fread读取前两个字符的数量然后做检查

1.制作图片码,上传文件

2.bp抓包获取文件路径

3.利用文件包含漏洞执行

构造图片码

copy 1.jpg /b + 1.php /a ganyu.jpg

upload-labs文件上传漏洞(Pass-01~Pass-21)_第55张图片

上传图片

upload-labs文件上传漏洞(Pass-01~Pass-21)_第56张图片

利用文件包含访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第57张图片

pass-15(头文件绕过、图片码绕过、文件包含)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第58张图片

getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE

将测定 GIF,JPG,PNG等等 图像文件的大小并返回图像的尺寸以及文件类型

1.修改一句话,上传文件

2.bp抓包获取文件路径

3.利用文件包含漏洞访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第59张图片常见的文件头

upload-labs文件上传漏洞(Pass-01~Pass-21)_第60张图片

截包,将1.php修改为1.jpg,修改content-type为image/jpeg,然后重放

如果直接访问图片,作为php进行解析,需要利用文件包含访问

payload:127.0.0.1/upload/include.php?file=upload/7220211007162015.gif

 upload-labs文件上传漏洞(Pass-01~Pass-21)_第61张图片

或者制作图片码代替头文件绕过

copy 1.jpg /b + 1.php /a ganyu.jpg

pass-16(头文件绕过、图片码绕过、文件包含)

源码: upload-labs文件上传漏洞(Pass-01~Pass-21)_第62张图片

php_exif模块来判断文件类型,方法与上面两题相同

注意:需要先启用php_exif模块

upload-labs文件上传漏洞(Pass-01~Pass-21)_第63张图片

pass-17(二次渲染)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第64张图片

当上传一个文件的时候,首先$fileext会判断是否为jpg的同时,content-type是否为image/jpeg,然后使用move_uploaded_file进行处理,成功则执行二次渲染

1.利用windows下的画图工具,然后保存为一张gif格式的图片(其他格式有的显示上传失败)

2.上传后,保存上传的图片,与原图做比较,利用winhex写入一句话

3.利用bp抓包,获取上传文件路径

4.利用文件包含读取、解析

upload-labs文件上传漏洞(Pass-01~Pass-21)_第65张图片

上传成功后,右击保存上传后的文件

upload-labs文件上传漏洞(Pass-01~Pass-21)_第66张图片

利用winhex,对比原图和上传图片的区别,在相同的地方写入一句话并保存,然后再上传保存的文件  upload-labs文件上传漏洞(Pass-01~Pass-21)_第67张图片

访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第68张图片

pass-18(条件竞争)

源码:upload-labs文件上传漏洞(Pass-01~Pass-21)_第69张图片

move_uploaded_file()函数将上传文件临时保存,再进行判断

不断上传文件,在文件还没被删除前去读取文件。

如果上传文件1.php内容为

');?>

在判断1.php的时候,服务器会解析写入一个内容为

的2.php文件。这时使用BurpSuite的Intruder不断上传1.php,浏览器不断访问1.php,即可造成条件解析漏洞

1.新建一个1.php文件,写入');?>

2.上传文件,使用bp抓包爆破

3.f5刷新2.php upload-labs文件上传漏洞(Pass-01~Pass-21)_第70张图片

上传,设置爆破选项

upload-labs文件上传漏洞(Pass-01~Pass-21)_第71张图片

upload-labs文件上传漏洞(Pass-01~Pass-21)_第72张图片

upload-labs文件上传漏洞(Pass-01~Pass-21)_第73张图片

Start attack

upload-labs文件上传漏洞(Pass-01~Pass-21)_第74张图片

不断刷新浏览器页面后,访问生成的ganyu.php

upload-labs文件上传漏洞(Pass-01~Pass-21)_第75张图片

pass-19(中间件解析漏洞&条件竞争)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第76张图片

利用Apache的解析漏洞,不管最后后缀是什么,构造以.php.xxx结尾,就会被Apache服务器解析成php文件,配合条件竞争访问2.php

注意:这里的路径缺失'/',上传的shell路径为../uploadxxx.php或自行修改源码

upload-labs文件上传漏洞(Pass-01~Pass-21)_第77张图片访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第78张图片

pass-20(%00截断)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第79张图片

upload-labs文件上传漏洞(Pass-01~Pass-21)_第80张图片

题目多出了一个写入保存名称,注意,与GET提交不同的是,POST方式请求的时,数据不会在url内暴露出来,会放置在http包的包体中,以二进制流的方式进行传输,所以需要在二进制中进行修改增加%00

上传2.php,在上传之前,写入保存名称为upload-19.php

upload-labs文件上传漏洞(Pass-01~Pass-21)_第81张图片

给upload-19.php后写入+jpg(加号只是用作标记)

upload-labs文件上传漏洞(Pass-01~Pass-21)_第82张图片

将+改为00,选择+号

然后从右拉栏里找到

upload-labs文件上传漏洞(Pass-01~Pass-21)_第83张图片

将2b修改为00即可

upload-labs文件上传漏洞(Pass-01~Pass-21)_第84张图片

上传

upload-labs文件上传漏洞(Pass-01~Pass-21)_第85张图片

访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第86张图片

pass-21(MIME、数组、/绕过)

源码:

upload-labs文件上传漏洞(Pass-01~Pass-21)_第87张图片

检测content-type是否存在白名单

判断save_name是否为空定义$file变量

若file不为数组,则explode('.', strtolower($file))对file进行分割

将file变为一个数组,利用end函数将file数组的最后一个单位赋值给$ext

判断$ext是否匹配白名单

将file数组的第一个元素用点拼接最后一个元素,赋值给$file_name后上传

bp抓包

upload-labs文件上传漏洞(Pass-01~Pass-21)_第88张图片

1.修改content-type

2.修改POST参数为数组类型,索引[0]为upload-21.php,索引[2]为jpg|png|gif,只要第二个索引不为1,$file[count($file) - 1]就等价于$file[2-1],值为空

upload-labs文件上传漏洞(Pass-01~Pass-21)_第89张图片

访问

upload-labs文件上传漏洞(Pass-01~Pass-21)_第90张图片

你可能感兴趣的:(渗透测试,burpsuite,文件上传,安全漏洞,文件上传,upload-labs)