万字解析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图片马的制作 ↩︎

相关推荐
网安INF5 小时前
网络攻防技术:防火墙技术
网络·安全·web安全·网络安全·防火墙
-Initiation6 小时前
数据库的安全与保护
数据库·安全
北青网快讯11 小时前
CDN5上线AI智能防御系统,为香港CDN加速服务注入新一代安全与智能动力
人工智能·安全
yuezhilangniao15 小时前
「动态安全」:在失控中建立秩序 —— 兼论零信任的实践哲学
安全
m0_7381207220 小时前
网络安全编程——TCP客户端以及服务端Python实现
python·tcp/ip·安全·web安全·网络安全
darkfive21 小时前
构建大模型安全自动化测试框架:从手工POC到AI对抗AI的递归Fuzz实践
人工智能·安全·ai·自动化
TG_yunshuguoji1 天前
亚马逊云渠道商:本地SSD缓存如何保障数据安全?
运维·服务器·安全·云计算·aws
电话交换机IPPBX-3CX1 天前
电话交换机软件3CX安全访问实践:屏蔽IP访问,仅允许域名访问
安全·域名·ippbx·1024程序员节·电话交换机
LucianaiB1 天前
掌握 Rust:从内存安全到高性能服务的完整技术图谱
开发语言·安全·rust