概述
文章目录
- 代码逻辑
- 单次过滤 - upload-labs-Pass-10 [代码逻辑绕过]
- 条件竞争
代码逻辑
代码逻辑上的不严谨造成的文件上传可利用漏洞。
单次过滤 - upload-labs-Pass-10 [代码逻辑绕过]
看一下第10关的源码
这里我们可以看到,过滤替换掉 $deny_ext 规则中的后缀名为空。即当我们传一个 “test.php” 文件时会过滤点 “php”,就造成了我们上传的文件变成了 “test”。这样的文件肯定是无法被正常解析的;但是 str ireplace() 函数替换字符的时候只替换了一次,试想一下如果我们传的文件后缀为 “test.pphphp” 上传会怎样?过滤掉 “php” 之后,就变成了 “test.php”。OK,完美!
条件竞争
首先,什么是条件竞争上传,条件竞争上传是一种服务器端的漏洞,由于后端程序操作逻辑不合理导致。
由于服务器端在处理不同用户的请求时是并发进行的,因此,如果并发处理不当或相关操作逻辑顺序设计的不合理时,将会导致此类问题的发生,此漏洞一般发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。
老规矩,源码!
源码中我们看到前后逻辑上的漏洞。
先移动文件,再进行判断。即使验证过滤出文件是非法后门文件,但是这个后门文件也在目录里存在过。
那么是否可以在后门脚本文件的存续的极短时间内直接访问呢?
现在我们就尝试一下,利用该逻辑漏洞先行上传一个后门文件,同时我们再去访问该后门文件;令其在同级目录下重新写入一个后门脚本,这丫也能够的话即使原有的后门脚本被删除,我们也可以利用这个被写入的新的后门去得到访问权限。
现在我们就制作这样一个可写入的后门脚本。
<?php $file=fopen('shell_test.php','w+');fwrite($file,'<?php @eval($_POST[test]);?>');fclose($file); ?>
该脚本的意思就是在我们访问这个文件的时候,就生成一个 “shell_test.php” 文件,同时在文件内写入 "<?php @eval($_POST[test]);?>
因为从上传到删除的整个过程会非常的短,所以我们需要利用 Burp 的
requests 模块制造两个场景。一个是不停的上传最初的脚本文件,一个需要不停的去访问这个最初的脚本文件去触发它写入新的脚本的动作。
首先抓包,设置循环不停的去上传文件
再抓包设置一个场景,不停的循环去访问这个最初的脚本文件去触发它写入新的脚本的动作。
这里因为我靶场是搭建在阿里云服务器上直接被云盾拦截了,没有演示成功的截图,但是在另一台电脑的虚拟机成功了。
最后
以上就是贪玩冬日为你收集整理的WEB漏洞攻防 - 文件上传漏洞 - 条件竞争 [代码逻辑]的全部内容,希望文章能够帮你解决WEB漏洞攻防 - 文件上传漏洞 - 条件竞争 [代码逻辑]所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复