upload-labs通关小记 Pass17-20
"upload-labs通关小记"系列相关:
01:upload-labs通关小记 Pass1-10;
02:upload-labs通关小记 Pass11-16 含代码审计;
03:upload-labs通关小记 Pass17-20(当前文章)。
第十七关——条件竞争
审计代码:
由于文件存储在前,文件审查在后,两者之间有一定的间隙时间,所以我们上传的非法文件能在这个间隙时间内得以保留;
如果这个非法文件是一个webshell_creater.php:用于在服务端创建另一个webshell;
那么只要它在被服务器检测为恶意文件之前创建了新的webshell,新的webshell就能一直存在。
webshell_creater.php如下:
用Burp Suite抓两个包(第一个上传webshell_creater.php的请求包,第二个是访问webshell_creater.php的请求包),然后分别右键发送至Intruder模块
①此请求上传文件webshell_creater.php:
②此请求访问webshell_creater.php,意在利用其生成webshell.php:
然后在Intruder中选择设置Payloads,Attack type(攻击模式)选择Sniper(狙击手),Payload type(有效载荷类型)选择Null Payloads,两个包均选择生成1000次
①以下是上传webshell_creater.php
②以下是访问webshell_creater.php
设置完毕后,尽量快地依次点击两个页面右上方的Start attack,来开始发包;
当试图访问webshell_creater.php的请求中至少有一个成功时,说明我们的webshell.php已经在服务端生成了。
蚁剑直接连接webshell.php即可。
第十八关——条件竞争
审计代码:
此pass代码比较长,而且完整的代码是没办法直接看到的(或许作者之意是不必拘于细节,找到关键点即可)
整个代码的主要逻辑是:有文件上传来->检测其类型是否合法->合法就保存->给文件重命名
而本Pass与Pass-17的区别是:
Pass-17的"间隙时间"在文件保存至检测其为非法并删除之间这段时间;
本Pass的"间隙时间"在检测文件后缀为合法并保存至文件被重命名之间这段时间。
所以,我们一定要①先绕过后缀名检测,并②在间隙时间内访问到webshell_creater.php。
此外,在服务端的代码中有一个小小的bug,导致本Pass的文件上传路径不太正确。
(代码路径:…\upload-labs-env-win-0.1\upload-labs-env\WWW\Pass-18\myupload.php)
Ⅰ. 绕过后缀名检测
从数组名(有"accepted")来看,本Pass应该是个白名单验证,考虑从中选择某个后缀名进行使用。
当然,这里用图片马也是可以的。但是,如果我们使用图片马,那题目中的改名貌似就没有意义了。
而例如".rar",正好是apache无法识别的后缀名,所以我们直接利用Apache解析文件后缀名的特性(Apache从右往左解释文件名,遇到无法识别的后缀名直接跳过,如上传文件:“file.php.rar.xyz”,其中Apache不能识别".xyz",那么转而尝试去识别".rar",但Apache同样不能识别".rar",继续跳过,所以最终Apache将文件名解析为"file.php"):
我们这里上传webshell_creater.php.rar。
Ⅱ. 条件竞争利用
除了要利用文件包含漏洞之外,本Pass与Pass-18无异。
①以下是上传webshell_creater.php.rar的请求。
②以下是访问webshell_creater.php.rar的请求,使用了之前的文件包含漏洞。
将两个请求包一直重发即可。
第十九关
空格绕过、点绕过,大小写绕过等等均可。
本Pass的代码中,除了对保存名的特殊可解析后缀名进行了黑名单检测外,基本没有任何防御措施…
第二十关——一道CTF题
审计代码:
所以应上传一个"数组"(array[0]=>‘webshell.php’, array[1]=>‘png’)。
构造如上图这样的POST提交,即可成功上传webshell。