upload-labs上传漏洞利用笔记
文件上传漏洞
http://59.63.200.79:8016/Pass-01/index.php
- 配置 burpsuite, 开启response 拦截
pass-01 前端验证绕过
核心思想: 拦截 response , 删除前端功能模块。
拦截 response。 删除 96 行以后的 js 模块, 并放行。 获取图片地址, 使用 蚁剑 连接
|
|
pass-02 Content-Type方式绕过
上传,拦截,抓包,修改 content-type: text/php
为 content-type: image/jpeg
|
|
pass-03 黑名单绕过
|
|
分析源码, 仅限制了常见后缀。 而, php 还有其他默认带版本的解析后缀。
例如:
|
|
- 参考: 文件上传限制绕过技巧
这里使用 webshell.php5
|
|
pass-04 .htaccess
文件绕过
.htaccess
是 apache 用来管理目录权限的动态文件, 可以实现目录的黑白名单, 伪静态, 默认解析器 等。
同样,在 nginx 中也可以使用, 不过需要手动引入。
当过滤规则无法绕过的时候,可以尝试优先上传一个 .htaccess
设置某类图片文件 的默认解释器。
|
|
1. 上传 .htaccess
2. 上传 jpg 后缀的 php 文件
|
|
pass-05 后缀大小写绕过
分析源码, 黑名单后缀通过 枚举 方式列出, 但未转换为小写进行二次比较, 因此出现利用方式
|
|
pass-06 文件后缀(空)绕过
文件后缀(空)绕过 利用的是文件上传后,
- 未对文件名进行 trim 首尾去空进行判断。
- 文件存储时,windows 操作系统首尾去空特性
此法在 linux 上可能不可行。
|
|
|
|
pass-07 文件后缀(点)绕过
文件后缀点 利用逻辑与 文件后缀空 类似。 windows 将忽略点。
主要原因是windows等系统默认删除文件后缀的.和空格,查看网站源码发现,没有过滤点。
|
|
pass-08 ::$DATA(Windows文件流绕过
::$DATA
是 windows 特有的绕过漏洞, 利用的是windows 存储机制。
- 参考文档: 渗透测试的WINDOWS NTFS技巧集合
|
|
pass-09 构造文件后缀绕过
又名 点空点 绕过。 认真分析代码,
- 先去除了点
- 再去除了空
- 只执行了一次。
因此, 可以复写 点空 进行绕过。
|
|
10 双写文件后缀绕过
代码删除了后缀名中的黑名单字段。 但只执行了一次, 没有进行多次校验。 利用逻辑与 点空点 相似。
|
|
11 %00
截断绕过
%00
阶段是 php 低版本 5.3.x 中的一个漏洞。 当 PHP 在 URL 中遇到 %00 时, 会认为语句结束而抛弃后面的语句。
|
|
12. %00截断绕过(二)
当 存储路径 不在 URL 中时, 需要使用 二进制 00 阶段
1. 篡改上传路径, 并多写一个字符 a
2. 使用 hex 工具,将 a 修改为 00
|
|
13. 图片马绕过
图片马制作和利用需要注意的几个事项
1. 制作
- 免杀。
- 不要破坏图片显示效果。
- 图片大小要符合使用逻辑。
- 如果渗透语句放在中后段,注意图片不要太大, 避免解释器无法读取
2.利用
- 配合其他漏洞渗透利用, 如解析漏洞。
- 注意修改上传时间,避免被发现。
- 隐藏母马。
|
|
一张图片不行,换一张再试。
vim 二进制编辑
|
|
png
gif
png
http://59.63.200.79:8016/Pass-13/upload/7520201223003243.gif
http://59.63.200.79:8016/Pass-13/upload/8020201223003302.jpg
http://59.63.200.79:8016/Pass-13/upload/3420201223003316.png
# flag_Qg=ekeYD.txt : zkaq{h97@y9mvlFD2aaqX}
- 参考文档: 图片马制作
14. getimagesize图片类型绕过
http://59.63.200.79:8016/Pass-14/upload//2020201223005056.gif
http://59.63.200.79:8016/Pass-14/upload//3020201223005111.png
# flag_g+E9dCHP.txt : zkaq{T4eh66ipeGQzVj1z}
- 参考文档: getimagesize - php
|
|
经测试: 任何 jpg 格式都无法上传。
15. php_exif模块图片类型绕过
上传图片并下载
|
|
使用 grep 查看 一句话 是否还在
本题暂无法利用文件解析漏洞, 未获取到 token
源码分析
|
|
使用 exif_imagetype
读取文件元数据,获取文件类型信息。
注意:在构造图片马时,不能破坏图片文件元数据信息
16 二次渲染绕过
正常上传文件,获取渲染后的文件,使用二进制打开。获取渲染程序信息
搜索相关文档,进行制马绕过。
结论: 失败, 目前还没找到好的图片和插入点。 所有尝试都无法通过 imagecreatefromjpeg() 方法。
参考文档:
二次上传利用 (坑)
分两步
- 上传正常文件,跑完正常逻辑, 获取图片地址。
- 【利用】先上传再验证,且验证失败不删除的代码逻辑。 上传图片马覆盖第一步生成的正常文件。
- 图片马上传成功。
|
|
gif 制马
- https://github.com/RickGray/Bypass-PHP-GD-Process-To-RCE
- [CVE-2019–19576 (Arbitrary file upload in class.upload.php)]https://medium.com/@jra8908/cve-2019-19576-e9da712b779
- https://secgeek.net/bookfresh-vulnerability/
flag
|
|
17 文件竞争
利用方式: 上传母马, 在服务器检测、移动、删除过程中。 强行访问母马生成子马。 从而绕过检测。
- file_put_contents - php 文件写入函数
创建母马
|
|
上传
截断,并发送到 intruder 进行攻击
设置 null payloads, 上传次数等
产马
上传任意图片,获取上传地址, 构造请求
http://59.63.200.79:8016/Pass-17/upload/m-horse.php
设置 payload 信息
run
开启以上两个 intruder, 等待结果。
略
18. 条件竞争2
上传任意图片,提示 上传目录不可写
分析源码, 确认上传流程是先到 临时目录, 在 move 到正式目录。
报错提示为,检查目标文件是否可写的时候触发的。
报错触发此时, 文件已经上传到临时目录。 因此可以使用条件竞争方式,创建子马。
那么, 临时目录又是什么呢?
cls_upload_dir
值为空,
MyUpload function
也没有传入目录。但传入临时文件名。
_FILE
产生了一个随机文件名 ??? 那还玩儿什么??
续
当环境不存在写入问题时, 图片马会通过其他验证, 一直到 move() ,将 临时文件名 改为上传文件
从而满足 条件竞争 的条件
19 move_uploaded_file()
截断
可以自定义文件名,使用 00 截断
使用 hex 将 a
改为 00
|
|
20 . IIS6.0解析漏洞(一)
查看代码, 后缀白名单 与 content-type 白名单
抓包 对应修改
|
|
21. IIS6.0 解析漏洞(二)
使用 asp 分号断言绕过 ;
: webshell.asp;.jpg
|
|
21. IIS6.0 解析漏洞(三)
利用 路径 包含 x.asp
的漏洞
|
|
22. CGI 漏洞
上传一个图片马, 使用 CGI 漏洞
|
|
- 原文链接:https://typonotes.com/posts/2020/12/23/upload-labs/
- 本文为原创文章,转载注明出处。
- 欢迎 扫码关注公众号
Go与云原生
或 订阅网站 https://typonotes.com/ 。 - 第一时间看后续精彩文章。觉得好的话,请猛击文章右下角「在看」,感谢支持。