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

靶场下载链接

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一样,只需要上传图片马即可。

函数的作用:会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求的。

lab-15

以利用图片马就可进行绕过

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

lab-16

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

 上传上去发现里面的一句话木马被渲染了

 试试其他的写入方法

二次渲染

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

lab-17

条件竞争

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

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

  1. 先设置上传shell.php请求,burp拦截到上传文件后发送到爆破模块,因为这里没有参数需要爆破,只需反复发起请求即可,所以payload设置为null payloads,请求次数为6000次,线程为50.
  2. 接下来设置访问请求,浏览器构造请求url://http://192.168.10.136/upload-labs/upload/info.php,进行访问,发送到burp的爆破模块、6000次请求次数、50个线程。
  3. 同时开始攻击,观察第二个请求返回的长度,长度不一样的则成功。

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

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

$is_upload = false;
$msg = null;
if (isset($_POST['submit']))
{require_once("./myupload.php");$imgFileName =time();$u = new MyUpload($_FILES['upload_file']['name'], $_FILES['upload_file']['tmp_name'], $_FILES['upload_file']['size'],$imgFileName);$status_code = $u->upload(UPLOAD_PATH);switch ($status_code) {case 1:$is_upload = true;$img_path = $u->cls_upload_dir . $u->cls_file_rename_to;break;case 2:$msg = '文件已经被上传,但没有重命名。';break; case -1:$msg = '这个文件不能上传到服务器的临时文件存储目录。';break; case -2:$msg = '上传失败,上传目录不可写。';break; case -3:$msg = '上传失败,无法上传该类型文件。';break; case -4:$msg = '上传失败,上传的文件过大。';break; case -5:$msg = '上传失败,服务器已经存在相同名称文件。';break; case -6:$msg = '文件无法上传,文件不能复制到目标目录。';break;      default:$msg = '未知错误!';break;}
}//myupload.php
class MyUpload{
......
......
...... var $cls_arr_ext_accepted = array(".doc", ".xls", ".txt", ".pdf", ".gif", ".jpg", ".zip", ".rar", ".7z",".ppt",".html", ".xml", ".tiff", ".jpeg", ".png" );......
......
......  /** upload()**** Method to upload the file.** This is the only method to call outside the class.** @para String name of directory we upload to** @returns void**/function upload( $dir ){$ret = $this->isUploadedFile();if( $ret != 1 ){return $this->resultUpload( $ret );}$ret = $this->setDir( $dir );if( $ret != 1 ){return $this->resultUpload( $ret );}$ret = $this->checkExtension();if( $ret != 1 ){return $this->resultUpload( $ret );}$ret = $this->checkSize();if( $ret != 1 ){return $this->resultUpload( $ret );    }// if flag to check if the file exists is set to 1if( $this->cls_file_exists == 1 ){$ret = $this->checkFileExists();if( $ret != 1 ){return $this->resultUpload( $ret );    }}// if we are here, we are ready to move the file to destination$ret = $this->move();if( $ret != 1 ){return $this->resultUpload( $ret );    }// check if we need to rename the fileif( $this->cls_rename_file == 1 ){$ret = $this->renameFile();if( $ret != 1 ){return $this->resultUpload( $ret );    }}// if we are here, everything worked as planned :)return $this->resultUpload( "SUCCESS" );}
......
......
...... 
};

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

本关和lab-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解析漏洞绕过
  • /.绕过

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

靶机为linux:

  • 0x00截断绕过
  • /.绕过

lab-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

参考链接:upload-labs_拓海AE的博客-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetCode 30.串联所有单词的子串

给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words ["ab","cd","ef"], 那么 "abcdef&…

互联网Java工程师面试题·Java 面试篇·第五弹

目录 79、适配器模式和装饰器模式有什么区别? 80、适配器模式和代理模式之前有什么不同? 81、什么是模板方法模式? 82、什么时候使用访问者模式? 83、什么时候使用组合模式? 84、继承和组合之间有什么不同&#…

【Python】图像和办公文档的处理

图像和办公文档处理 用程序来处理图像和办公文档经常出现在实际开发中,Python的标准库中虽然没有直接支持这些操作的模块,但我们可以通过Python生态圈中的第三方模块来完成这些操作。 操作图像 计算机图像相关知识 颜色。如果你有使用颜料画画的经历&…

【JavaEE】网络编程(网络编程基础、Socket套接字)

一、网络编程基础 1.1、什么是网络编程? 网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输) 注意:我们只要满足进程不同就行;所以即便是同一…

03-Android App logger策略

背景 经常会为log定位而烦恼。比如:同一个类,一样的log输出,无法定位到Log输出的行。 方案 1.java StackTraceElement 通过java StackTraceElement获取类名,以及log输出行 2. 具体实现 NonNullprivate static String getSour…

[AUTOSAR][诊断管理][ECU][$14] 清除诊断相关信息

文章目录 一、简介(1)应用场景(2)清除DTC原理(3) 请求格式二、示例代码(1) 14_cls_dtc_info.c三、 常见bug大揭秘一、简介 根据ISO14119-1标准中所述,诊断服务14主要用于Client向Server(ECU)请求清除诊断相关信息。 (1)应用场景 一般而言,14诊断服务,主要应用场景…

中间件安全-CVE复现WeblogicJenkinsGlassFish漏洞复现

目录 服务攻防-中间件安全&CVE复现&Weblogic&Jenkins&GlassFish漏洞复现中间件-Weblogic安全问题漏洞复现CVE_2017_3506漏洞复现 中间件-JBoos安全问题漏洞复现CVE-2017-12149漏洞复现CVE-2017-7504漏洞复现 中间件-Jenkins安全问题漏洞复现CVE-2017-1000353漏…

Linux-管道、环境变量、常用命令

文章目录 管道概念要点与文件重定向的区别 环境变量概念查看 常用命令查看系统状况权限文件查找 用户相关工具 管道 概念 管道的作用类似于文件重定向,可以将前一个命令的stout做为下一个命令的stdin 要点 管道命令进处理stdout,会忽略stderr管道右边…

京东数据分析:2023年9月京东洗烘套装品牌销量排行榜!

鲸参谋监测的京东平台9月份洗烘套装市场销售数据已出炉! 根据鲸参谋平台的数据显示,今年9月份,京东平台洗烘套装的销量为7100,环比下降约37%,同比增长约87%;销售额为6000万,环比下降约48%&#…

Swingbench 压力测试(超详细)

目录 前提需要有配置好的oracle哦 1、环境准备 2、安装Swingbench 3、造数据 4、压测 前提需要有配置好的oracle哦 1、环境准备 启动监听 lsnrctl start 启动数据库 sqlplus / as sysdba startup 创建表 CREATE TABLESPACE soe DATAFILE /u01/app/oracle/oradata/or…

HTML+CSS+JS+Django 实现前后端分离的科学计算器、利率计算器(附全部代码在gitcode链接)

🧮前后端分离计算器 📚git仓库链接和代码规范链接💼PSP表格🎇成品展示🏆🏆科学计算器:1. 默认界面与页面切换2. 四则运算、取余、括号3. 清零Clear 回退Back4. 错误提示 Error5. 读取历史记录Hi…

MySQL-DML【数据操作语言】(图码结合)

目录 🚩DML的定义 👉DML-添加数据 🎓给指定的字段添加数据 🕶️查询表数据的方式 ❗疑惑点一【Affecter rows:行数】 ❗疑惑点二【字符集问题】 🎓给全部字段添加数据 🎓批量添加数据 &#x1f…

029-第三代软件开发-加载本地字体库

第三代软件开发-加载本地字体库 文章目录 第三代软件开发-加载本地字体库项目介绍加载本地字体库 关键字: Qt、 Qml、 QFont、 QFontDatabase、 ttf 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Langu…

机器人SLAM与自主导航

机器人技术的迅猛发展,促使机器人逐渐走进了人们的生活,服务型室内移动机器人更是获得了广泛的关注。但室内机器人的普及还存在许多亟待解决的问题,定位与导航就是其中的关键问题之一。在这类问题的研究中,需要把握三个重点&#…

2023年中职组“网络安全”赛项云南省竞赛任务书

2023年中职组“网络安全”赛项 云南省竞赛任务书 一、竞赛时间 总计:360分钟 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略配置 A-3 流量完整性保护 A-4 事件监控 A-5 服务加固…

PKU 概率论+数理统计 期中考复习总结

这里写目录标题 计算条件概率计算概率(放回与不放回)生成随机数算法Uniformity (test of frequency)1.Chi-Square test2.Kolmogorov-Sminov test Independence (test of autocorrelation)Runs test Acceptance-rejection methodmethod方法1:建…

AAPCS:最新的ARM子程序调用规则

AAPCS是arm公司发布的ARM架构应用程序二进制(ABI)程序调用接口,该文档由多个版本,博主第一次ARM程序调用规则是在《ARM体系与结构编程》,但书中描述的是ATPCS,AAPCS是ATPCS的升级版。后面去ARM官网看到了AA…

计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

车辆跟踪及测距 该项目一个基于深度学习和目标跟踪算法的项目,主要用于实现视频中的目标检测和跟踪。该项目使用了 YOLOv5目标检测算法和 DeepSORT 目标跟踪算法,以及一些辅助工具和库,可以帮助用户快速地在本地或者云端上实现视频目标检测和…

javaEE - 1(9000字详解多线程)

一:认识线程 1.1 线程的概念 线程是操作系统中执行的最小单位,它是进程中的一个实体。一个进程可以包含多个线程,并且这些线程共享进程的资源,如内存、文件句柄等,但每个线程有自己的独立执行流程和栈空间。 线程在…

昇腾CANN 7.0 黑科技:大模型训练性能优化之道

目前,大模型凭借超强的学习能力,已经在搜索、推荐、智能交互、AIGC、生产流程变革、产业提效等场景表现出巨大的潜力。大模型经过海量数据的预训练,通常具有良好的通用性和泛化性。用户基于“大模型预训练微调”开发范式即可在实际业务场景取…