Upload-labs(1-20关保姆级教程)

news2024/12/24 3:20:54

靶场下载链接

https://github.com/c0ny1/upload-labs

话不多说,直接喂饭

lab-1

上传php木马,发现弹出提示框,查看源码可知是前端过滤: 

bp抓包,先上传一张正常的jpg图片

修改文件内容和后缀,大概就是想怎么改就怎么改的样子

比如这样

 拿下

然后蚁剑连接图片(在图片处右击,即可获得图片位置)

lab-2

第二关修改 Content-Type为 image/jpeg

tips:MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的因特网标准。MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。image/jpeg

lab-3

修改.php后缀

php跟phtml的关系

PHP(Hypertext Preprocessor)是一种通用的开源脚本语言,用于服务器端的Web开发。它可以嵌入到HTML中,通过服务器端的解析运行来生成动态的Web页面。

PHTML(PHP HTML)是一种特定于PHP的文件扩展名,它表示包含PHP代码的HTML文件。实际上,PHTML文件本质上是HTML文件,但可以在其中嵌入PHP代码,使页面具有动态功能。

因此,PHTML文件本质上是PHP文件的一种变体,用于在HTML文件中嵌入PHP代码和逻辑。这样,开发人员可以使用PHP的强大功能来处理表单数据、数据库连接和其他服务器端操作,同时保持页面的结构和样式。

lab-4

把所有不符合的后缀都过滤了

.htaccess作用

.htaccess(Hypertext Access)是一个在 Apache Web 服务器上使用的配置文件,用于控制和定制Web服务器的行为。它是一个纯文本文件,通常位于网站的根目录中。

.htaccess 文件的作用很多,下面列举几个常见的应用场景:

1. 重定向和URL重写:可以使用.htaccess 文件来设置 URL 重写规则,将不同的 URL 请求重定向到指定的页面或修改 URL 结构。比如,可以将动态的 URL 修改为更友好更易读的静态 URL。

2. 访问控制:通过.htaccess 文件,可以限制特定目录或文件的访问权限。可以设置密码保护目录,仅允许授权用户访问。

3. MIME 类型设置:.htaccess 文件还可以设置文件的 MIME 类型,指示服务器如何解释和处理不同类型的文件。

4. 缓存控制:通过.htaccess 文件,可以配置网页的缓存策略,以优化网站的加载速度和减少服务器负载。

5. 错误处理:可通过.htaccess 文件自定义错误页面,当服务器发生错误时,将会显示自定义的错误页面,提供更友好的用户体验。

简单来说,就是让服务器在解析文件的时候,.htaccess文件所在目录下,全部以php文件解析 

lab-5 

和第四关一样,并且加上了.htaccess,但是没有将后缀进行大小写统一,于是可以通过大小写绕过

lab-6

黑名单过滤,对比第五关发现没有对后缀名进行去空处理,可在后缀名中加空格绕过

lab-7

查看源码发现没有对后缀名进行去”.”处理。通常情况下,当访问一个网址时,Web服务器会尝试解析URL中的路径,并根据设置的规则去寻找对应的文件。而在解析文件路径时,Web服务器会自动去掉文件后缀名中最后的点"."。可在后缀名中加”.”绕过

lab-8

对比前几关发现还是黑名单,但是没有对后缀名进行去“::$DATA”处理,利用windows特性,可在后缀名中加” ::$DATA”绕过

tips:在Windows操作系统中,"::DATA"是一种特殊的命名约定,它表示文件的一个非默认数据流。

lab-9

对比前面的几关,路径拼接的是处理后的文件名,于是构造info.php. . (点+空格+点),经过处理后,文件名变info.php.,即可绕过

lab-10

审计源码,发现第十关是将后缀名替换为空,于是可以利用双写进行绕过

连接一句话木马

lab-11

审计一下源码,发现为白名单过滤

 $img_path直接拼接,因此可以利用%00截断绕过

%00截断

        00截断是操作系统层的漏洞,由于操作系统是C语言或汇编语言编写的,这两种语言在定义字符串时,都是以\0(即0x00)作为字符串的结尾。操作系统在识别字符串时,当读取到\0字符时,就认为读取到了一个字符串的结束符号。因此,我们可以通过修改数据包,插入\0字符的方式,达到字符串截断的目的。

       字符串截断攻击是利用输入验证或处理中的漏洞,通过插入特定的字符来截断字符串,改变原本的逻辑或绕过限制。当 %00 字符被插入到字符串中时,它会被用作字符串的终止字符,导致后续的内容被忽略。

tips:

php环境中截断条件:

1.php版本小于5.3.4 详情关注CVE-2006-7243

2.php的magic_quotes_gpc为OFF状态,便会有00截断,利用00截断上传。

lab-12

和十一关不同的是这次的save_path是通过post传进来的,还是利用00截断,但这次需要主动解码,因为post不会像get对%00进行自动解码。

然后就会消失了 

lab-13

图片马

图片马制作比较简单,需要一张图片, 一个php文件。

通过copy将图片和php文件组合在一起。

使用cmd执行如下命令

copy 123.jpg /b + shell.php /a shell.jpg

tips:图片在前,php代码在后,先/b后/a ,顺序颠倒就不成功了

lab-14

这关和lab-13一样,只需要上传图片马即可。
image.png
这个函数的作用:会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的。

lab-15

这里用到php_exif模块来判断文件类型,还是直接就可以利用图片马就可进行绕过

exif_imagetype() 读取一个图像的第一个字节并检查其签名.本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上和$_SERVER[‘HTTP_ACCEPT’] 结合使用来检查浏览器是否可以显示某个指定的图像。

lab-16

二次渲染

二次渲染,就是根据用户上传的照片,新生成一个照片,删除原始照片,将新照片添加到数据库中。比如一些网站将用户上传的头像生成大中小的图像,在二次渲染中,我们在图片中写的木马也会渲染掉。

本关综合判断了后缀名、content-type,以及利用imagecreatefromgif判断是否为gif图片,最后再做了一次二次渲染,绕过方法

lab-17

文件先保存在upload文件夹下,然后再判断是否合法,若合法则进行重命名,否则调用unlink函数删除非法文件。

绕过方法:

代码存在条件竞争问题,非法文件上传后会先保存在upload目录下,然后调用unlink函数删除,在这中间时间差里,我们可以不断上传和访问非法文件,只要速度快就可以触发成功。

先设置上传Info.php请求,burp拦截到上传文件后发送到intrude模块,因为这里没有参数需要爆破,只需反复发起请求即可,所以payload设置为null payloads,请求次数为5000次,线程为60.

接下来设置访问请求,浏览器构造请求url://http://192.168.1.106/upload-labs/upload/info.php,进行访问,发送到burp的intrude模块,跟步骤1一样设置同样的payload、5000次请求次数、60个线程。同时开始攻击,观察第二个请求返回的长度,长度不一样的则成功。

这里的第二个攻击也可以利用脚本实现:

import requests
url = "http://192.168.1.106/upload-labs/upload/info.php"
while True:
    html = requests.get(url)
    if html.status_code == 200:
        print("OK")
        break

lab-18

这关的myupload.php中保存上传文件路径的代码其实是有点问题的,setDir函数里$this->cls_upload_dir = $dir;应该加上’/’,改为$this->cls_upload_dir = $dir.'/';,不然保存的图片只会保存在根目录下,不会保存在upload目录下。

本关和Pass-17一样存在条件竞争漏洞,关键函数move、renameFile,先将上传文件保存到upload目录下,再进行重命名,只不过在move之前进行了checkExtension白名单过滤,不能上传php文件进行文件包含来getshell了。幸运的是白名单里有zip、7z、rar等Apache不能解析的后缀名,所以我们可以利用条件竞争+解析漏洞来绕过。

绕过方法:

和上一关一样,上传并访问info.php.7z

lab-19

这关比较简单,pathinfo()返回一个关联数组包含有$file_name的信息,第二个参数PATHINFO_EXTENSION决定了返回后缀名。从我们自定义的文件名save_name中取出后缀名,与黑名单比较,最后与上传目录拼接起来变为上传路径。

绕过方法:

靶机为Windows:

空格绕过

::$DATA绕过

点绕过

0x00截断

大小写绕过

Apache解析漏洞绕过

/.绕过

move_uploaded_file()会忽略掉文件末尾的/.,所以可以构造save_path=1.php/.,这样file_ext值就为空,就能绕过黑名单,而move_uploaded_file()函数忽略文件末尾的/.可以实现保存文件为.php。


靶机为linux:

0x00截断绕过

/.绕过

Pass-20

explode() 函数使用一个字符串分割另一个字符串,并返回由字符串组成的数组,这里是用 . 将文件名打散,并返回数组。

reset() 函数把数组的内部指针指向第一个元素,并返回这个元素的值。

end() 函数将数组内部指针指向最后一个元素,并返回该元素的值(如果成功)。

函数执行流程:文件名通过POST方法提交->MIME白名单校验->后缀名白名单校验->获取文件名并拼接后缀名,构成上传路径

关键:is_array函数判断文件名save_name是否是数组,若不是则用explode函数以.来打散成数组,end函数获取文件后缀、reset获取文件名,最后f i l e [ c o u n t ( file[count(file[count(file) - 1]拼接上最后一个文件后缀=>构成上传路径。

绕过方法:

这里可以构造save_name[0] = info.php/,save_name[2] = jpg,这样数组的长度为2,save_name[1] = null,所以最终file_name=info.php/.,到这里就构成了19题中的/.绕过。

0x00截断绕过,不过php版本要低于5.3.4,参考Pass-11

参考链接:https://blog.csdn.net/weixin_44576725/article/details/124177616

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1106312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python栈和队列

python栈和队列 一、栈1. 栈的基本介绍2. 代码3. 基本操作4. 括号匹配问题5. 删除字符串所有相邻的重复项6. 出栈顺序是否合法 二、队列1. 队列基本介绍2. 队列代码3. 队列基本操作4. 约瑟夫环-循环嵌套5. 约瑟夫环-队列16. 约瑟夫环-队列2 一、栈 1. 栈的基本介绍 特点&…

接口测试经验合集

一 、接口测试常见问题 前景提要:由于本人测试小白,可能所遇问题都较为基础,测试小白可以参考 1.1 postman会报 connect ECONNREFUSED jemeter会报 org.apache.http.conn.HttpHostConnectException: Connect tofailed: Connection refus…

ASEMI-GBJ5010电源控制柜所用整流桥

编辑-Z 电源控制柜是一种常用的电力设备,广泛应用于工业生产过程中。在电源控制柜中,整流桥起着重要的作用。 整流桥是一种用于变流的电器元件,由4个二极管组成。它能够将交流电转换为直流电,并提供稳定的电源给控制柜中的其他设…

07 创建型模式-单例模式

1.单例模式介绍 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一,此模式保证 某个类在运行期间,只有一个实例对外提供服务,而这个类被称为单例类。 2.使用单例模式要做的两件事 保证一个类只有一个实例…

C语言实现:有 5 个人坐在一起,问第 5 个人多少岁?

完整代码: /*有 5 个人坐在一起,问第 5 个人多少岁?他说比第 4 个人大两岁。间第 4 个人岁 数,他说比第 3 个人大两岁。问第 3 个人,又说比第 2 个人大两岁。问第 2 个人, 说比第 1 个人大两岁。最后问第 1 个人&…

Linux内核驱动开发:技能、应用和挑战

Linux内核驱动开发:技能、应用和挑战 Linux内核驱动开发所需技能包括C语言和汇编语言编程、Linux系统编程接口、内核原理和机制、设备驱动开发和调试技术等。同时,熟悉常用的开发环境和工具如GNU工具链、make、gcc、gdb等也是必要的。 Linux内核驱动开…

在华为和比亚迪干了5年测试,月薪25K,熬夜总结出来的划水经验.....

先简单交代一下背景吧,某不知名 985 的本硕,17 年毕业加入华为,之后跳槽到了比亚迪,一直从事软件测试的工作。之前没有实习经历,算是5年的工作经验吧。 这5年之间完成了一次晋升,换了一家公司,…

scada组态软件和硬件结构的主要功能

scada在工厂自动化领域有许多应用。在行业内,所有现场仪表都单独连接到接线盒。多对电缆将从接线盒连接到控制室。 在scada中,电缆被接收在编组柜中。这里,电缆分为模拟输入(AI)、模拟输出(AO)…

3D视觉基础

3D 视觉领域是计算机视觉的一个重要分支,旨在模拟和分析三维空间中的物体、场景和运动。它结合了图像处理、计算几何学、机器学习和深度学习等技术,以从二维图像或传感器数据中重建三维信息。本文主要介绍 3D 视觉中的一些基础概念。 目录 一. 三维坐标系…

Datawhale学习笔记AI +新能源:电动汽车充电站充电量预测

赛题介绍 建立站点充电量预测模型,根据充电站的相关信息和历史电量数据,准确预测未来某段时间内充电站的充电量需求。 在赛题数据中,我们提供了电动汽车充电站的场站编号、位置信息、历史电量等基本信息。我们鼓励参赛选手在已有数据的基础上…

【C++初阶】引用内联函数auto关键字范围for循环nullptr

个人主页还有更多系列专栏:小白不是程序媛 我的小仓库:Gitee C系列专栏:C头疼记 目录 前言 引用 概念 引用的特点 常引用 引用的使用场景 做参数 做返回值 引用和指针的区别 引用和指针的不同点: 内联函数 内联函数…

【LeetCode刷题(数据结构与算法)】:二叉搜索树的范围和

一、什么是二叉搜索树 二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树 二叉搜索树:一棵二叉树,可以为空;如果不为空,满足以下性质 非空左子树的所有键值小于其根结…

Typora使用教程

相关介绍 Typora是一款所写即所得的Markdown编辑器,支持跨平台Window,Linux和Mac都可以。 相关链接 Typora安装包历史版本地址:官网历史版本地址 问题及知识点汇总 关于图片的问题-设置图像自动复制到自己指定文件夹下 问题描述 在写笔记的过程中&am…

Write-Ahead Log(PostgreSQL 14 Internals翻译版)

日志 如果发生停电、操作系统错误或数据库服务器崩溃等故障,RAM中的所有内容都将丢失;只有写入磁盘的数据才会被保留。要在故障后启动服务器,必须恢复数据一致性。如果磁盘本身已损坏,则必须通过备份恢复来解决相同的问题。 理论…

C++ 类和对象(上)------超详细解析,小白必看系列

目录 一、前言 二、面向过程和面向对象初步认识 三、类的引入 三、类的定义 四、类的访问限定符及封装 💦访问限定符 (重点!!!!) 💦封装 五、类的作用域 六、类的实例化 …

算法--排序算法效率比较

《算法设计与分析》课程实验报告 ( 实验一) 实验名称:排序算法效率比较 实验地点: 所使用的开发工具及环境: PC机,DEV 一、实验目的: 比较至少 4 种排序(从小到大排&#xff09…

从十月稻田,看大米为何能卖出200亿市值?

国无农不稳,民无粮不安。新时代的农村农民,需要现代化的农业作依托,而在农业现代化的过程中,品牌化、数字化成为至关重要的一环。 金秋十月,从南到北,从东到西,中国农村的每一块土地都洋溢着丰…

【运筹优化】运筹学导论:线性规划导论

文章目录 一、原形范例(Wyndor Glass 公司)1.1 线性规划模型构建1.2 图解法1.3 结论 二、线性规划模型2.1 线性规划模型的标准形式2.2 其他形式2.3 模型解的术语 三、有关线性规划的假设3.1 比例性3.2 可加性3.3 可分割性3.4 确定性 四、补充例子4.1 放射…

ant的basedir内置属性

basedir是ant的内置属性,代表项目基础路径的绝对路径。它的默认值等于build文件的父目录。当然,可以通过project 的basedir 属性、或者单独的basedir 属性来覆盖。 例如,在工程的根目录下有个build.xml文件: build.xml文件的内…