实训第四天

作业

1. 总结反射型、存储型、DOM型XSS特点和区别

1. 反射型 XSS
特点

  1. 攻击者通过构造特定的 URL,将恶意脚本作为参数传递给服务器,然后服务器将该脚本“反射”回用户的浏览器。
  2. 通常在请求的响应中直接执行,例如通过查询字符串或表单提交。
  3. 不会在服务器端存储,攻击依赖于用户点击链接。

例子:用户访问恶意链接,链接中的 JavaScript 代码被执行。

2. 存储型 XSS
特点

  1. 恶意脚本被永久存储在服务器上(例如数据库、消息论坛等),并在用户访问时自动执行。
  2. 受害者在访问存有恶意内容的页面时,会加载并执行这些脚本。
  3. 更具危害性,因为它可以影响多个用户,只要有用户访问了包含恶意代码的页面。

例子:攻击者在评论区插入恶意 JavaScript,当其他用户查看该评论时,该脚本被执行。

3. DOM 型 XSS
特点

  1. 恶意脚本通过 DOM 操作进行注入,而不是通过服务器响应。
  2. 攻击者直接操控客户端的 JavaScript,使得页面的 DOM 结构被修改,进而执行恶意代码。
  3. 不依赖于服务器的响应,主要发生在客户端。

例子:攻击者在 Web 应用中利用 JavaScript 操作 DOM,将恶意脚本注入到页面中,比如通过不当处理 URL 参数。

反射型 XSS存储型 XSSDOM 型 XSS
存储方式不存储,即时反射长期存储于数据库等不依赖于服务器存储
攻击触发用户点击恶意链接用户访问包含恶意数据的页面用户交互或页面操作触发
影响范围单次攻击,仅对主动点击的用户有效可影响多个用户主要影响当前页面的用户
执行位置服务器响应服务器存储后执行客户端 JavaScript 操作

2. XSS 的fuzz字典或字典生成工具

fuzz字典:
jas502n/fuzz-wooyun-org: WooYun Fuzz 库 (github.com)

TuuuNya/fuzz_dict: 常用的一些fuzz及爆破字典,欢迎大神继续提供新的字典及分类。 (github.com)

TheKingOfDuck/fuzzDicts: Web Pentesting Fuzz 字典,一个就够了。 (github.com)

fuzzdb-project/fuzzdb: Dictionary of attack patterns and primitives for black-box application fault injection and resource discovery. (github.com)

cpkkcb/fuzzDicts: 渗透测试路径字典,爆破字典。内容来自互联网和实战积累。 (github.com)

字典生成工具
c0ny1/upload-fuzz-dic-builder: 上传漏洞fuzz字典生成脚本 (github.com)

3. 到XSS挑战靶场打靶(https://xss.tesla-space.com/

第一关

发现应该在地址栏中输入文本内容

输入代码,即可

第二关

输入代码,没有反应,查看此处的源代码,如图,发现可能需要闭合

需要使用 " 来闭合本来就有的引号,后面接着注入代码

第三关

尝试输入

发现单引号‘’会转换为双引号,且有<、/、>三个符号被实体编码了,即可构造事件来触发xss

因为输入的文本在input标签内,则输入inpu标签中的事件即可
此处用的是’ οnfοcus=alert(“hello”)

第四关

输入内容,发现此处没有‘和“的转换,且尾部还有”,应该要闭合

输入" οnfοcus="alert(‘hello’)即可

第五关

可以看见输入的on变成了o_n

Script标签也被过滤了

此时可以考虑JavaScript伪协议
输入 ">Click me 即可

第六关

href 属性被过滤

尝试使用大小写绕过检查,即可成功

4 总结浏览器解析机制,若不能理解,解释《漏洞利用之XSS注入》中15条中,至少5条执行成功或不成功的原因。(可选)

  1. 顺序:html解码→URL解析器可能会在JavaScript解析器之前或之后进⾏解析
  2. “javascript:”协议被html解析器解码后,它才能够被URL解析器正确识别,且引号内字符串一个也不能少

1

html解码

“javascript”协议已经被解码,它才能够被URL解析器正确识别

而此时,JavaScript没有被html解码,所以无法调用url解析器,所以无法执行

2

<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28%32%29">

html解码

url解码

可以执行,解码完成,由JS模块执⾏

4


使用<和>的实体字符,浏览器仅把它们视为文本字符串,而不会把它们解析为实际的 HTML 元素。
此处的 img 标签并没有完整地插入到 DOM 中,它只是作为一个字符串被包含在

内部

5

<textarea>&#60;script&#62;alert(5)&#60;/script&#62;</textarea>

无法执行弹窗

⾥会有HTML解码操作,但不会有⼦元素 故而"" 作为文本内容显示,但是不会被执行

13

<script>alert('13\u0027)</script>

在JS中只有字符串和标识符能⽤Unicode表示
所以不会执行

15

<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3a;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x33;&#x31;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x36;&#x25;&#x36;&#x33;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x32;&#x25;&#x35;&#x63;&#x25;&#x37;&#x35;&#x25;&#x33;&#x30;&#x25;&#x33;&#x30;&#x25;&#x33;&#x37;&#x25;&#x33;&#x34;&#x28;&#x31;&#x35;&#x29;"></a>

Html解码

url解码

JavaScript Unicode解码

可以被解码,但是解码后的alrt()不是正确的函数名称,故不可以被执行

知识点总结

前端

相关链接

ES6 入门教程 - ECMAScript 6入门 (ruanyifeng.com)

https://developer.mozilla.org/zh-CN/docs/Mozilla/Firefox

Go 语言之旅 (go-zh.org)

HTML URL 编码参考手册 (w3school.com.cn)

Cookie 和session

在 Web 开发和网络通信中,CookieSession 是两种重要的技术,用于用户身份验证、状态管理以及存储用户数据。尽管它们有相似之处,但其工作原理和使用场景有所不同

Cookie
Cookie 是一种在客户端(通常是浏览器)存储小块数据的机制。服务器可以通过 HTTP 响应头设置 Cookie,浏览器在后续请求中将这些 Cookie 发送回服务器。
Cookie 的基本信息

  • **名称:**每个 Cookie 都有一个名称。
  • **值:**与名称对应的值。
  • **域:**指示 Cookie 适用的域名。
  • **路径:**指定 Cookie 有效的 URL 路径。
  • **过期时间:**定义 Cookie 的生存期,超过这个时间 Cookie 将被删除。
  • 安全标记:
    • **HttpOnly:**防止 JavaScript 通过 document.cookie 访问 Cookie,提高安全性。
    • **Secure:**确保 Cookie 仅在 HTTPS 连接中传输。

Cookie 的类型

  1. 会话 Cookie:
    • 临时 Cookie,用户关闭浏览器后自动删除。
  2. 持久性 Cookie:
    • 保存于用户的硬盘中,直到达到过期时间或用户手动删除。
  3. 第一方 Cookie:
    • 由用户访问的网站创建的 Cookie。
  4. 第三方 Cookie:
    • 由用户访问的网站之外的其他域名创建的 Cookie,通常用于广告和追踪目的。

Session
Session 是一种在服务器端存储用户状态信息的机制。当用户与网站交互时,服务器创建一个会话对象并为其分配一个唯一的标识符(Session ID),该标识符通常以 Cookie 或 URL 参数的形式传递给客户端。

区别:

  • Cookie 用于存储少量数据在客户端,主要用于跟踪和持久化用户状态。
  • Session 用于在服务器端存储用户会话相关的数据,提高了安全性和数据管理能力。

浏览器的解析机制

三种解析器:

Html、url、JavaScript

  • HTML 解析器负责构建网页的结构(DOM);
  • URL 解析器负责处理用户输入的地址,确保能正确请求资源;
  • JavaScript 解析器负责运行网页中的动态脚本,实现交互功能。

Html解析器
词法解析

DOM树

字符实体
这里有三种情况可以容纳字符实体,“数据状态中的字符引用”,“RCDATA状态中的字符引用”和“属性值状态中的字符引用

在“”和“”的内容中不会创建标签,就不会有脚本能够执行<br/> 这意味着在和<title>标签中的字符引用会被HTML解析器解码。这里要再提醒一次,在解析这些字符引用的过程中不会进入“标签开始状态”。

url解析
不能对协议类型进行任何的编码操作,不然URL解析器会认为它无类型

Javascript解析
unicode不可以对特殊符号进行编码,例如:’ " \n

解析流

示例


在URL解析器的时候不能被URL编码

如果解析器正在解析一个函数调用语句,圆括号部分必须为“(”和“)”,而不能是\u0028和\u0029

解码编码工具

工具匠 - 一个小众的在线工具箱 (toolkk.com)
Html编码解码 - 工具匠 (toolkk.com)
URL编码解码 - 工具匠 (toolkk.com)
Unicode编码解码 - 工具匠 (toolkk.com)

XSS漏洞


XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的安全漏洞,攻击者通过在网站中注入恶意脚本,使得其他用户的浏览器执行这些脚本。
此类攻击通常利用了应用程序未能正确验证或清理输入的数据。

XSS 的类型

  1. 存储型 XSS
    • 恶意脚本被永久存储在服务器上,例如数据库、留言板等。当用户访问这些内容时,脚本会被执行。
  2. 反射型 XSS
    • 恶意脚本并不存储在服务器上,而是立即反射回用户的浏览器。通常通过 URL 参数或表单数据传递。
  3. DOM 型 XSS
    • 这种类型的 XSS 是通过修改客户端的文档对象模型(DOM)来实现的。攻击的发生依赖于 JavaScript 的执行,而不是服务器的响应。

!!! DOM、 DOM树

防范 XSS 攻击的方法

  1. 输入验证和输出编码:对用户输入进行严格的验证,并对输出进行 HTML 实体编码。
  2. 使用 CSP(内容安全策略):配置 CSP,可以限制可执行的 JavaScript 来源,减少风险。
  3. 避免使用 eval() 等函数:避免在 JavaScript 中使用 eval() 和类似方法,这可能导致代码执行漏洞。
  4. 定期审计代码和使用安全库:定期检查和审计你的代码,使用成熟的安全库来处理用户输入。
  5. HTTPOnly 和 Secure 标志:设置 Cookie 的 HTTPOnly 和 Secure 标志,以保护 Cookie 不被 JavaScript 访问。

参考链接

XSS之绕过简单WAF总结_xss绕过waf-CSDN博客
浅析XSS常见绕过姿势及靶场实战 - FreeBuf网络安全行业门户
XSS过滤绕过总结 - 随风kali - 博客园 (cnblogs.com)
网络安全自学篇(十八)| XSS跨站脚本攻击原理及代码攻防演示(一)-腾讯云开发者社区-腾讯云 (tencent.com)

手段

  1. 找到可控点(url地址栏、文本框……)

| 标签的文本内容为可控点时 | 需要文本起始是<>,否则就会认为这是一个纯文本内容
如第一关 |
| — | — |
| 标签的属性值为可控点时 | 需要使用 " 或’来闭合本来就有的引号 |

  1. 初步注入测试
    | 测试——script标签 | |
    | — | — |
    | | ‘‘换成// ,即(/hello/) |
    | |

| 闭合

XSS测试之闭合的正确使用方式_xss怎么看闭合不闭合-CSDN博客
双引号、单引号被过滤的情况
用反引号绕过

在javascript的函数中,可以用反引号代替单双引号。 | <img src=“x” οnerrοr=alert(xss);> |

|

直接把script替换为空的过滤方式
双写绕过alert(/quan9i/)
大小写绕过
这种方法还适用于,其他标签和属性被过滤的情况,可以尝试

|

其他标签

使用

οnfοcus=alert(“hello”) |
| | <input οnblur=alert(“xss”) autofocus> |
| | |
| img标签 | |
| svg标签 | |
| | |
| body标签 | |
| | |
| iframe标签 | <iframe οnlοad=alert(“xss”);>

//onload:当页面加载完毕时执行代码,在这里也就是弹出xss |
| | |
|

如果<和>被过滤,我们无法引入新标签,此时可以引入标签的事件
即,对应标签后面的属性

事件
** **属性名,像事件属性,比如onclick,onerror这样的,它们后面的属性值的引号可加可不加 | |

| <和>都被过滤,无法插入标签

存在内容过滤
例如这种 s t r 2 = s t r r e p l a c e ( " a l e r t ( 1 ) " , " a l e r t ( 1 ) " , str2=str_replace("alert(1)","ale_rt(1)", str2=strreplace("alert(1)","alert(1)",str);

事件和常用标签都被过滤
可使用 javascript:伪协议进行 XSS(跨站脚本攻击)

支持Javascript伪协议的属性有:img,href,lowsrc,bgsound,background,action,dynsrc | |
| | Click me |
| | <a href=“” οnclick=alert(‘xss’)>a |
| |

引号可以去掉 |
| 可以用HTML编码来绕过检测 | |
| | |
| | |

编码绕过CTF 编码
HTML 字符实体转换
  1. 插入代码

点击提交,显示了信息,则说明存在xss注入
注入后重新刷新发现直接回显注入的东西,说明是存储型xss

">
  1. 将刚刚成功注入代码并能触发xss的网址通过电子邮件等方式发送给对方的手中,如果结合xss平台,对方点击了链接,就能得到对方的cookie等信息

(安装插件hackbar V2)


SQL:提供三种数据库的sql查询语句,以及一些方便联合查询的语句
XSS:提供xss攻击语句
string.fromcharcode():将根据UNICODE 值来输出xss语句
html charactor : 将XSS语句转化为HTML字符实体(以&开头)
alert(xss) statement : 构建一条xss测试语句,弹出一个框内容为xss,相当于alert(‘xss’);
Encryption:对所选字符进行加密,提供了MD5,SHA-1,SHA-256,ROT13等加密方式
Encoding:对所选字符进行编码解码,提供了Base64 Encode,Base64 Decode,URLencode,URLdecode,
HEX encoding, HEX decoding等方式
Other:
addslashes:在每个双引号前加反斜杠
stripslashes:除去所选字符中的反斜杠
strip space:除去所选字符中的空格
reverse:将所选字符倒序排列
usefull strings:提供了一些特殊的数值如圆周率PI,斐波那契数列等,其中buffer overflow 可以输入一定长度的字符造成缓存溢出攻击

字典

(28)【xss工具绕过】xss之burpsuite、前端、字典……_burp fuzz xss-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值