文件上传upload-labs-docker通关

(图片加载不出,说明被和谐了)

项目一:

sqlsec/ggctf-upload - Docker Image | Docker Hub

学习过程中,可以对照源码进行白盒分析.

2515cced969a462f9b5bf61ec2438a0d.png

补充:环境搭建在Linux虚拟机上的同时,以另一台Windows虚拟机进行测试最好。

本地机....容易被杀马。

项目二:

文件上传笔记 阶段一:

文件上传 
[原生态、拓展类、安全框架类]
思维导图
![alt text](image-10.png)核心 : 通过上传 尝试连接后门的攻击
# 必读:
一、文件解析的对应关系. 
(图片中嵌入代码,但是由于解析关系一对一,使用只能解析成图片.)
[错误解析配置、解析漏洞时,才可行]二、 防护考虑
后缀、文件类型(文本类、图像类...)、文件内容等 语言版本、语言函数、中间件、第三方、存储逻辑、存储方案通用: 验证逻辑[函数先后、黑白名单等]、内容检测[文件类型、文件头]等# 原生态检测前端JS[反应快、] : 看源码>抓包判断[不经过直接报错,则说明∈JS]
后端PHP中间件 配置解析规则APache
[htaccess在站点的根目录下面,不是在apache目录下,但是它属于apache的一个配置文件]
核心:.htaccess未过滤 .htaccess可以xxx做php执行.
方法一:创建.htaccess
内容:
<FilesMatch "\.jpg"> # 可以改变 例如 \.png \.gif ...SetHandler application/x-httpd-php
</FilesMatch>或者:抓包修改: filename=.htaccess [文件为被限制类型php等/后端验证]内容:AddType application/x-httpd-php方法二:
filename[文件为被限制的php-后端验证.] = .htaccess
内容: AddType application/x-http-php  .png .jpg ...https://blog.csdn.net/weixin_46684578/article/details/119141109user.ini文件类型  注:修改后缀名,改变的仅是文件类型,文件头并没有被修改.
图像类:
Content-Type: image/gif                      [gif]
Content-Type: image/png                      [png]
Content-Type: image/jpeg                     [jpg、jpeg]
Content-Type: image/bmp                      [.bmp]Content-Type: text/html                      [.html]
Content-Type: application/x-zip-compressed   [.zip]
Content-Type: application/x-compressed       [.rar]
Content-Type: application/x-msdownload       [.exe]
Content-Type: application/pdf                [.pdf]
Content-Type: application/msword             [.doc]一句话木马文件类型:
Content-Type: application/octet-stream       [.php、.asp、.jsp]
Content-Type: application/xml                [.aspx]图像类文件头部特征码  :010编辑器头部标识.
GIF89a |GIF87a  [gif]
GIF89a<?php eval($_POST["pass"]);其他的好像不行...
‰PNG    [png]
ÿØÿ     [jpg]
BM      [.bmp]后缀通过文件头判断文件后缀
通过文件类型判断文件后缀
通过文件后缀判断文件后缀[黑名单、白名单]
黑名单:
[array("php","php5","php4","php3","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf"]
[,"jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess","ini");]%00截断 | url解码>>> 具体由浏览器解析决定(url自动解码、post手动)
条件 1.PHP版本5.3.4 2.模式开关![alt text](mind-map.png)访问即创建
![alt text](image-11.png)
<?php fputs(fopen('xiaodi.php','w'),'<?php eval($_REQUEST[1]);?>');?> # 访问即创建后门代码.一个一直访问,一个一直创建[相遇即产生----条件竞争]条件竞争[因为代码的执行逻辑,先上传,再判断>>>错误,所以导致条件竞争马产生]
[原理:因为再服务器短暂存在过]二次渲染
原理[让其更美好的显示--->代码会改变,所以需要通过对比,保留部分,进而写马]
![alt text](image-12.png)问题: 文件包含漏洞
![alt text](image-13.png)函数缺陷:
move_uploaded_file() ---> shell.php/. [自己指定时有重命名缺陷]二阶段
......

 

项目三

less-1 JavaScript 绕过

eb8079a6a8334c32a3a5b7565cd4edaa.png

ctrl+u 查看页面源代码. 发现是前端验证.

b60f3c0c9d34472c8d40b2a2c97cde69.png

 

方法一、浏览器禁用前端JS

6fd82cbeb0a6432fa4e6fe538afe0bd6.png

59d56021abd644e0a1db572f78069f7d.png

 

方法二、bp抓包:

23eaa3d923e5437e848e58eb26e42272.png

29db49a5abc4440c89e70e936d3c2b29.png

 

前端验证的特点:如上所见.

只有当文件格式正确时,才会进行上传到upload目录下.

所以,

提供思路: 在前端一开始,上传符合文件格式的后缀(图像类后缀.)

通过前端验证后,通过抓包进行修改。

56c59007a9b14353954ea2a894909b0a.png

验证:

81771d09ef694b5f881c0af71a6e8ab6.png

 

less-2 解析上传

1ef1bed832714b9da38559b259e817f7.png

中间件解析错误、中间件漏洞导致文件上传安全问题.:

[原理:配置·文件解析错误,导致图像类型当作PHP类型执行.]

可以通过whatweb知晓也可通过浏览器插件:

17379f9966d949d98a5a8df8f7055182.png

在源码中,黑名单过滤而又没有过滤.htaccess:

9a3a68b2ba4846d08798cfa32510c111.png

网上查htaccess相关资料:

文件上传之 .htaccess文件getshell_上传.htaccess后再上传jpg文件-CSDN博客

拓展 还有user.ini具体我不知道。。。

 

 

先上传.htaccess文件内容可以为:

核心:.htaccess未过滤 .htaccess可以xxx做php执行.
创建.htaccess
内容:
<FilesMatch "\.jpg"> # 可以改变 例如 \.png \.gif ...SetHandler application/x-httpd-php
</FilesMatch>或者:抓包修改: filename=.htaccess [/文件为被限制类型/后端验证]内容:AddType application/x-http-php .png ...

[创建]

665aa05a22d44c33a95ac5e7d3c13512.png

 

 

7ecd480914654d0686314a197bb01d8e.png

 

[抓包] ---

6065d90d63ba4cb3bc4bb096f1c2b2ae.png

 

错误示范--jpg--[抓包]

e378e735af2e4320a4cb3bbfb5b1e44e.png

a31b01e1188a43a39d79b296a9f6622f.png

 

【不知道是哪儿问题[感觉网络连通性。。?],抓包,按理来说图像类,应该都可,但是jpg不可以,png可以。。。】

【这里推荐创建的方法,jpg、png都可以的.】

 

 

 

less-3   MIME绕过

【通过文件类型判断文件后缀】

 

方法一、

查看源码:

203151fa089a47dab4742b652c951768.png

禁用JS上传,发现依旧连接不上。

fffb402fd3d04f07b7b7baefab6af51a.png

猜测是,文件结构导致,进行抓包.修改.先上传1.png抓包过程中改回1.php

(因为Windows大小写不敏感,且通过文件后缀->文件头 标识文件类别.[图像类、音频类等],不过此题仅对文件类型进行判断.并没有对文件头进行判断.)

注:修改后缀名,改变的仅是文件类型,文件头并没有被修改.

文件头部特征码  :010编辑器头部标识.

 

6d532446cb0443e59f70b123d75adef1.png

验证:

e5dca21062744329b24322e0f550614b.png

 

less-4 文件头绕过.

【通过文件头判断文件后缀】

 

前置知识在less-2进行提到过.

99c5a7846ebf4e3987beeee0ddf161ee.png

所以这里需要修改两个地方:

一、上传符合后缀名,在抓包过程中进行修改.[匹配文件类型]

二、给文件内容中写入"文件头+填充"[匹配文件头.]

例子:

 

2402f47d23e049598a0e1af2fd50fb1b.png

257bd744bbdf4cfcb2930941406bd514.png

验证:

27aa16e1444c4e7186980bcb3e223fa4.png

 

此外:其他图像类的好像...不太行。大概可能?gif文件头刚好位于可见字符?【求解惑...】

 

less-5 有缺陷的代码 1

【通过文件后缀判断文件后缀】

黑名单

白名单

 

4ea11c100e334cf8999a725c84b90ade.png

ctrl+U看页面源码,发现验证逻辑在后端.

上传一个违规文件123.php并访问:

a3a27ea389954c4ba80436ad2a32ecc0.png

继续上传一个违规文件123.php%00并访问:

75fb5f29fe3847508bddfa10bcd3bb2f.png

发现php被截断。

【可以猜测大致猜测是替换功能类的函数:问的豆妈,具体差异不论,只知晓具有replace功能.

str_replace () 函数、str_ireplace ()函数、preg_replace () 函数、substr_replace () 函数等

那么

上传一个文件123.pphphp并访问:【利用它的截断】

125692c5a2264acf8ae4dac1a694df86.png

验证:

3ff54202096348609be304623bbe1830.png

源码:

17165e805e7649bfa6d96b7a71745770.png

存在的一些安全问题: (这也是为什么pphphp能够上传的原因.)

【无递归、只检测一次、没有循环操作、且没有区分大小写[函数缺陷] 等】

str_ireplace () 和str_replace ()类似 但是不区分大小写【多个 i 就不区分大小写咯。。。】

 

 

 

 

 

less-6 有缺陷的代码 2(存在缺陷)

 

b56d573d01914842a96a8954d04ba6eb.png

# 红色字体。 Windows特性.

很大概率考察的是

Windows 【文件后缀大小写不区分】

Linux        【文件后缀大小写区分】-----Linux以文件模式为主、文件头辅助去判断.不依靠文件后缀

 

上传违规文件 123.php 并访问

e5dc871400d8491f86103b2bdfecf535.png

截断

 

上传文件 123.pphphp并访问:

be30dbcf65d844cf83f3e3f424fa242b.png

填充字符 %20 也就是空格.

 

上传文件 12345.phP

3b7172a0f75c40b1bf09fbf8356d1364.png

额。。。翻车。。。【可能网络连通性吧...或者360改成不可执行权限了也可能我不会...】

 

不过不重要,知道有这个就行。

源码:

2d95e2f7a6b944508b1ae4cc38212c62.png

用上不过使用的是: str_replace () 大小写区分. phP就会绕过黑名单.

[Windows对大小写敏感]所以理论上会自行[- - 我的这种情况....没执行权限?...?]

 

 

 

less-7 古老的漏洞? 1

原理;因为php是基于C语言等基础开发而来.所以,C语言的缺陷在其他语言可能也会存在

一看就知道咯 —— %00截断.

条件:

  • magic_quotes_gpc = Off
  • PHP 版本小于 5.3.4 【主要】

 

b9c0579a445f4cd183d6fc36c19a6b78.png

 

操作:

532a1ca871e64edebe4a2938ab67d200.png

访问图像地址:

d4926d723f864c46b0437c0f6d8d1013.png

因为实际上被我们的a.php%00进行截断了.

所以其实:

679c7721f881411c9db38f88bfdd2b86.png

 

详细操作:

【以1.php作为演示.】

抓包并进行重放并查看php版本:

2c6221dc3180499b96f7b6b4115338ed.png

b8e56c9d426244c3bc4e2f3535e9eb0b.png

 

发现上传失败,文件类型不匹配,但是php版本匹配。

 

修改文件后缀.发现上传成功.且进行了重命名.

07184f84113e4cc9a529b33187f1b493.png

72504876211440c38e725fca4920a096.png

 

使用aaa.php%00进行截断

未截断前:

3f6b8dbbfd5a4d688a4565768fa57ac7.png

 

 

截断后:

ec1ba7cb4f354ff0ad8a4f39fd5a26ea.png

 

0e06f453b8774f8fb5bab26126028ac8.png

 

再次说明原理:

简单来说,即是使基于重命名的缺陷。使aaa.php%00截断了原本的重命名.重新以aaa.php命名

(用于验证:        1.jpg用 xxx.php%00截断命名.

10c228440dca4f33b31533ead5698344.png

9350395319c441548b352f9e7334386f.png

 

总结:语言版本而造成的上传安全漏洞。

 

less-8 古老的漏洞? 2

b7ec161d02884a7b8888ebd8365736c2.png

同 30007关类似

不一样的点:

d0e681de9ff14b46b8f1bfb469f6bebb.png

 

上传目录在POST内容之中,而不是在POST标头中。

操作方法一致,但需要进行URL编码操作.

【标头自带URL解码、但内容中需要先解码才行.---->对%00进行解码操作操作。】

咳咳咳,失误示范:(1.php->1.png ...)

64995573615143d3a5cad01840ea41e1.png

ecf5ab11c61844018ca5ed2e18a0212d.png

修改好之后:

65f5b0a57a5b41a5bef353a19c71c559.png

9eaba3c2784d4eb79f320eb980e67ae5.png

 

总结: 与7一样。需要知晓%00位于不同位置的处理.

 

 

 

less-9 黑名单缺陷。

 

39d22ac92c284bc69f08892014f06bf3.png

首先需要知道 黑名单和白名单的区别:

黑名单:包含在内都排除。

白名单:不包含在内都排除。

 

【因为靶场,已经告知是PHP黑名单缺陷】那么,根据此,可以直接使用bp PHP字典爆破去跑。

ec82905125f64466bd11368217e4fb2e.png

0559b65658734a78ade954f0c48685ef.png

251b07cc297042a79e5d63c94accc485.png

太多了,。。。打完恢复快照。。。 - - 

 

less-10 条件竞争

fbb829027f024b38ad00d9200f8b9b10.png

原理基于代码逻辑错误:先上传再验证最后再是否留下。

 

虽然,实际存在时间非常短暂,但攻击者可以通过bp攻击模块进行--->卡bug。

即:一个数据包一直设置创建后门,另一个文件一直访问该文件创建的后门。同时进行。

古语讲:" 金蝉脱壳 "

的那种感觉。。。

 

复现:

一、先准备不断访问的数据包。

e15b89feccbb4cfaa8595a2e66866c50.png

通过抓包得到,发送到intruder模块.

9b0deaa2e0fc49b4901b6870eb2de839.png

条件设置.

cfafc2c37eef4478bf7ec87e742db24b.png

 

 

二、后门创建文件代码

 

<?php fputs(fopen('xiao.php','w'),'<?php eval($_REQUEST[1]);?>');?>

 

通过抓包得到,发送到intruder模块.(同上)

928421bb110f466098b7304d66d6f618.png

 

条件设置.(同上)

 

同时进行:

GO!

人工:

http://192.168.117.140:30010/upload/xiao.php # F5不断刷新.

 

bp:

af560932f3584a7f93467aaa56715319.png

3fdea72dee5542c3805bb2d58f364fe3.png

 - -

030c991bebee49db98fed77da6bc81b0.png

对不起,我不配。get不出来。。。T^T

 

 

less-11 二次渲染(存在缺陷.)

 

721bca17b4634dbab70b8405d2871c96.png

即:上传的文件会被网站进行二次操作。

 参考。

【文件上传绕过】——二次渲染漏洞_二次渲染绕过-CSDN博客

 

 

对比文件即可:

.....

 

d8cc05f698ad49cd95bcc1ad82265273.png

.......

15652fa0a6284cb6a6689767a2405187.png

6a5adffa1f804e55bf1007138104d542.png

5bde9ced457844dfafe232acecc67cce.png

.........

不会,,,

其实我有疑惑.....文件后缀、文件类型、文件格式都没改、仅在文件编辑中添加webshell怎么可能执行.....或许我哪儿错了...(想明白了再补.)

 

 

less-12    move_uploaded_file 绕过  

fda9098a12764ac7ba5237ed5c92d953.png

 

函数缺陷:

move_uploaded_file() ---> shell.php/. [自己指定时有重命名缺陷]

 

f86b7505a2ca4df3abbdd15ddd80e87c.png

09b20601120c47f1b7a7d75e8803efe5.png

 

less-13 代码审计(待补.)

不想做了.

09874f11eb8a48c3a46ae70ec2a37ebf.png

(待补)

 

 

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

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

相关文章

【Android】静态广播接收不到问题分析思路

参考资料&#xff1a; Android 静态广播注册流程(广播2)-CSDN博客 Android广播发送流程(广播3)_android 发送广播-CSDN博客 https://zhuanlan.zhihu.com/p/347227068 在Android中&#xff0c;静态广播如果静态广播不能接收&#xff0c;我们可以从整个流程中去分析&#xff…

2024 APMCM亚太数学建模C题 - 宠物行业及相关产业的发展分析和策略(详细解题思路)

在当下&#xff0c; 日益发展的时代&#xff0c;宠物的数量应该均为稳步上升&#xff0c;在美国出现了下降的趋势&#xff0c; 中国 2019-2020 年也下降&#xff0c;这部分变化可能与疫情相关。需要对该部分进行必要的解释说明。 问题 1: 基于附件 1 中的数据及您的团队收集的额…

Git简单介绍

一、 Git介绍与安装 1.1 Git简介 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 1.2集中式(SVN&#xff09; VS 分布式(git) 集中式版本控制系统&#xff0c;版本库是集中存放在中央服务器的&#xff0c;工作时要先从中央…

CSS之3D转换

三维坐标系 三维坐标系其实就是指立体空间&#xff0c;立体空间是由3个轴共同组成的。 x轴:水平向右注意:x右边是正值&#xff0c;左边是负值 y轴:垂直向下注意:y下面是正值&#xff0c;上面是负值 z轴:垂直屏幕注意:往外面是正值&#xff0c;往里面是负值 3D移动 translat…

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

基于Springboot的心灵治愈交流平台系统的设计与实现

基于Springboot的心灵治愈交流平台系统 介绍 基于Springboot的心灵治愈交流平台系统&#xff0c;后端框架使用Springboot和mybatis&#xff0c;前端框架使用Vuehrml&#xff0c;数据库使用mysql&#xff0c;使用B/S架构实现前台用户系统和后台管理员系统&#xff0c;和不同级别…

【人工智能】Python常用库-Scikit-learn常用方法教程

Scikit-learn 是一个功能强大的机器学习库&#xff0c;支持数据预处理、分类、回归、聚类、降维等功能&#xff0c;广泛用于模型开发与评估。以下是 Scikit-learn 的常用方法及详细说明。 1. 安装与导入 安装 Scikit-learn&#xff1a; pip install scikit-learn导入基本模块…

Tcon技术和Tconless技术介绍

文章目录 TCON技术&#xff08;传统时序控制器&#xff09;定义&#xff1a;主要功能&#xff1a;优点&#xff1a;缺点&#xff1a; TCONless技术&#xff08;无独立时序控制器&#xff09;定义&#xff1a;工作原理&#xff1a;优点&#xff1a;缺点&#xff1a; TCON与TCONl…

计算机基础(下)

内存管理 内存管理主要做了什么&#xff1f; 操作系统的内存管理非常重要&#xff0c;主要负责下面这些事情&#xff1a; 内存的分配与回收&#xff1a;对进程所需的内存进行分配和释放&#xff0c;malloc 函数&#xff1a;申请内存&#xff0c;free 函数&#xff1a;释放内存…

【青牛科技】TS223 单触摸键检测IC

概 述 &#xff1a; TS223是 触 摸 键 检 测 IC&#xff0c; 提 供 1个 触 摸 键 。 触 摸 检 测 IC是 为 了用 可 变 面 积 的 键 取 代 传 统 的 按 钮 键 而 设 计 的 。低 功 耗 和 宽 工 作 电压是 触 摸 键 的 DC和 AC特 点 。TS223采 用 SSOP16、 SOT23-6的 封 装 形 式…

CUDA补充笔记

文章目录 一、不同核函数前缀二、指定kernel要执行的线程数量三、线程需要两个内置坐标变量来唯一标识线程四、不是blocksize越大越好&#xff0c;上限一般是1024个blocksize 一、不同核函数前缀 二、指定kernel要执行的线程数量 总共需要线程数是&#xff1a; 1 * N N个线程…

“华为杯”研究生数学建模比赛历年赛题汇总(2004-2024)

文章目录 赛题链接历年赛题2004年赛题2005年赛题2006年赛题2007年赛题2008年赛题2009年赛题2010年赛题2011年赛题2012年赛题2013年赛题2014年赛题2015年赛题2016年赛题2017年赛题2018年赛题2019年赛题2020年赛题2020年赛题2021年赛题2022年赛题2023年赛题2024年赛题 赛题链接 部…

Python学习指南 + 谷歌浏览器如何安装插件

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; Python 目录 前言 Python 官方文档的使用 谷歌浏览器中如何安装插件 前言 在学习Python时&#xff0c;我们可能会出现这样的困惑&#x…

java写一个石头剪刀布小游戏

石头剪刀布是一款经典的手势游戏,通常由两人参与,玩法简单且充满趣味。玩家通过出示手势代表“石头”、“剪刀”或“布”,并根据规则比较手势决定胜负。它广泛用于休闲娱乐、决策或解压活动。 一、功能简介 用户与计算机对战。 用户输入选择:石头、剪刀或布。 计算机随机生…

docker如何安装redis

第一步 如果未指定redis&#xff0c;则安装的是最新版的 docker pull redis 创建一个目录 mkdir /usr/local/docker/redis 然后直接可以下载redis&#xff0c;这是方式确实不怎么好&#xff0c;应该找在官网上找对应的redis配置文件 wget http://download.redis.io/redis-stab…

【作业九】RNN-SRN-Seq2Seq

点击查看作业内容 目录 1 实现SRN &#xff08;1&#xff09;使用numpy实现 &#xff08;2&#xff09;在&#xff08;1&#xff09;的基础上&#xff0c;增加激活函数tanh &#xff08;3&#xff09;使用nn.RNNCell实现 &#xff08;4&#xff09;使用nn.RNN实现 2 使用R…

利用Docker容器技术部署发布web应用程序

Docker是什么&#xff1f; docker 是一个开源的应用容器引擎&#xff0c;可以帮助开发者打包应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化&#xff0c;容器是完全使用沙箱机制&#xff0c;相互之间不会有任何…

【AI学习】Mamba学习(十八):S6的硬件感知设计

上一篇Mamba的文章提到&#xff0c;S6 models这个名称的由来是&#xff1a;S4 models with a selection mechanism and computed with a scan。 所以&#xff0c;S6模型首先是选择机制&#xff1a;先前模型的一个关键限制对选择性复制和归纳等重要合成任务不够适用&#xff0c…

Bug Fix 20241122:缺少lib文件错误

今天有朋友提醒才突然发现 gitee 上传的代码存在两个很严重&#xff0c;同时也很低级的错误。 因为gitee的默认设置不允许二进制文件的提交&#xff0c; 所以PH47框架下的库文件&#xff08;各逻辑层的库文件&#xff09;&#xff0c;以及Stm32Cube驱动的库文件都没上传到Gi…

实现Excel文件和其他文件导出为压缩包,并导入

导出 后端&#xff1a; PostMapping("/exportExcelData")public void exportExcelData(HttpServletRequest request, HttpServletResponse response, RequestBody ResData resData) throws IOException {List<Long> menuIds resData.getMenuIds();List<Co…