【漏洞靶场】文件上传后端检测post0x00绕过白名单--upload-labs

一、漏洞描述

在uplaods-labs的第十三关中,服务器采用了白名单验证,意思为只能上传规定范围内的文件后缀。又将上传后的文件名改为了随机数。但是因为服务器上传路径用post方式传入变量拼接,且php版本小于5.3.4还得magic_quotes_gpc需要off状态。可以利用%00截断服务器后面拼接路径达到绕过。

二、漏洞发现

先在本地写php脚本若上传成功,且知道上传后文件在网站保存的路径,可通过网页访问获得服务器配置信息,命名为z.jpg

直接看靶场的代码。

strrpos()函数:查找字符串在另一个字符串中的位置。这里又加一,比如上传的是z.php则返回3

substr()函数:从一个字符串中提取从指定字符串开始到最后的位置。当然这个长度可指定,这里没做指定,则取到结尾。如上传z.php,先找到了点加一的位置再取到结尾,返回php。

通过这两个函数既不能通过双写绕过也不能通过点绕过。

但是再往下看,post方式传入了save_path变量后面拼接随机数+合法后缀名

可以通过抓包,将post中的save_path变量后面改写为z.php并加%00,且在burp中先对%00进行url解码,因为post不会像get一样对%00进行自动解码ascii中0作为特殊字符保留,表示字符串结束,所以当服务端存储文件时处理文件名的函数认为0x00是终止符号。自然会截断后面的服务器自己定义的随机数文件名

需要两个条件是:

服务器php版本小于5.3.4,因为在5.3.4开始已经修复0字符。

magic_quotes_gpc为off状态,作用是判断解析用户提示的数据,如:post,get,cookie过来的数据加转义字符’\‘,输入数据中要包含(’)双引号(“),反斜线(\)与NULL时候都会被加上反斜线。和addslanshes()函数一个意思。在php.ini配置文件中设置。

注意:魔术引号在php的5.3.0之前默认开启,在5.3.0到5.4.0默认关闭,且在5.4.0起被废除。

当做完上面的白名单验证和定义上传路径之后,上传文件去指定位置。

$_FILES['myFile']['name']文件上传时候本身的名字,用户定义的名字

$_FILES['myFile']['tmp_name'] 文件被上传后在服务端储存的临时文件名,一般是系统默认

三、漏洞利用

上传文件并且用burp抓包,将文件名改为z.jpg在白名单的范围内,将post中的save_path=../upload加%00截断后面服务器定义的随机数文件名

然后将对应的%00进行url解码。上传成功,因为路径和文件名自定义,所以知道文件上传的位置。

直接访问,利用成功,获得服务器配置信息。也可上传一句话木马,通过蚁剑,菜刀等后门工具链接获取webshell。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Edward Hopper

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值