【旧活新整】Upload-Labs全攻略
Upload-Labs全攻略(更新完)
算是近期旧活新整不然快忘光了
因为设备问题,最终决定在服务器上搭建docker进行测试
感谢GitHub - clriseaa/docker-uploadlabs 提供
Docker搭建简易方案:
docker快速搭建
下载upload-labs包
$ git clone https://github.com/clriseaa/docker-uploadlabs.git
创建父级镜像
$ cd docker-uploadlabs/upload-labs/docker
$ docker build -t upload-labs .
创建子级镜像(每道题一个子镜像)
$ cd docker-uploadlabs/Pass/Pass-01
$ docker build -t upload-labs/pass01 .
创建容器(每道题映射一个端口)
$ docker run -d -p 81:80 upload-labs/pass01:latest
访问upload题目页面
http://you-ip:port/Pass
任务解决方案
Pass-01
任务要求讲的很清楚了
准备好一句话木马
上传后发现
限制了文件上传类型,直接burpsuite修改上传文件后缀就可以通过
Pass-02
同上一题
任务的关键在于对上传流量包的文件类型进行了审查
文件类型Content-Type检测,BP抓包截断上传数据包,修改Content-Type为image/jpeg
通过
Pass-03
又是文件类型的问题,但没有提示文件类型信息,所以将文件后缀改为php3就可以上传。
看到了一种很有趣的方法,贴在这儿。
方法是将网站源码复制下来,放到本地,然后将js代码删除。
右键---查看网站源代码---全部复制---创建一个记事本---将代码放进去---把记事本后缀名改为.html---用Notepad打开---找到js代码---删除
如果我们打开,是有上传文件的界面,但是不知道要上传给谁。这时我们返回到最开始,右键---检查---网络---然后上传一个正常的图片。这样我们就可以看到这个文件传给谁了。
然后我们在用Notepad打开我们自己的html文件,修改action,这个action是告诉他这个图片提交给谁,因为这个源代码中没有,我们就自己加一个。
最后用浏览器打开我们的html文件,上传。php文件即可。
Pass-04
可以发现这一关与前三关完全不同的是,它将几乎所有的文件类型都屏蔽掉了,后台审查。
这个时候可以先上传一个.htaccess配置文件,内容为:
1 <FilesMatch "a.png"> 2 SetHandler application/x-httpd-php
可以将我们上传的a.png自动解析为php文件
Pass-05
有了前一关的基础,上传.htaccess文件后,只需要上传一个名称为a的马就行。
这一关其实检测方法为循环验证,就是不断验证文件名后缀。因为虽然后台审查禁止php后缀通过,但是没有审查“php ”等等,所以加个空格可以通过。
而这一关加了一次循环审查,就是审查后缀是否有多余的 . 或者 空格,但只是审查了一次。
所以在上传的包里多加一点符号就能通过,比如“a.php. .”。
或者上传了.htaccess后,再上传的文件会被自动加上php的字样,所以审查机制就自动失效了。(这个方法后续验证不知道为何失败了,还在找原因)
Pass-06
没有强制将大写转换为小写,所以这里看他要求的不可上传的文件类型,捡漏就好。
burp直接上传a.PHP,方法同前几题。
Pass-07
这一关其实很简单,可以参考第五关。
第五关的顺序其实反了,应该在第七关后面,就是一个循环审查机制的问题,第五关有,而第七关没有。
这一关因为后台审查没有设置收尾去空,所以直接上传一个“a.php ”(末尾有空格)就好,后台在审查的时候会发现“php ”和"php"是不一样的,所以可以直接通过。
Pass-08
这一关其实跟上一关一样,只不过这一关加了一个结尾审查。
burp上传“a.php.”就行,这一关的收尾去空的审查只审查了空格,所以a.php就可以了。
Pass-09
这一关继续和上一关类似,就是一个循环验证的机制,只不过这一次是不断循环验证直到文件名后面不再有文件类型的标识。
所以在burp中文件类型后加上字符串::$DATA即可。
a.php::$DATA
Pass-10
和Pass-05重合,同样方法即可。
Pass-11
第十一关仍然是黑名单绕过,也就是说还是对文件后缀进行审查。这一关其实是审查后缀名,如果后缀名非法则把后缀删除再上传(也是心挺大的)。
这里就可以直接多加一个后缀名就好了 。
用burpsuite上传一个“a.php.php”就行。
Pass-12和Pass-13
从这两道题开始都是白名单绕过。我测试了一天,找了一天的问题都没成功,显示上传错误……
大致在网上查找了一下错误的原因,有人说%00截断只适用于PHP5.3.4以下的版本。所以最大的问题就在于这里,阿里云上面好像已经找不到PHP5.6以前的版本了,懒得再到网上去找了。
所以这两天正好也回来了,能用自己的电脑了,准备在本地搭建一下服务器看一眼。
终于成功了……
雀食看docker版本的早就很不爽了
在上传目录处进行%00截断操作,舒服多了
甚至终于可以试一试菜刀了,之前可恶的阿里云一直无法使用菜刀,总是被拦截……
来xdm,上菜刀(其实是蚁剑……)
今晚舒服了,先去睡觉了
第十三题和第十二题本质也是一样的,只不过一个是get上传的方式,一个是post上传的方式,所以get可以自行解码%00截断,而post需要我们自行先帮他解码。
如图所示:
上传成功
能用菜刀就是爽啊……
Pass-14
要求了一个图片马:
先进行制作:
然后直接上传这个jpg文件
可以看到这里图片名称被修改过了。
菜刀连接成功。
附则:
Pass-15
方法同上一关相同。
这一关其实是对上传的图片进行检测,方法为对图片的十六进制检查头几个数字是否符合图片格式,所以使用上一关的方法也可以完成。
Pass-16
这一关其实跟上一关基本原理相似。
exif_imagetype() 读取一个图像的第一个字节并检查其签名。
本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合使用来检查浏览器是否可以显示某个指定的图像。
所以使用上一关方法也没问题,毕竟图片在马的前面。
Pass-17
这一关需要绕过二次渲染,具体来说就是上传的图片会被找出其中是图片的部分然后被解析出来再上传,具体方法是要将上传的最终的图片下载下来,然后找出最终的图片和原始的图片哪一部分是一样的,即未被修改的部分,把这个部分改成一句话就行。
具体需要程序完成,手工操作太累,先放在这儿吧。
Pass-18
这里直接记录方法:
主要是对条件竞争的考察,我们看代码他是先将图片上传上去,才开始进行判断后缀名、二次渲染。如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。
操作:直接上传一个php文件,然后进行抓包,将数据包发送至intruder下,如图操作
然后如图操作修改
再修改一下线程
然后发包,用菜刀不断访问,只要在上传的一瞬间还没来的及删除、修改就可以了。
Pass-19
这一关相比18关多了一个对文件后缀的检查,不影响方法,毕竟上传的文件就是a.jpg
多了包含漏洞,访问地址需要加上?file=
Pass-20
move_uploaded_file()会忽略掉文件末尾的 /.
所以burp中上传“a.php/.”就好
上传成功,菜刀连接一下:
另一种方法介绍:
move_uploaded_file()函数中的img_path是由post参数save_name控制的,可以在save_name利用%00截断
a.php后加%00,因为是post所以decode一下就行(参见第十三关)
Pass-21
可以发现用上一关的方法已经行不通了。
查了一下,这里多了一个后缀名验证,但是同样会省略“./”后的内容,所以加个后缀就可以上传成功。
注意最后上传的后缀名是.jpg,所以需要访问a.jpg才能成功
最后加上一个解释,虽然没搞清楚因为感觉题目不太一样,先放在这儿吧。
验证:题目真的不一样。如果是数组验证的话,只要加个空格就好,空格就会自成数组中的一个,然后就会自动过滤后面的部分,具体如下:
这一关是利用数组绕过验证
访问
十九关是一个黑名单,php/.就可以绕过,但是二十关他会检测文件后缀名,是一个白名单。所以把他拆分掉第三部分是.png,所以就会上传。实际上他上传上去的东西是a.php
参考:https://www.cnblogs.com/chu-jian/p/15515770.html
十分感谢