upload-labs靶场-第十二关 GET截断 上传校验 – 作者:知非知非知非

1626999912_60fa0c6878b25fdb1be5b.png!small

http://localhost/upload-labs/upload//6220210719132942.jpg

上传一个冰冰,可见本次上传的文件进行了重命名!!!

接着上传php探针,查看回显!!!!

1626999919_60fa0c6f66c79385a2dd2.png!small

这题有一个地方非常特殊!!!

URL!!!

http://localhost/upload-labs/Pass-12/index.php?save_path=../upload/

通过URL可以了解到upload文件夹与Paas-12文件夹位于同一个目录!!!

1626999933_60fa0c7d9040b5b2d858b.png!small

好的吧!!!

我们在这里试着将探针文件上传到Paas-12文件夹内 !!!!

上传地址!!!咱们这里再上传一个冰冰!!

http://localhost/upload-labs/Pass-12/index.php?save_path=../Pass-12/

http://localhost/upload-labs/upload//2520210719135928.jpg

但是没有上传成功,这是咋回事!!!

我们看一下前台的源码!!

1626999960_60fa0c98013a3fb2cd78d.png!small

我们试着在这里修改一下地址试试!!!

改成这!!!!

1626999966_60fa0c9e659fd7f9fe0d0.png!small

可见上传地址已经修改!!!可以正常上传!!!

http://localhost/upload-labs/Pass-12/index.php?save_path=../

http://localhost/upload-labs//6120210719140423.jpg

我们在上传一个探针试试!!!

还是有过滤!!!无法上传!!!!

看了大佬的WP,这里的问题是%00截断,绕过!!!

我们查看一下源代码吧!!!

$ext_arr = array(‘jpg’,’png’,’gif’); $file_ext = substr($_FILES[‘upload_file’][‘name’],strrpos($_FILES[‘upload_file’][‘name’],”.”)+1);

//获取上传文件的扩展名!!!

PHP$_FILES 是一个预定义的数组,用来获取通过 POST 方法上传文件的相关信息。

1626999975_60fa0ca7aa5299be3104e.png!small

substr(string,start,length)

substr() 函数返回字符串的一部分。

注释:如果 start 参数是负数且 length 小于或等于 start,则 length 为 0。

length 可选。规定被返回字符串的长度。默认是直到字符串的结尾。

strrpos() 函数查找字符串在另一字符串中最后一次出现的位置。

注释:strrpos() 函数对大小写敏感。

if(in_array($file_ext,$ext_arr)){        $temp_file = $_FILES[‘upload_file’][‘tmp_name’];        $img_path = $_GET[‘save_path’].”/”.rand(10, 99).date(“YmdHis”).”.”.$file_ext;

in_array() 函数搜索数组中是否存在指定的值。

注释:如果 search 参数是字符串且 type 参数被设置为 TRUE,则搜索区分大小写。

in_array(search,array,type)

search

必需。规定要在数组搜索的值。

array

必需。规定要搜索的数组。

type

可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。

如果给定的值 search 存在于数组 array 中则返回 true。如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。如果没有在数组中找到参数,函数返回 false。注释:如果 search 参数是字符串,且 type 参数设置为 true,则搜索区分大小写。

if(move_uploaded_file($temp_file,$img_path)){            $is_upload = true;        } else {            $msg = ‘上传出错!’;        }

move_uploaded_file() 函数将上传的文件移动到新位置。

若成功,则返回 true,否则返回 false。

move_uploaded_file(file,newloc)

file

必需。规定要移动的文件。

newloc

必需。规定文件的新位置。

注释:本函数仅用于通过 HTTP POST 上传的文件。

这个移动完会修改为新的名字!!!

看了大佬的WP的,我终于理解:存在漏洞的代码在这一条!!!!!

$img_path = $_GET[‘save_path’].”/”.rand(10, 99).date(“YmdHis”).”.”.$file_ext;

而且采用这种上传需要满足两个前提条件:

  • magic_quotes_gpc = Off
  • php版本小于3.4

我们先检查一下,我们的环境!!!

这么低版本的PHP,还真的不容易满足!!!

1626999992_60fa0cb8010818fe72907.png!small

这个也得现改,这触发条件也太苛刻了!!!

1627000001_60fa0cc1233b805e57df8.png!small

接着开搞!!!有请工具人冰冰!!!

1627000016_60fa0cd02aad1312cf829.png!small

本来上传的信息如下:

但是由于zhifei.php后边有%00将后边内容截断,所以绕过白名单,成功上传攻击脚本!!!

1627000029_60fa0cdd400db78142209.png!small

如果你复制以上的内容,真正复制下来的就是一下内容!!!!!

../upload/zhifei.php

防止探针PHP:

http://localhost/upload-labs/upload/zhifei.php

成功回显!!!

1627000040_60fa0ce84029edbefb333.png!small

来源:freebuf.com 2021-07-23 08:29:22 by: 知非知非知非

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论