小言_互联网的博客

【CTFHub】文件上传漏洞_00截断

522人阅读  评论(0)

文件上传漏洞_00截断

原题链接

key:PHP的%00截断

 

①原题界面如下👇

直接上传.php文件显然不行,再尝试上传图片马还是不行

 

②burpsuite抓包,放到repeater中👇

go一下在回应报文里找到源码👇


  
  1. if (! empty($_POST[ 'submit'])) {
  2. $name = basename($_FILES[ 'file'][ 'name']);
  3. $info = pathinfo($name);
  4. $ext = $info[ 'extension'];
  5. $whitelist = array( "jpg", "png", "gif");
  6. if (in_array($ext, $whitelist)) {
  7. $des = $_GET[ 'road'] . "/" . rand( 10, 99) . date( "YmdHis") . "." . $ext;
  8. if (move_uploaded_file($_FILES[ 'file'][ 'tmp_name'], $des)) {
  9. echo "<script>alert('上传成功')</script>";
  10. } else {
  11. echo "<script>alert('上传失败')</script>";
  12. }
  13. } else {
  14. echo "文件类型不匹配";
  15. }

我们上传的图片马格式是在白名单里的gif,显然格式没有错误

注意这一行代码👇

$des = $_GET['road'] . "/" . rand(10, 99) . date("YmdHis") . "." . $ext;

rand()函数显然是生成了随机数,对文件上传的路径进行了拼接

所以我们在成功上传后还是找不到文件路径,依旧无法连接

 

③思路就是用一个截断字符把随机数给截断掉,那就是00截断

00截断的原理

简单来说就是php版本<5.3.4的网页,在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束

 

④明白了原理,那就开始操作,尝试修改请求头里的文件上传路径👇

这样一来,文件上传路径就可以被我们人为地确定了

 

⑤蚁剑连接上URL+文件上传路径(也就是/upload/1.php)

在html目录下找到flag文件

 

 

 


转载:https://blog.csdn.net/Mitchell_Donovan/article/details/115918878
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场