upload-labs靶场打卡

一、靶场介绍

  PHP语言编写,持续收集渗透测试和CTF中针对文件上传漏洞的靶场,总共21关,每一关都包含着不同的上传绕过方式。

(绕过点脑图总结:)
upload-labs靶场打卡

二、靶场搭建

2.1 靶机环境

  • Win2008R2 + PHPStudy2018(php5.2.17) + upload-labs源码
    upload-labs靶场打卡
    upload-labs靶场打卡

2.2 搭建过程

  • GitHub项目地址:https://github.com/c0ny1/upload-labs
    》》下载
    upload-labs靶场打卡
    》》将文件解压到PHPStudy站点目录下,并设置建议的php版本5.2.x
    upload-labs靶场打卡
    》》浏览器访问,如下所示安装成功
    upload-labs靶场打卡

三、关卡挑战

Pass-01(前端JS绕过/客户端校验绕过)

限制演示

》》判断站点开发语言(PHP,也可以参考开发语言的其它判断方法
upload-labs靶场打卡
(我们先通过操作和抓取数据包方式走一边正常的上传流程)
》》正常上传一图片文件上传成功
upload-labs靶场打卡
》》上传成功,服务器的upload目录下会存放上传的对应文件(操作过程中用户看不到此目录,这里用于理解)
upload-labs靶场打卡
》》前端会和后端进行交互,抓取的上传数据包流量
upload-labs靶场打卡
》》我们上传一个小马文件,提示该文件不允许上传,需要特定后缀类型文件
upload-labs靶场打卡

一句话php小马文件内容
upload-labs靶场打卡


源码分析
upload-labs靶场打卡
》》通过上边源码和网页源代码可看到JS脚本,判断使用文件类型在前端进行了限制
upload-labs靶场打卡
》》因此只要绕过了前端的JS校验就可以直接提给后端


绕过方法

  • 方法一:数据包文件后缀绕过
    》》查看服务器允许上传类型
    upload-labs靶场打卡
    》》将一句话木马后缀改为服务器允许上传的类型(以上三种皆可)
    upload-labs靶场打卡
    》》点击上传,先截取到请求数据包
    upload-labs靶场打卡
    》》将原来已经绕过前端的“common_php.jpg”文件改为“common_php.php”文件,向服务器发送篡改后的数据包,发送成功
    upload-labs靶场打卡

现在小马文件已经上传至服务器,现在我们拿到小马的执行路径就完好了(后端允许解析执行的情况下)

》》通过浏览器检查页面元素即可拿到上传文件的相对路径(->网页右击 ->检查)
upload-labs靶场打卡
》》也可以通过返回数据包中查看上传的地址,这两个一样的
upload-labs靶场打卡
》》拼接得到上传文件的主目录
upload-labs靶场打卡

Q&A
Q1:只要上传完文件都会在返回包中拿到文件的相对/绝对路径吗?
A1:非也,需要看开发人员安全意识是否足够,后端代码中是否回显出路径
upload-labs靶场打卡


Q2:怎么通过返回的相对路径拼接成文件的绝对路径?
A2:根据经验!
》》如这里返回的绝对路径为:
upload-labs靶场打卡
》》暂且将返回的路径和当前地址的路径copy到编辑器中
upload-labs靶场打卡》》对网页目录进行分析

》》通过点击不同的网页目录,我们发现绿色部分是不变/相同的,当我们点击目录时只有后边的内容在变,因此可判断upload-labs是站点www目录下的主目录文件
upload-labs靶场打卡
(网站站点目录和URL地址图)
upload-labs靶场打卡
(上传文件地址和. ./上级目录图)upload-labs靶场打卡

由上可拼接出上传文件的绝对路径
upload-labs靶场打卡


Q3:如何判断上传的脚本被成功解析?
A3:脚本被解析代码会运行!
》》我们在站点目录下新建一个普通文本的文件
upload-labs靶场打卡
》》浏览器访问php文件会被解析执行因此什么都不显示
upload-labs靶场打卡


判断技巧
  查看网页源代码是否有限制的JS代码,点击上传后直接弹框提示,但是没有发送数据包,即用了客户端认证方法
upload-labs靶场打卡

Pass-02

Pass-03

Pass-04

Pass-05

Pass-06

Pass-07

Pass-08

Pass-09

Pass-10

Pass-11

Pass-12

Pass-13

Pass-14

Pass-15

Pass-16

Pass-17

Pass-18

Pass-19

Pass-20

Pass-21