文件上传
文件上传漏洞是在web渗透中非常关键的一点,通常在类似于头像上传,附件上传等功能点处存在上传验证方式不严谨的安全缺陷
文件上传流程:
一个文件以HTTP协议进行上传,以POST将请求发送至web服务器,web服务器收到请求并同意后,用户与web服务器建立连接,并传输数据
00截断
(1)0x00截断
0x00是十六进制表示法,即为0,部分函数处理时,会将该字符看作结束符
0x00应用在文件名绕过:当系统(以二进制或十六进制读取文件)对文件名进行读取时,读取到0x00就会结束读取。
(2)%00截断
url发送到服务器后被服务器解码,解码成了0x00,%00被服务器解码为0x00发挥了截断作用。
upload-labs
pass-1
:尝试上传一个php文件,得到下图提示信息
:看提示的信息,我们可以用禁用JavaScript的方法
:在火狐浏览器里,访问about:config
,将true改成false
:再次上传php文件,显示上传成功
pass-2
:上传一个包含一句话木马的php文件,显示文件类型不正确
:查看源码,看到是对mime类型进行判断,采用抓包修改对应的类型名字,绕过上传
:如图对content-type进行修改,修改为可上传的类型
:如图成功上传
pass-3
:还是上传一个php文件,返回以下信息
:查看源码,发现是黑名单
:分析源码,限制了大小写等,发现可以通过.php3来绕过,但是出于一种莫名的原因用php3的后缀没有办法查看内容例如phpinfo();就无法查看
pass-4
:上传php文件,没有明显的提示,查看源码
:分析源码,.php5 .phtml等方法都不适用了
不太会,网上说可以用上传**.htaccess**来解决
文件内容如下:
SetHandler application/x-httpd-php
作用就是让所有文件都被当成php文件来解析
:那就先上传一个.htaccess文件,然后上传一个内容为一句话木马的图片文件
pass-5
:查看源码,与上一关不同,这一关禁用了.htaccess
pass-11
:上传一个php文件得到如图信息
:查看源码,get方式传参并且$img_path使用的是上传的文件名后缀,直接进行拼接,采用修改save_path的方式利用%00截断
:如图所示成功上传
pass-12
:查看源码,发现和上一题类似,区别在于POST和GET传参方式,那么%00的截断方法不能用了
:依然是抓包,如图所示在文件后缀后面加上一个空格
:将此处的20改为00,即是将空格改成了十六进制的0,达到截断的目的
:如图成功上传
pass-19
:与前几关都不同的是,这里给了一个保存名称的设定
:查看源码,发现img_path连接的是以POST方式传参的$file_name,那我们可以对save_name进行修改和截断,达到上传绕过的目的
:如图修改,并添加空格,以方便后面的截断
:同样将20修改为00
:如图成功上传
:如图成功通过菜刀连接webshell