upload-labs Pass19

管理员 2020-02-12 PM 182℃ 0条

1.这题的源码有点多,我遍历之后大概整理出关键的流程是这样的:

先是把上传的文件进行初始文件命名,命名规则是"upload"+上传的文件名,然后把后缀名截取出来,拿去跟白名单对比,如果在白名单里面,就对文件进行移动保存,最后更改文件名,文件名的格式是"upload"+叠加数+后缀;如果不在白名单里面那就报出错误信息说“上传失败,无法上传该类型文件”。

2.我上传了一个 fputs.php.jpg,由于他的后缀jpg是在白名单里的,所以可以正常上传,但是名字却被更改了。路径也不是upload文件夹而是直接的upload-labs网站根目录,我怀疑可能是作者写错了,少写了个斜杠所以上传目录不是upload

那么会不会出现一种情况,就是保存了没改名?

答案是有可能的,就是我们上传大量的符合条件的文件,然后所有的都需要改名,由于条件竞争,总会有的来不及rename改名。

没改名又该怎么利用?

那这可以配合web中间件的解析漏洞使用,关于各类中间件解析漏洞汇总

3.因为我这里使用phpstudy没法触发解析漏洞,所以我把实验服务器换成了centos6.5,里面也搭建好了upload-labs,用于证明实验

我在upload-labs的upload目录下,创建了个文件 fputs.php.jpg,内容如下:

<?php fputs(fopen('info.php','w')  , '<?php phpinfo()?>');?>

可以看到跟我们之前利用的php写文件一样,执行成功就在本目录下创建个info.php文件

然后我去访问它,访问成功。

我们再去看下服务器的upload目录,可以看到info.php已经写了进去

那么也就是说我们刚才访问 fputs.php.jpg,相当于是把他当成php文件执行了一次,这便是解析漏洞,php后面跟一个apache不认识的拓展名都会被当场php文件执行。

4.那么基于这个原理,我们使用条件竞争来突破

截取上传包发送到Intruder自动化攻击模块

paylaod 位置不用设置,paylaod类型 null paylaod ,攻击方式 Continue indfinitely

然后到抓取访问 fputs.php.jpg的包,这里有点奇怪抓不到直接访问 fputs.php.jpg的包

那我们改动一点点再抓 (或者就是可以用gif,png,7z,rar等后缀,这些不会出现抓不到包的问题,apache也可以解析成php)

然后发送到 Intruder的时候再改好,文件名前面要加upload

paylaod 位置不用设置,paylaod类型 null paylaod ,攻击方式 Continue indfinitely

5.开始条件竞争,不一会访问文件的那端就出现了200的响应码,查看响应包发现访问uploadfputs.php.jpg成功,也就是说我们成功的在那个极短的时间,文件还没来的及改名前,成功让他执行了

可以看到 info.php已经写入了服务器。

然后我们去访问

嘿嘿,执行成功我真是个小天才

6.关于解析漏洞这个,如果大家想去完整的复现这次实验,那么可以自己想办法弄个有解析漏洞的web服务器容器,不仅限于apache。

或者可以这样,上传个文件 shell.jpg,内容同样是写入恶意代码。然后使用前面说过的文件包含漏洞去执行他,这个没问题吧?一边上传,然后另一边去不断文件包含访问,这个也是可以的,都能证明我们的条件竞争实验

标签: 条件竞争

非特殊说明,本博所有文章均为博主原创。

评论啦~