白名单就是服务端明确可以上传的格式后缀,例如:jpg、png、jpeg等。
00截断
一、00截断原理
0x00是字符串的结束标识符,攻击者可以利用手动添加字符串标识符的方式来将后面的内容进行截断,而后面的内容又可以帮助我们绕过检测。这样的情况可能会导致文件被保存到一个意外的位置,从而产生安全风险
上面的例子,木马就会保存在text.php中
二、00截断绕过条件
1、php版本<5.3.4
2、Php.ini的magic_quotes_gpc为OFF
get传值时

post传值时
接受值从get变成了post,它两的区别就是get会自行解码,而post不会解码,所以需要对%00进行解码。所以在这一关我们就需要在text.php后面加一个占位符,将其16进制改为00,这样控制符就出现了,最后在上传文件的时候就会触发\00截断
在BS抓包中选中%00右键选择URL其次选择网址解码。

在分号处的16进制改为00



条件竞争
条件竞争漏洞是一种服务器端的漏洞,由于服务器端在处理不同的请求的时候,是并发进行的,因此如果并发处理不当或者相关操作顺序设计的不合理时。将会导致此类问题的发生。
一、条件竞争的原理
在上传文件源代码里面有校验上传的文件,文件直接上传,上传成功后才进行判断:如果文件格式符合的情况下,则重命名,如果文件格式不符合要求,就将文件删除
由于服务器并发处理(同时)多个请求,假如a用户上传了木马文件,由于代码执行需要时间,在此过程中b用户访问了a用户上传的文件,会有以下三种情况:
1.访问时间点在上传成功之前,没有此文件。
2.访问时间点在刚上传成功但还没有进行判断,该文件存在。
3.访问时间点在判断之后,文件被删除,没有此文件。
二、实操
我们可以利用burp多线程发包,然后不断在浏览器访问我们的webshell,会有一瞬间的访问成功。
我们可以将一句话木马写成下面这句:
<?php fputs(fopen('../web.php'), '<?php phpinfo(); ?>'); ?>
<?php $f=fopen("test.php","w");
fputs($f,'<?php @eval(%_POST["cmd"];)?>')
?>

这句话的意思是在上传文件的上一级目录生成我们的木马,写入的内容就是后边的phpinfo
或者说打开test文件,如果没有生成fputs函数后面的木马文件
我们要多次上传,读取到文件才能执行我们的文件,在这期间他会不断删除我们的文件,所以我们要竞争
用burp起两个进程抓包之后使用Intruder一个多次上传,并且一个多次请求刷新,如果我们后写的木马执行说明成功,开始
这个负责上传



两个进程准备就绪,我们就启动

这都200了,很明显是访问到了