当前位置: 首页 > news >正文

upload-labs漏洞靶场~文件上传漏洞

在这里插入图片描述

寻找测试网站的文件上传的模块,常见:头像上传,修改上传,文件编辑器中文件上传,图片上传、媒体上传等,通过抓包上传恶意的文件进行测试,上传后缀名 asp php aspx 等的动态语言脚本,查看上传时的返回信息,判断是否能直接上传,如果不能直接上传,再进行测试上传突破,例如上传文件的时候只允许图片格式的后缀,但是修改文件时,却没有限制后缀名,图片文件可以修改成动态语言格式如php,则可能访问这个文件的 URL 直接 getshell,可以控制网站;

# 首先我们创建一个木马程序,让它作为文件进行上传,达到我们目的

image-20240731110507503

Pass-01(绕过前端js检测)

# 本题先查看网页源码,把检测js的内容删掉,然后直接上传1.php

image-20240731114443470

image-20240731114506287

# 访问图片的页面,通关

image-20240731110456895

Pass-02(绕过contnet-type)

# 有些上传模块,会对 http 的类型头进行检测,如果是图片类型,允许上传文件到服务器,否则返回上传失败。因为服务端是通过 content-type 判断类型,content-type 在客户端可被修改。则此文件上传也有可能被绕过的风险;
# 所以这道题需要我们抓包,然后查看contnet-type的类型

image-20240731111846806

# 发现后缀名要求是jpeg格式,所以我们插入的格式为1.jpg,然后我们在客户端抓包后再改成1.php

image-20240731111837237

#  修改好后放包,访问文件路径,成功

image-20240731111715771

Pass-03(绕过黑名单上传)

# 上传模块,有时候会写成黑名单限制,在上传文件的时获取后缀名,再把后缀名与程序中黑名单进行检测, 如果后缀名在黑名单的列表内,文件将禁止文件上传;
# 本题我们发现提示不允许上传asp,aspx.php,jsp后缀名的文件

image-20240731112311749

# 因此我们就需要把它的格式替换成其他格式的后缀,也能在其中执行的php后缀名
上传目标中间件可支持的环境的语言脚本即可,如.phtml、php3、php5;

image-20240731112348168

image-20240731112940348

Pass-04(htaccess 重写解析绕过上传)

# 上传模块,黑名单过滤了所有的能执行的后缀名,如果允许上传.htaccess .htaccess 文件的作用是可以帮我们实现包括:文件夹密码保护、用户自动重定向、自定义错误页面、改变你的文件扩展名、封禁特定IP 地址的用户、只允许特定 IP 地址的用户、禁止目录列表,以及使用其他文件作为 index 文件等一些功能;在 htaccess 里写入 SetHandler application/x-httpd-php 则可以文件重写成 php 文件。要 htaccess 的规则生效 则需要在 apache 开启 rewrite 重写模块,因为 apache 是多数都开启这个模块,所以规则一般都生效;
<FilesMatch "jpg">
SetHandler application/x-httpd-php
</FilesMatch>

image-20240731113230027

# 它将所有的.jpg文件解析为.php 然后访问1.jpg即可获取

image-20240731113343601

image-20240731115704688

Pass-05(大小写绕过上传)

# 获取文件后缀名进行判断,如果后缀在这个字典里就禁止上传。
$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");
# 因此我们要用没有被过滤掉的文件名字

image-20240731113512503

# 发现1.php可以,所以给它用大小写来绕过,最后得出结果

image-20240731113536801

image-20240731113615408

Pass-06(利用 windows 系统特征空格绕过上传)

# 由于在windpws系统中可以通过空格和点来表示空白

image-20240731113913864

# 所以我们用空格来做此题,最后发现执行成功

image-20240731114018090

image-20240731114054590

Pass-07(利用 windows 系统特征点绕过上传)

# 同Pass-06题一样,不过这道题是使用点来进行绕过

image-20240731141058352

# 所以我们只需要抓包在输入的地方多加点就可以了

image-20240731141505876

image-20240731141527622

Pass-08(::$DATA绕过上传)

- Windows本地文件系统中的文件流(File Streams):
- 当从 Windows shell 命令行指定创建文件时,流的完整名称为 "filename:stream name:stream type",如示例中所示: "myfile.txt:stream1:$DATA"# 上面都是一些黑名单被绕过的,如果黑名单上传检测后,没有限定后缀名,绕过的方法很多,与黑名单相对的就是白名单,使用白名单验证会相对比较安全,因为只允许指定的文件后缀名。但是如果有可控的参数目录,也存在被绕过的风险;
# 如果后缀名没有对::$DATA 进行判断,利用 windows 系统 NTFS 特征可以绕过上传 ;

image-20240731141641499

# burpsuite 抓包,修改后缀名为 .php::$DATA ;

image-20240731141953721

image-20240731141901613

Pass-09(点空格点绕过上传)

# 本题是需要我们用点空格点来进行绕过

image-20240731142052506

# 直接抓包后在后面输入. . 即可

image-20240731142128519

image-20240731142152228

Pass-10(双写后缀绕过上传)

# 在上传模块,有的代码会把黑名单的后缀名替换成空,例如 a.php 会把 php 替换成空,但是可以使用双写绕过例如 asaspp,pphphp,即可绕过上传;
如下图就可以发现

image-20240731142316696

# 所以我们就可以用双绕过来解答此题
只需要在输入的1.php后来个双绕过,直接拿下

image-20240731142415887

image-20240731142433446

Pass-11(目录可控%00 截断绕过上传(GET))

# 上面都是一些黑名单被绕过的,如果黑名单上传检测后,没有限定后缀名,绕过的方法很多,与黑名单相对的就是白名单,使用白名单验证会相对比较安全,因为只允许指定的文件后缀名。但是如果有可控的参数目录,也存在被绕过的风险;
 - 当 gpc 关闭的情况下,可以用%00 对目录或者文件名进行截断;
- php 版本小于 5.3.4 ;

image-20240731142659390

# 我们通过抓包来截断后面的内容
效果是1.php%00.1.jpg 变成 1.php

image-20240731142647470

image-20240731143159489

Pass-12(目录可控%00 截断绕过上传(POST))

# 此题和Pass-11是一样的 ,只不过一个是get,一个是post

image-20240731143242753

# 我们抓包后在1.php后面用%00来截断,完成此题

image-20240731143328410

image-20240731143536062

Pass-13(文件头检测绕过)

# 有的文件上传,上传时候会检测头文件,不同的文件,头文件也不尽相同。常见的文件上传图片头检测它检测图片是两个字节的长度,如果不是图片的格式,会禁止上传 ;

image-20240731150745387

# 制作图片一句话,使用 copy 1.jpg/b+123.php/a shell.jpg 将 php 文件附加在 jpg 图片上,直接上传即可;/b代表以二进制编码打开文件,/a代表以ASCII码编码打开文件

image-20240731150851073

image-20240731151127395

Pass-14(文件头检测绕过)

# 本题和Pass-15做法一样,按步骤完成即可

image-20240731153330612

image-20240731153349674

image-20240731153357209

Pass-15(文件头检测绕过)

# pass-15和前面两道题也一样,同样的步骤不再重复

image-20240731153517573

image-20240731153549515

image-20240731153508811

Pass-16(图片二次渲染检测绕过)

# 首先判断图片是否允许上传 jpg,jpg 图片在二次渲染后,与原图片差别不会太大。 所以二次渲染攻击最好用 gif 图片图片马;
# 将原图片上传,下载渲染后的图片进行对比,找相同处,覆盖字符串,填写一句话后门,或者恶意指令;

image-20240731161156425

image-20240731161212655

image-20240731161218817

Pass-17(条件竞争漏洞绕过)

# 在文件上传时,如果逻辑不对,会造成很大危害,例如文件上传时,用 move_uploaded_file 把上传的临时文件移动到指定目录,接着再用 rename 文件,设置图片格式,如果在 rename 之前move_uploaded_file 这个步骤 如果这个文件可被客户端访问,这样我们也可以获取一个 webshell;

其实重是重点在于,在多线程情况下,就有可能出现还没处理完,我们就访问了原文件,这样就会导致被绕过防护。

# 首先我们改一个木马,让它的效果明显一点
/cmd.php
<?php @fputs(fopen('123.php',w),'<?php phpinfo();?>');?>

然后和前面的步骤一样,让他生成一个图片马,上传文件,用burp抓包,设置无限发送空的payloads,线程调高一点;

image-20240731191015389

image-20240731191023063

# # python脚本访问我们上传文件
import requests
while True:
html = requests.get('http://192.168.0.216/upload/11.php')
if html.status_code == 200:
print("OK")
break

image-20240731191113882

Pass-18(条件竞争漏洞绕过二)

image-20240731191358838

# 从源码来看的话,对文件后缀名做了白名单判断,然后会一步一步检查文件大小、文件是否存在等等,将文件上传后,对文件重新命名,同样存在条件竞争的漏洞。可以不断利用burp发送上传图片马的数据包,因为move在rename之前,move操作进行了一次文件保存,然后rename进行了一次更改文件名,由于条件竞争,程序会出现来不及rename的问题,从而上传成功。

本题和上一个题差不多,不过是增加了Apache的解析识别漏洞 (后缀冗余)

# 我们需要搞一个运行请求的python的脚本
#requests_2.py
import requests
from threading import Thread
url = "http://192.168.0.216/upload/cmd.php.7z"
url_2 = "http://192.168.0.216/upload/123.php"
def request():
global html
global html_2
html = requests.get(url)
print(html.status_code)
html_2 = requests.get(url_2)
while True:
t = Thread(target=request())
t.start()
if html_2.status_code == 200:
print("123.php已生成!")
break

image-20240731191806990

# 因此我们可以利用Apache的漏洞,将webshell改为1.php.7z
//.7z在Apache的白名单中无法识别,所以利用,我们直接和上一题一样快速发包,实现条件竞争

image-20240731192217431

Pass-19(文件名可控绕过上传)

文件上传时,文件名可被客户端修改控制,会导致漏洞产生;本题也需要将php版本小于5.3.4才行

# 上传文件,文件马采用%00 截断,抓包解码,

image-20240731192914773

image-20240731193025803

image-20240731193412090

Pass-20(数组绕过上传)

# 有的文件上传,如果支持数组上传或者数组命名。如果逻辑写的有问题会造成安全隐患,导致不可预期的上传。这种上传攻击,它是属于攻击者白盒审计后发现的漏洞居多 ;

image-20240731193612865

# 我们通过抓包然后操作以下步骤
修改content-type
2.修改POST参数为数组类型,索引[0]为`upload-20.php`,索引[2]为`jpg|png|gif`。
3.只要第二个索引`不为1`,$file[count($file) - 1]就等价于$file[2-1],值为空。

image-20240731194109683

# 我们需要为upload-20.php复制一个数组,然后完成文件上传,发现图片马也成功了

image-20240731194328941

image-20240731194317619

好小子,离成功又近一步!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【优秀python案例】基于python爬虫的深圳房价数据分析与可视化实现
  • Leetcode3227. 字符串元音游戏
  • 国产版Sora复现——智谱AI开源CogVideoX-2b 本地部署复现实践教程
  • C++速学day1
  • 做不好PPT的原因
  • 左手坐标系、右手坐标系、坐标轴方向
  • thinkphp之命令执行漏洞复现
  • SpringBoot入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享
  • LLaMA- Adapter V2: Parameter-Efficient Visual Instruction Model
  • AI在招聘市场趋势分析中的应用
  • 完美解决pip命令版本冲突导致对应版本模块包无法安装的问题
  • PHP进阶-CentOS7部署LNMP服务架构的项目
  • Swift 析构过程
  • 初步认识vue
  • android studio 无法识别androidTest模块Test模块
  • JS 中的深拷贝与浅拷贝
  • [译] 怎样写一个基础的编译器
  • [译]前端离线指南(上)
  • “大数据应用场景”之隔壁老王(连载四)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • angular组件开发
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • JS变量作用域
  • learning koa2.x
  • Objective-C 中关联引用的概念
  • Puppeteer:浏览器控制器
  • 基于遗传算法的优化问题求解
  • 解决iview多表头动态更改列元素发生的错误
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 码农张的Bug人生 - 见面之礼
  • 使用docker-compose进行多节点部署
  • 算法系列——算法入门之递归分而治之思想的实现
  • 微信小程序:实现悬浮返回和分享按钮
  • 小程序测试方案初探
  • Nginx实现动静分离
  • 大数据全解:定义、价值及挑战
  • 交换综合实验一
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​软考-高级-系统架构设计师教程(清华第2版)【第1章-绪论-思维导图】​
  • (CPU/GPU)粒子继承贴图颜色发射
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第1节 (全局数据、栈和堆)
  • (Java)【深基9.例1】选举学生会
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (多级缓存)多级缓存
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (五)c52学习之旅-静态数码管
  • (转)Linux整合apache和tomcat构建Web服务器
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)人的集合论——移山之道
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation