- CTF实战:技术、解题与进阶
- ChaMd5安全团队
- 368字
- 2025-02-18 01:24:45
1.2.4 XSS CTF例题
我们以CISCN2019-华东北赛区-Web2题目为例,本题的考点为XSS和SQL注入,我们重点来看XSS的部分,题目如图1-78所示。

图1-78 题目首页
打开题目环境是一个博客,我们能够注册普通账户并投稿,投稿需要通过管理员的审核。一个很经典的XSS漏洞场景是,我们在文章中构造XSS Payload,获取管理员的cookie,然后通过cookie获取管理员权限。我们随意提交数据并测试,结果如图1-79所示。

图1-79 随意提交数据
在文章页面还设置了CSP,如图1-80所示。

图1-80 CSP策略
CSP策略代码如下。

策略允许执行内联JavaScript代码,例如内联script元素,但不允许加载外部资源,可以使用eval()函数。要获得cookie,就必须绕过CSP不允许加载外部资源这个限制。在CSP策略允许unsafe-inline的情况下,我们可以通过跳转来绕过限制,代码如下。

这样管理员访问时就会把cookie回带到我们用于接收数据的服务器http://dataserver上。
这题还将(、)、'等符号替换为中文符号,我们可以通过svg标签加HTML Markup去编码绕过,最终Payload如下。
