upload-labs通关攻略
upload-labs是练习文件上传很好的一个靶场,建议把upload-labs关卡全部练习一遍
1.下载安装
下载地址
链接:https://pan.baidu.com/s/18a5JcD9IifW_Pwc5_bkRsA 提取码:jhks
安装
直接把他放在phpstudy的WWW目录中。(phpstudy的下载安装,可以自行百度一下)
打开
访问地址:127.0.0.1/upload-labs
问题
这里可能会遇到一个问题,burpsuite会抓不到包。这时我们只需把127.0.0.1改为本机IPv4的地址。查看本机IPv的方法:打开cmd,输入ipconfig.这样就可以正常抓包了
接下来就可以打靶了。
第一关
第一关通过右键查看源代码或者提示,我们不难发现是一个前端验证,一般前端验证都是纸老虎,形同虚设。
所以第一关的通关方法有三种:
第一就是将浏览器js代码禁用掉,右键---检查---调试器---设置---禁用JavaScript。快捷方式:f12---f1就可以了
然后就可以上传了。
这种方法有缺陷,因为禁用了js代码,如果在实战中,网站的一些正常功能可能无法显示。当然打靶通关是可以的。
第二种方法是用bp抓包工具直接将改后缀名
如果js代码是在本地运行,很可能抓不到数据包。这种方法也是不太行,同样通过第一关是可以的。
第三种方法是将网站源码复制下来,放到本地,然后将js代码删除。
右键---查看网站源代码---全部复制---创建一个记事本---将代码放进去---把记事本后缀名改为.html---用Notepad打开---找到js代码---删除
如果我们打开,是有上传文件的界面,但是不知道要上传给谁。这时我们返回到最开始,右键---检查---网络---然后上传一个正常的图片。这样我们就可以看到这个文件传给谁了。
然后我们在用Notepad打开我们自己的html文件,修改action,这个action是告诉他这个图片提交给谁,因为这个源代码中没有,我们就自己加一个。
最后用浏览器打开我们的html文件,上传。php文件即可。建议学会用第三种方法,在实战中,可能会遇到很多限制条件,第三种方法才是最完美的。
第二关
根据源代码我们可以发现,这一关是常见验证中的文件类型验证,也就是验证MIME信息
所以进行抓包,将Content-Type修改为允许上传的类型(image/jpeg、image/png、image/gif)三选一。
查看回显,发现已经上传成功
第二关完美通关
第三关
上一篇讲过黑名单是规定不允许上传的文件,但是如果黑名单定义不完整的话是可以实现绕过的,用.phtml .phps .php5 .pht进行绕过。这里我们直接上传一个.php5文件
上传成功,访问看一下
因为上传上去的文件名会改变,但是在数据包中有回显(实战中可能没有),所以我们还是可以访问的。
第三关就完美通过了
注意
要在apache的httpd.conf中有如下配置代码:AddType application/x-httpd-php .php .phtml .phps .php5 .pht,如果不配置他是无法解析php5代码的,访问的时候就是一个空白页
配置过程:以phpstudy2018版本为例
1.打开其他选项单
2.打开配置文件---打开httpd.conf
3.修改代码,去掉注释符#
4.保存,重启phpstudy就可以了
第四关
这一关我们可以看到禁止上传文件可太多了
这种情况,我们可以尝试上传一个.htaccess配置文件,将4.png图片当作php代码进行解析,首先创建一个.htaccess文件,里面写上代码
SetHandler application/x-httpd-php
这串代码的意思是如果文件中有一个4.png的文件,他就会被解析为.php,把这个文件上传上去。
上传上去之后,我们在把图片用Notepad打开,里面写上php代码。再进行上传。
最后我们访问这个4.png文件
第四关就完美通过了
注意
.htaccess文件不能起名字,他就是.htaccess文件,如果你将他改为4.htaccess或者其他的什么名字是不可以的,无法解析。在实战中有可能上传上去这个文件会被自动重命名,被重命名了就不可以了。
如果以上操作都弄好了,还是出不来,还是去改phpstudy配置文件,其他选项菜单--打开配置文件---httpd.conf
箭头指向位置一开始none,改为all保存,重启phpstudy,就可以了。
第五关
第五关其实是有些upload-labs的第九关,我也认为把这关放到第九关比较合适。如果你的第五关和我的不一样,那么我的第六关就是你的第五关,依次类推到第九关。
这一关的思路是它没有循环验证,也就是说这些收尾去空,删除末尾的点,去除字符串::$DATA,转换为小写这些东西只是验证了一次。所以我们的绕过思路就很简单,在数据包中把后缀名改为.php. .说一下他的验证过程,首先他发现有一个点,这时会把他去掉,又发现有一个空格,也会把它去掉,我们这时还有一个点,也就是.php. 由于他只是验证一次,所以不会在去掉我们的点,这时就可以上传成功,也可以解析成功。如下图:
上传成功,然后访问
第五关完美通关
第六关
看第六关的代码我们知道,这一关没有强制将大写转换为小写,所以我们可以上传纯大写或者大小写结合的后缀名
但是要注意不要和限制上传的文件后缀名写重复了。
直接上传一个后缀名为.PHP的文件
我们可以看到上传成功,访问
第六关就完美通关了。
第七关
直接看代码,发现没有收尾去空。上传php文件,抓包在后面加空格。
然后我们可以发现上传成功,访问
第七关闯关成功
第八关
第八关我们可以发现没有删除文件名末尾的点,和第七关思路一样,就是把空格换成点
然后我们可以发现上传成功,访问
第八关闯关成功
第九关
第九关查看代码发现没有去除字符串::$DATA(关于什么是::$DATA参考上一篇文章),和第七八关一样,直接上传,在数据包的php后面直接加上::$DATA
然后我们可以发现上传成功,访问
第九关闯关成功
第十关
第十关和第五关一样,第五关怎么玩,第十关就怎么玩。(好像第五关和第十关重复了,接下来的十一关有可能是你们的第十关,如果你们的upload-labs和我的一样就正常看)
第十一关
第十一关也是黑名单的绕过,他的意思是如果你上传了上面规定的文件,他就会把你的后缀名去掉,比如你上传了11.php,那么他就会把你的php过滤掉。文件没有了后缀名,自然也就无法解析了。但是他是一次过滤,也就是说我们写两个php就可以了:10.pphphp,他过滤掉一个,正好剩下了11.php。如下图所示:
上传成功,然后访问
十一关通关
总结
这些全部为黑名单绕过,而且只是验证一次,所以这些关卡全部可以用一个思路解出来,那就是.php. . 都是可以这样的,但是这就违背了创建靶场者的心思,靶场也就失去了意义,发挥不出靶场真正的作用。大家知道有这么一回事就可以了。所以大家还是按照本篇老老实实打一遍,通关不是目的,让知识得到巩固才是目的。