概述
目录
- 8.11 竞争条件攻击
- 8.12 竞争条件代码分析
- 8.13 文件上传修复建议
8.11 竞争条件攻击
一些网站上传文件的逻辑是先允许上传任意文件,然后检查上传的文件是否包含WebShell脚本,如果包含则删除该文件。这里存在的问题是文件上传成功后和删除文件之间存在一个短的时间差(因为要执行检查文件和删除文件的操作),攻击者就可以利用这个时间差完成竞争条件的上传漏洞攻击。
攻击者先上传一个WebShell脚本2.php,2.php的内容是生成一个新的WebShell脚本shell.php,2.PHP的代码如下所示。
<?php
$file = fopen("shell.php","w");
fputs($file,"<?php phpinfo();?>");
fclose($file);
?>
当2.php上传成功后,客户端立即访问2.php,则会在服务端当前目录下自动生成shell.php,这时攻击者就利用时间差完成了WebShell的上传,如图102所示。

8.12 竞争条件代码分析
程序获取文件$_FIKES[“file”][“name”]的代码如下所示,先判断upload目录下是否存在相同文件,如果不存在,则直接上传文件,在判断文件是否为WebShell时,还有删除WebShell时,都是需要时间来执行的,如果我们能在删除文件前就访问该WebShell,那么会创建一个新的WebShell,从而绕过改代码限制。
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
//为了说明,这里直接让程序sleep 10s。
//sleep("10");
//unlink("upload/" . $_FILES["file"]["name"]);
}
}
?>
8.13 文件上传修复建议
针对文件上传的修复,笔者给出以下两点建议。
-
通过白名单的方式判断文件后缀是否合法。
-
对上传后的文件进行重命名,例如rand(10,99).date(“YmdHis”).“jpg”。
最后
以上就是寒冷小鸽子为你收集整理的Web安全原理剖析(二十五)——竞争条件攻击及文件上传修复的全部内容,希望文章能够帮你解决Web安全原理剖析(二十五)——竞争条件攻击及文件上传修复所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复