第一关

第一关通过右键查看源代码或者提示,我们不难发现是一个前端验证,一般前端验证都是纸老虎,形同虚设。
upload-labs通关攻略 - 图1
所以第一关的通关方法有三种:
第一就是将浏览器js代码禁用掉,右键—-检查—-调试器—-设置—-禁用JavaScript。快捷方式:f12—-f1就可以了
upload-labs通关攻略 - 图2
然后就可以上传了。
upload-labs通关攻略 - 图3
这种方法有缺陷,因为禁用了js代码,如果在实战中,网站的一些正常功能可能无法显示。当然打靶通关是可以的。
第二种方法是用bp抓包工具直接将改后缀名
upload-labs通关攻略 - 图4
如果js代码是在本地运行,很可能抓不到数据包。这种方法也是不太行,同样通过第一关是可以的。
第三种方法是将网站源码复制下来,放到本地,然后将js代码删除。
右键—-查看网站源代码—-全部复制—-创建一个记事本—-将代码放进去—-把记事本后缀名改为.html—-用Notepad打开—-找到js代码—-删除
upload-labs通关攻略 - 图5
如果我们打开,是有上传文件的界面,但是不知道要上传给谁。这时我们返回到最开始,右键—-检查—-网络—-然后上传一个正常的图片。这样我们就可以看到这个文件传给谁了。
upload-labs通关攻略 - 图6
然后我们在用Notepad打开我们自己的html文件,修改action,这个action是告诉他这个图片提交给谁,因为这个源代码中没有,我们就自己加一个。
upload-labs通关攻略 - 图7
最后用浏览器打开我们的html文件,上传。php文件即可。建议学会用第三种方法,在实战中,可能会遇到很多限制条件,第三种方法才是最完美的。

第二关

根据源代码我们可以发现,这一关是常见验证中的文件类型验证,也就是验证MIME信息
upload-labs通关攻略 - 图8
所以进行抓包,将Content-Type修改为允许上传的类型(image/jpeg、image/png、image/gif)三选一。
upload-labs通关攻略 - 图9
查看回显,发现已经上传成功
upload-labs通关攻略 - 图10
访问一下
upload-labs通关攻略 - 图11
第二关完美通关

第三关

查看源代码,我们可以发现是一个黑名单验证
upload-labs通关攻略 - 图12
上一篇讲过黑名单是规定不允许上传的文件,但是如果黑名单定义不完整的话是可以实现绕过的,用.phtml .phps .php5 .pht进行绕过。这里我们直接上传一个.php5文件
upload-labs通关攻略 - 图13
上传成功,访问看一下
upload-labs通关攻略 - 图14
因为上传上去的文件名会改变,但是在数据包中有回显(实战中可能没有),所以我们还是可以访问的。
第三关就完美通过了

注意

要在apache的httpd.conf中有如下配置代码:AddType application/x-httpd-php .php .phtml .phps .php5 .pht,如果不配置他是无法解析php5代码的,访问的时候就是一个空白页
配置过程:以phpstudy2018版本为例
1.打开其他选项单
upload-labs通关攻略 - 图15
2.打开配置文件—-打开httpd.conf
3.修改代码,去掉注释符#
upload-labs通关攻略 - 图16
4.保存,重启phpstudy就可以了

第四关

这一关我们可以看到禁止上传文件可太多了
upload-labs通关攻略 - 图17
这种情况,我们可以尝试上传一个.htaccess配置文件,将4.png图片当作php代码进行解析,首先创建一个.htaccess文件,里面写上代码

SetHandler application/x-httpd-php

这串代码的意思是如果文件中有一个4.png的文件,他就会被解析为.php,把这个文件上传上去。
上传上去之后,我们在把图片用Notepad打开,里面写上php代码。再进行上传。
最后我们访问这个4.png文件
upload-labs通关攻略 - 图18
第四关就完美通过了

注意

.htaccess文件不能起名字,他就是.htaccess文件,如果你将他改为4.htaccess或者其他的什么名字是不可以的,无法解析。在实战中有可能上传上去这个文件会被自动重命名,被重命名了就不可以了。
如果以上操作都弄好了,还是出不来,还是去改phpstudy配置文件,其他选项菜单—打开配置文件—-httpd.conf
upload-labs通关攻略 - 图19
箭头指向位置一开始none,改为all保存,重启phpstudy,就可以了。

第五关

第五关其实是有些upload-labs的第九关,我也认为把这关放到第九关比较合适。如果你的第五关和我的不一样,那么我的第六关就是你的第五关,依次类推到第九关。
这一关的思路是它没有循环验证,也就是说这些收尾去空,删除末尾的点,去除字符串::$DATA,转换为小写这些东西只是验证了一次。所以我们的绕过思路就很简单,在数据包中把后缀名改为.php. .说一下他的验证过程,首先他发现有一个点,这时会把他去掉,又发现有一个空格,也会把它去掉,我们这时还有一个点,也就是.php. 由于他只是验证一次,所以不会在去掉我们的点,这时就可以上传成功,也可以解析成功。如下图:
upload-labs通关攻略 - 图20
上传成功,然后访问
upload-labs通关攻略 - 图21
第五关完美通关

第六关

看第六关的代码我们知道,这一关没有强制将大写转换为小写,所以我们可以上传纯大写或者大小写结合的后缀名
upload-labs通关攻略 - 图22
但是要注意不要和限制上传的文件后缀名写重复了。
直接上传一个后缀名为.PHP的文件
upload-labs通关攻略 - 图23
我们可以看到上传成功,访问
upload-labs通关攻略 - 图24
第六关就完美通关了。

第七关

直接看代码,发现没有收尾去空。上传php文件,抓包在后面加空格。
upload-labs通关攻略 - 图25
然后我们可以发现上传成功,访问
upload-labs通关攻略 - 图26
第七关闯关成功

第八关

第八关我们可以发现没有删除文件名末尾的点,和第七关思路一样,就是把空格换成点
upload-labs通关攻略 - 图27
然后我们可以发现上传成功,访问
upload-labs通关攻略 - 图28
第八关闯关成功

第九关

第九关查看代码发现没有去除字符串::$DATA(关于什么是::$DATA参考上一篇文章),和第七八关一样,直接上传,在数据包的php后面直接加上::$DATA
upload-labs通关攻略 - 图29
然后我们可以发现上传成功,访问
upload-labs通关攻略 - 图30
第九关闯关成功

第十关

第十关和第五关一样,第五关怎么玩,第十关就怎么玩。(好像第五关和第十关重复了,接下来的十一关有可能是你们的第十关,如果你们的upload-labs和我的一样就正常看)

第十一关

第十一关也是黑名单的绕过,他的意思是如果你上传了上面规定的文件,他就会把你的后缀名去掉,比如你上传了11.php,那么他就会把你的php过滤掉。文件没有了后缀名,自然也就无法解析了。但是他是一次过滤,也就是说我们写两个php就可以了:10.pphphp,他过滤掉一个,正好剩下了11.php。如下图所示:
upload-labs通关攻略 - 图31
上传成功,然后访问
upload-labs通关攻略 - 图32
十一关通关

总结

这些全部为黑名单绕过,而且只是验证一次,所以这些关卡全部可以用一个思路解出来,那就是.php. . 都是可以这样的,但是这就违背了创建靶场者的心思,靶场也就失去了意义,发挥不出靶场真正的作用。大家知道有这么一回事就可以了。所以大家还是按照本篇老老实实打一遍,通关不是目的,让知识得到巩固才是目的。

upload-labs(12-21关)

接下来的主要就是白名单的绕过,直接开干。

第十二关

第十二关我们看代码,可以得知是一个白名单,只允许上传’jpg’,’png’,’gif’格式的文件。但是上传路径是可以控制的,可以使用%00进行截断。%00只能用于php版本低于5.3的。这里我们需要把phpstudy切换一下版本,把magic_quotes_gpc关闭,以phpstudy为例。其他选项菜单—-php扩展及设置—-参数开关设置—-把magic_quotes_gpc关闭。
upload-labs通关攻略 - 图33
图片就凑合看一下吧,找到位置就可以了。接下来就上传,要上传jpg文件。然后去修改地址
upload-labs通关攻略 - 图34
这里相当于上传了一个12.php文件到upload中,%00就是截断了,后面的不要了。
访问
upload-labs通关攻略 - 图35
这样就可以了,顺利通关。

第十三关

第十三关和第十二关是差不多的,只不过是接受值变成了post,她两的差别呢就是get会自行解码,post不会自行解码,我们需要对%00进行编码,选中%00右键,按下图操作来
upload-labs通关攻略 - 图36
编码好,我们就可以上传了
upload-labs通关攻略 - 图37
上传成功,访问
upload-labs通关攻略 - 图38
第十三关成功

第十四关

第十四关是用图片+php代码,组成一个图片码进行上传,当然要想解析出来这个图片,还得有这个包含漏洞。我们看到,他已经说了,网站存在包含漏洞
首先制作一个图片码,可以直接用Notepad直接打开图片后面加一个php代码,但是需要16进制,要不然图片可能出错。
也可以cmd进行生成,命令语句:copy 14.jpg /b + 14.php /a webshell.jpg 如图所示,我们在上传这个生成后的图片。
upload-labs通关攻略 - 图39
上传
upload-labs通关攻略 - 图40
访问
upload-labs通关攻略 - 图41
看一下访问的地址,因为一开始就说了有一个包含漏洞
upload-labs通关攻略 - 图42
所以地址要加上file
第十四关闯关成功。

第十五关

第十五关我们要了解一个函数
upload-labs通关攻略 - 图43
我们来看这个 getimagesize函数,这个函数的意思是:会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的
所以这关还是用和14关一样的方法,生成带有php代码的图片上传,配合包含漏洞拿下此关。
upload-labs通关攻略 - 图44
上传成功,访问
upload-labs通关攻略 - 图45
十五关通关成功

十六关

第16关同14,15关思路一样,操作一样。但是需要打开php_exif,
phpstudy的其他选项菜单—-打开配置文件—-php-ini
upload-labs通关攻略 - 图46
重启phpstudy即可
exif_imagetype() 读取一个图像的第一个字节并检查其签名。
本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER[‘HTTP_ACCEPT’] 结合使用来检查浏览器是否可以显示某个指定的图像。
通过过程参考14,15关。

第十七关

第十七关主要是把二次渲染绕过imagecreatefromjpeg()函数二次渲染是由Gif文件或 URL 创建一个新图象。成功则返回一图像标识符/图像资源,失败则返回false,导致图片马的数据丢失,上传图片马失败。
进行通关按照原来的方法进行上传,我们可以发现还是可以上传的,但是配合包含漏洞却无法解析,这时我们把上传的图片复制下来用Notepad打开,发现我们原来写的php代码没有了,这就是二次渲染把我们里面的php代码删掉了。
我们把原图和他修改过的图片进行比较,看看哪个部分没有被修改。将php代码放到没有被更改的部分,配合包含漏洞,就可以了。
使用HxD Hex Editor进行比较
下载地址:https://mh-nexus.de/en/hxd
然后比较
upload-labs通关攻略 - 图47
具体实现需要自己编写Python程序,人工尝试基本是不可能构造出能绕过渲染函数的图片webshell的,知道怎么解就可以了。

第十八关

第十八关主要是对条件竞争的考察,我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。
操作:直接上传一个php文件,然后进行抓包,将数据包发送至intruder下,如图操作
upload-labs通关攻略 - 图48
然后如图操作修改
upload-labs通关攻略 - 图49
再修改一下线程
upload-labs通关攻略 - 图50
然后发包,用另一个浏览器一直访问18.php地址,只要在上传的一瞬间,他还没来的及删除、修改就可以了。(卡吧)
upload-labs通关攻略 - 图51
18关完美通关。

第十九关

第十九关的上传路径有点问题,不是上传到了upload里面,建议修改一下,进入第十九关,找到myupload.php文件,如图所示修改。
upload-labs通关攻略 - 图52
重启就可以了。
这关是检查了后缀名,然后上传,然后在进行二次渲染。这时我们只能上传图片马,而且得配合解析漏洞进行通关
操作和18关的一样,就是访问地址是加上包含漏洞的。
upload-labs通关攻略 - 图53
没什么问题,这些漏洞其实都是逻辑上的漏洞,二次渲染本身是没什么问题的。如果人家先验证在进行上传那就没有办法了。
19关完美通关。

第二十关

20关是两种通关方法
第一种
move_uploaded_file()函数中的img_path是由post参数save_name控制的,可以在save_name利用%00截断(注意php版本低于5.3)。如图:
upload-labs通关攻略 - 图54
访问
upload-labs通关攻略 - 图55
由于这种前面关卡已经用过,相信作者真正用意不是考这个。
第二种
move_uploaded_file()有这么一个特性,会忽略掉文件末尾的 /.
所以我们把他修改为如图所示
upload-labs通关攻略 - 图56
访问
upload-labs通关攻略 - 图57
第二十关完美通关

第二十一关

这一关是利用数组绕过验证
upload-labs通关攻略 - 图58
访问
upload-labs通关攻略 - 图59
十九关是一个黑名单,php/.就可以绕过,但是二十关他会检测文件后缀名,是一个白名单。所以把他拆分掉第三部分是.png,所以就会上传。实际上他上传上去的东西是
upload-21.php/.png 上传上去的东西就是upload-21.php。实现了绕过。
完美通关