Upload-Labs 文件上传漏洞实验详解

Upload-Labs 文件上传漏洞实验详解
ccyccUpload-Labs 文件上传漏洞实验
环境配置
下载upload-labs-master并将其配置到PHPStudy的www目录下,将根文件夹重命名为up。通过访问域名+up进入靶场环境。
Pass-01
漏洞描述
首先上传a.php文件,发现弹窗给出了白名单文件类型.jpg|.png|.gif。禁用前端JavaScript后尝试上传。禁用js后发现上传成功且返回图片。
绕过方法
方法一:检查上传入口
- 查看相关的代码文件
- 在窗口文件的上方有一个检查文件类型的语句
- 双击选中删除return checkFile()
- 再次点击上传文件即可成功上传
方法二:禁用JavaScript
- F12+F1禁用js
- 点击上传木马会出现一个区域
- 右键新建标签打开图片
- 把新界面的网址输入到蚁剑,密码hack
- 右键添加数据把复制的网址和密码填进去
方法三:修改文件扩展名
服务器在前端只依赖检查文件的扩展名,且文件直接使用客户端提供的filename文件:
- 把木马的文件格式改成允许的格式
- 在抓包软件内把filename改回shell.php再放行
- 上传成功后会显示图片样式
- 右键新建打开图像即可成功连接
Pass-02
漏洞描述
发包后提示文件类型不正确。分析数据包,发现可能是对Content-Type类型有限制。
绕过方法
服务器依赖content-type头文件判断文件类型:
- 上传木马shell.php
- 进行抓包把content-type改成允许的格式image/png
- 放行数据包
- 成功上传后连接webshell
Pass-03
漏洞描述
尝试上传3.php,发现黑名单提示:不允许上传.asp,.aspx,.php,.jsp后缀文件!
绕过方法
使用.phtml扩展名:
- 直接上传一个名为3.phtml的文件
- 可以发现直接上传成功
- 使用HackBar构造传参后成功访问phpinfo
Pass-04
漏洞描述
php、php3、phtml等扩展名都被禁止。
绕过方法
使用.htaccess配置文件:
1 | <FilesMatch "4.png"> |
- 先上传.htaccess文件
- 再上传修改的shell.png文件
- .htaccess会使Apache将指定的png文件作为PHP执行
Pass-05
漏洞描述
源码中有大小写转换和去字符去点但是没有去空格处理。
绕过方法
在filename文件名后加空格:
- 上传shell.php抓包
- 修改filename为shell.php. .
- 服务器会将最后面的点删除留下最前面的点
- 放行后自动上传成功
- 右键新建标签页打开图像检查成功
Pass-06
漏洞描述
查看提示发现文件大小写过滤不严谨,可以绕过。
绕过方法
尝试修改数据包上传:
- 将文件扩展名改为大写(如.PHP)
- 成功上传且成功解析
Pass-07
漏洞描述
源码中有大小写转换和去字符去点但是没有去空格处理。
绕过方法
在filename后面加空格:
- 上传shell.php文件
- 抓包修改filename,在后面添加空格
- 成功上传并解析
Pass-08
漏洞描述
源码中缺少删除末尾的点的语句。
绕过方法
在filename后面加点:
- 上传shell.php文件
- 抓包在filename后面添加点
- 成功上传并解析
Pass-09
漏洞描述
原件缺少删去字符串。
绕过方法
文件隐藏注入:
- 在filename后添加::$DATA
- 会自动跳过检查文件
- 成功上传并解析
Pass-10
漏洞描述
源码中显示了完整的黑名单:
1 | $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini"); |
绕过方法
上传文件名为 .php. .(点+php+点+空格+点):
- 利用源码中的过滤漏洞
- 成功上传并解析
Pass-11
漏洞描述
老皮第三个版本。删除php文件名,使用双重文件名。服务器从左向右排查遇见第一个组成php的文件名删除,当到达第二个字母的时候会遇见第一个php,删除后剩余的字母还会组成一个php后缀名。
绕过方法
使用双重php构造:
- 构造文件名如:pphphp.php
- 服务器删除第一个php后变成:pp.php
- 成功上传并解析
Pass-12
漏洞描述
老皮第三个版本。需要php的版本号低于5.3.29,且magic_quotes_gpc为关闭状态(需要自己关闭)。上传图片分析数据包,使用白名单限制上传文件类型,但上传文件的存放路径可控。
绕过方法
利用方法:
- 设置上传路径为upload/shell.php%00
- 添加shell.php%00内容为了控制路径
- 上传文件后缀为白名单即可(如shell.png)
- 保存后为/upload/shell.php%00*****.png
- 服务端读取到%00时会自动结束,将文件内容保存至shell.php中
Pass-13
漏洞描述
需要在hex中修改文件名截断。
绕过方法
- 上传shell.png文件,抓包
- 在hex中将16进制的抓包把0d位置改成00去截断检查
- 新建图片链接的时候将后面的乱码.png删除即可
Pass-14
漏洞描述
源码中只检查前两个字节(十进制)。
绕过方法
- 在木马中前面随意添加两个字母
- 把那两个字母改10进制对应的16进制字节数
- 右键新标签打开图像在up的下一级添加include.php?file=upload/[文件名].png
Pass-15
漏洞描述
需要使用图片马进行绕过。
绕过方法
- 生成图片马
- 在up的下一级输入include.php?file=upload/图片编码
- 成功连接webshell
Pass-16
漏洞描述
需要打开老皮的php_exif模块。
绕过方法
- 在php.ini中启用php_exif模块
- 重启服务器
- 上传图片马
Pass-17
漏洞描述
二次渲染,服务器检测过一次图片信息之后第二次就会放行。
绕过方法
思路:
- 上传一个图片,再把图片另存下来
- 用010editor对两个图片进行数据对比
- 匹配的位置是放行的位置
- 把php木马放进匹配段的位置中
- 保存后把另存的图片重新上传
- 在up的下一级输入include.php?file=upload/图片编码
Pass-18
漏洞描述
需要利用条件竞争漏洞。
绕过方法
方法一:使用Python脚本
- 创建shell.php:
1 |
|
- 创建监控脚本:
1 | import requests |
- 上传sh.php并使用Burp Intruder:
- 在payload中选择null payloads和continue indefinitely
- 开始攻击后文件会在upload目录下闪烁
- 运行Python脚本等待成功
方法二:不使用Python
- 上传sh.php抓包上传到intruder
- 在intruder的payload中选择null payloads和continue indefinitely
- 会有sh文件闪烁
- 在浏览器进入up/upload/sh.php再次进行抓包
- 上传到intruder,在payload中选择null payloads和continue indefinitely
- 在蚁剑添加数据http://[IP]/up/upload/shell.php
Pass-19
漏洞描述
上传图片发现,图片马上传路径不在upload下,但源码中有扩展名白名单。
绕过方法
- 将上一关的sh.php修改为sh.php.7z上传并抓包
- 上传到intruder在payloads把payload type修改为null payloads
- 修改为continue indefinitely进行攻击
- 因为上传的文件放在up目录下并且对文件进行重命名
- 访问http://[IP]/up/uploadsh.php.7z进行抓包上传intruder
- 在payloads把payload type修改为null payloads
- 修改为continue indefinitely进行攻击
- up文件夹会生成shell.php文件
- 用蚁剑访问http://[IP]/up/shell.php































































