有意思的条件竞争
前段时间,在某场比赛中遇到了一道条件竞争题,感觉很有意思,特别是在实现过程中对payload的设置,这里我复现一下大概过程。
一、背景:
原题是在文件上传的背景下,进行各种绕过(具体可以玩一下upload-labs),然后最后一步是条件竞争。
在条件竞争过程中,需要在上一层目录中生成一个test.php的文件,含test的内容,然后就可以获取到flag。
当然服务器会利用unink()函数,在上传过程中对上传的文件进行删除。
所以,当时的思路是:
通过Burp Suite不断上传一个shell.phtml的文件(除了后缀名,还有其他的绕过,这里不是重点),内含如下代码:
1 | <?php fputs(fopen('../test.php','w'),'test')?> |
服务器会将该shell.phtml的文件进行删除,所以需要再次利用Burp Suite,不断对shell.phtml的文件进行访问,使其在没删除之前,经过Burp Suite访问后,生成test.php文件,从而达到目的。
二、过程:
1、搭建环境:
首先,需要给文件的目录777的权限,如果没有,是不能生成的,搭建过程中给自己坑了一下下。
1 | chmod 777 目录 |
upload.php的代码:
1 | <?php |
这里有点绕,我说明一下:
首先在访问upload.php的时候,会生成一个shell.php文件,内含生成hacker.php的代码
接着服务器会把shell.php文件,进行删除。
这时候,就需要和服务器进行条件竞争,在删除之前,对shell.php文件进行访问,使其生成hack.php文件。
2、复现过程:
(1)不断访问upload.php
(2)不断访问shell.php
(3)结果:
PS:kail里面的Burp Suite只能单线程的,又给坑了一下下
(4)访问hack.php进行验证
可以看到文件已经生成,并且访问成功。
三、总结:
挺有意思的条件竞争,重点关注payload的设置…