万字解析upload-labs靶场(基于cyberstrikelab网络安全仿真平台)

前言

upload-labs 收集了CTF比赛中遇到的各种上传漏洞的靶场,每一关都包含着不同上传方式。目前我使用的是总计20关的靶场,为了更突出比赛实战化,第一关到第十关我是在cyberstrikelab网络安全仿真平台练习,

第十一关以后我是在本地搭建phpstudy学习。

概念

(1)什么是文件上传漏洞?

上传文件时,目标服务器对上传的文件内容及后缀没做严格的过滤,对文件存储的路径没做限制。

(2)条件:

  • 木马文件(php、jsp、asp、exe)
  • 可以绕过目标服务器检测,并成功上传
  • 可以获取到上传路径,上传路径具备可执行权限

一句话木马

我常用的,写入木马文件的一句话木马命令:

php 复制代码
<?php @eval($_POST['1']); ?>

靶场

(1)在线靶场

cyberstrikelab官网,仿真靶场中可以搜到。

(2)本地搭建

下载集成环境绿色免安装的版本,解压可使用。

此处为下载地址。

下载好后,直接放在phpstudy的WWW目录中。

读完使用说明后,运行集成环境,在本地浏览器访问地址:127.0.0.1/upload-labs 。

问题

这里可能会遇到一个问题,burpsuite会抓不到包。这时我们只需把127.0.0.1改为本机IPv4的地址。查看本机IPv的方法:打开cmd,输入ipconfig

去访问,这样就可以正常抓包了

每道题的解题方法不止一种,大家可以看完文章后,都运用一遍。

正文

Pass-01

第一关通过右键查看源代码或者提示,发现代码为前端验证。后续的方法,也是先看源代码,再做题,

源代码部分不再赘述。

方法: 关闭JS验证

谷歌浏览器按下F12,选择停用JS

禁用JS后, 就可以直接传php一句话木马了。

可以看到文件上传成功了。

Pass-02

方法: 修改文件后缀,content-type绕过。

使用burpsuite工具抓包,上传一个含一句话木马的图片,然后直接修改content-type字段,将文件后缀名改为.php,然后点击"发送"即可完成上传。

传完之后,可以用蚁剑验证一下。

Pass-03

方法: 修改文件后缀

在某些特定环境中某些特殊后缀仍会被当作php文件解析 php、php2、php3、php4、php5、php6、php7、pht、phtm、phtml。我们这里用.php5试一下,可以发现直接上传成功 。

想要被当成php执行的话,需要有个前提条件:你下载的靶场环境里,在Apache目录的httpd.conf文件中得修改成如下配置(靶场环境未配置好,此处仅做上传测试)。

Pass-04

方法 :**修改htaccess文件。但要注意,.htaccess文件不能起名字,它就是.htaccess文件。**如果你将它改为3.htaccess或者其他会无法解析。

概念: (1)**.htaccess 是配置文件通常位于网站的根目录或特定的文件中,并影响该目录及子目录。每个目录都可以有这个文件。**生效方式:修改后立刻生效。

(2)**httpd.conf 是全局的文件,整个服务器的 管理员才可以修改。**生效方式:要重启。

(3).user.ini 作用于覆盖或追加全局配置文件(如 php.ini)中的php配置选项,通常位于web应用程序根目录下。 生效方式:修改后立刻生效。适用于php版本是7.x的。

思路:

(1)创建一个.htaccess文件,里面输入内容

php 复制代码
<FilesMatch "3.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

这段代码的意思,就是将jpg文件当作php文件执行。

修改后,上传.htaccess文件。

(2)把一句话木马改成3.jpg ,然后上传上去。

上传成功后,对这个图片右键,在新建标签页打开图片。

(3)用蚁剑连接测试

Pass-05

方法: php文件小写改大写

这一关的思路是它没有循环验证,收尾去空、删除末尾的点,去除字符串::$DATA,转换为小写这些东西只是验证了一次。

(1)抓包,将php后缀改为phP

蚁剑连接测试

Pass-06

方法: php后缀加空格

直接看源代码,发现没有对上传的文件收尾去空,所以可以在php文件后缀加空格。

上传php文件,抓包在后面加空格。

Pass-07

方法: php后缀加点

与前面几关都类似,看源码没有去除. 所以可以用加.来绕过

上传1.php抓包,将1.php后面加.,放行

蚁剑连接测试

Pass-08

方法: 数据流绕过,php后缀加::$DATA

**概念:**在windows操作系统中,当你看到文件名后缀跟着 ::$DATA时 它表示一个附加数据流。

数据流是一种用于在文件内部存储额外数据的机制,这些额外的数据流可以通过在文件名后添加::$DATA来访问。如 1.txt是一个文件,而1.txt::$DATA 是这个文件的一个附加数据流。这样的数据流可以用于存储文件的元数据,备份信息,标签等。

写入方法[1](#1):

echo 内容 >>文件名:数据流名

type 文件名 >>文件名:数据流名

查看方法:

notepad 文件名:数据流名

思路

Pass-09

方法: php后缀加. .( 这里要注意的就是点和点之间是有空格的)

验证过程:首先系统发现最后有一个点,这时会把它去掉,又发现有一个空格,也会把它去掉,这时还 有一个点,也就是.php. 由于系统只验证一次,所以不会再去掉剩下的点,这时就可以上传成功。

Pass-10

方法: 双写后缀绕过,php后缀修改为.pphphp

验证原理和上一题一样。

Pass-11

方法: 修改get路径,加入%00截断

**概念:**字符串读取的时候 有 0x00会被当做截断标志。如你好0x00.php显示的是你好%000x00一样,区别使用的地方不一样, %00在url中使用 0x00在编程语言中使用。因为,php的一些函数的底层是C语言,而move_uploaded_file()就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00

做到这里,就需要搭建本地环境了,线上平台总是提示上传错误。

我们传一个3.jpg的图片,然后在保存路径修改为xxx.php%00。这里我修改成44.php

最后你可以在本地盘符里看到这个木马文件。

Pass-12

方法: 修改post路径,加入00截断。

第十二关和第十一关是差不多的,只不过是接受值变成了post,这两者的差别呢就是get会自行解码,post不会自行解码,我们需要对%00进行编码,选中%00,右键进行url编码,如下图进行URL-decode

可以在本地目录上看到木马文件上传上去了。

Pass-12

方法: 制作图片马,利用文件包含漏洞。

(1)通过命令

bash 复制代码
copy a.jpg /b + 1.php /a shell.jpg

将一个正常的图片和一个带有php木马的图片合并起来,制作成图片马。

(2)上传制作好的图片马文件

(3)查看文件包含漏洞的源码

(4)对上传好的图片右键访问

记住这个图片单位存储位置

(5)在文件包含漏洞的URL中,通过file命令插入刚才记下的位置?file=upload/2020251025010220.png

(6)蚁剑连接测试

Pass-13

方法: 制作图片马,利用文件包含漏洞。

由于和第12关上传方法一样,这里不做赘述。

(1)制作图片马

(2)查看保存路径

(3)访问

(4)蚁剑连接测试

Pass-14

由于和第12关上传方法一样,这里不做过多赘述。

Pass-15

由于和第12关上传方法一样,这里不做过多赘述。

Pass-16

方法: 制作gif图片马[2](#制作gif图片马2,绕过二次渲染验证。),绕过二次渲染验证。

关于绕过对gif图片的二次渲染,我们只需要找到渲染前后没有变化的位置,然后将php代码写进gif里,就可以成功上传带有php代码的图片了。

如下图,经过比对,蓝色是没有变化的。

我们将代码写入该位置。

上传后在下载到本地使用16进制编辑器打开。

可以看到php代码没有被去除,成功上传图片马。

Pass-17

方法: 竞争上传

我们查看源代码可以明白,代码的意思是先将图片上传上去,才开始进行判断后缀名、二次渲染。

如果我们在上传上去的一瞬间访问这个文件,那他就不能对这个文件删除、二次渲染。这就相当于我们打开了一个文件,然后再去删除这个文件,就会提示这个文件在另一程序中打开无法删除。

(1)新建一个02.php,并写下下列代码

php 复制代码
<?php fputs(fopen('webshell.php','w'),'<?php @eval($_POST["cmd"])?>');?>

(2)上传02.php,并抓包发送到intruder模块。

发送完之后,点击清理payload

在payload设置中,选择Null payloads ,并设置成无限重复。

然后点击开始攻击。此时同时打开另一个浏览器,访问02.php

通过竞争关系,此时在上传目录中就会出现webshell.php,从而帮助蚁剑连接。

Pass-18

操作和第16关是一样的,不再赘述。

这关是检查后缀名,然后上传,然后在进行二次渲染。这时我们只能上传gif图片马,而且得配合解析漏洞进行通关。

Pass-19

方法: move_uploaded_file() 函数特性,修改为.php /.
move_uploaded_file()函数会忽略掉文件末尾的 /.

所以我们把他修改为.php/.

Pass-20

方法: 利用数组绕过验证

如下图,修改字段。

由于这关会检测文件后缀名,所以利用数字绕过的形式,拼接起来上传,即upload-20.php/.png

最后传上去的就是upload-20.php

参考文献


  1. $DATA绕过(仅windows) ↩︎

  2. GIF图片马的制作 ↩︎

相关推荐
用户962377954482 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机6 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机6 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954487 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star7 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544811 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
一次旅行5 天前
网络安全总结
安全·web安全
red1giant_star5 天前
手把手教你用Vulhub复现ecshop collection_list-sqli漏洞(附完整POC)
安全
ZeroNews内网穿透5 天前
谷歌封杀OpenClaw背后:本地部署或是出路
运维·服务器·数据库·安全