跨站脚本攻击(xss)
1.简介
跨站脚本攻击,简称css,但为了与层叠样式表区分开,在安全领域叫xss。
XSS 攻击,通常指黑客通过“HTML注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。在一开始,这种攻击的演示案例是跨域的,所以叫做“跨站脚本”。但是发展到今天,由于 JavaScript的强大功能以及网站前端应用的复杂化,是否跨域已经不再重要。但是由于历史原因,XSS这个名字却一直保留下来。
XSS 长期以来被列为客户端 Web 安全中的头号大敌。因为 XSS 破坏力强大,且产生的场景复杂,难以一次性解决。现在业内达成的共识是:针对各种不同场景产生的XSS,需要区分情景对待。即便如此,复杂的应用环境仍然是XSS滋生的温床。
我的理解就是将用户向param提交的数据改为一段可执行的HTML代码,如
<script>alert(/xss/)</script>
提交以后就发现alert命令在当前页面执行
2.分类
类型 | 概述 |
---|---|
反射型 XSS | 反射型 XSS只是简单地把用户输入的数据“反射”给浏览器,反射型 XSS只是简单地把用户输入的数据“反射”给浏览器。 |
存储型 XSS | 存储型 XSS 会把用户输入的数据“存储”在服务器端。这种 XSS 具有很强的稳定性。 |
DOM Based XSS | DOM Based XSS从效果上来说也是反射型 XSS,简单来说DOM Based XSS就是通过修改页面的 DOM 节点形成的 XSS。 |
反射型XSS与存储型XSS的区别在于“数据是否保存在服务器端”。
3.实操(以pikachu为例)
3.1:反射型XSS
3.1.1:反射型xss(get)
打开界面,在输入框中输入<script>alert('xni')</script>,发现输入框中命令显示不完整。
猜测是对输入字符数目进行了限制,查看源代码发现猜测正确,直接在查看器中更改。
更改后就可以输入完整字符,提交代码得到xss命令执行
3.1.2:反射型xss(post)
打开后先看右上角提示,登录进去
登进去看到了一个搜索框,提交代码。
出现xss弹窗,执行成功
-GET和POST方式最主要的区别:
GET以URL方式提交
POST通过表单数据进行提交
3.2:存储型XSS
在留言板上输入bu试试,发现留言被后台存储
输入payload,命令直接被存储
3.3:DOM型xss
DOM型xss
在做题之前我们先弄清楚DOM是什么东西。JavaScript HTML DOM (w3school.com.cn)https://www.w3school.com.cn/js/js_htmldom.asp)
简单来说, DOM就是通过JavaScript对HTML进行更改控制的接口。
我们先在输入框中输入一些字符,前端显示what do you see?
查看界面源代码,Ctrl F查找what do you see?的位置what do you see?
红框选中的就是我们需要输入的地方(输入一串合法字符替代"+str+",并且整个语句闭合)
输入 ' οnclick="alert(xss)”>(构成语句闭合,并且弹出xss弹窗)
DMD型xss-x
3.4:xss盲打
盲打是指前端无法看到输入的xss内容,只有在后台才能看到。
直接输入代码' οnclick="alert('xss')">,发现前段只有一句:谢谢参与,阁下的看法我们已经收到!
我们点击右上角的提示,发现了后台的进入地址,进去后在提示中找到了昵称和密码,登录进去看看。
登陆后弹出窗口,后台已经被攻击,确定以后就可以看见后台数据
3.5:xss过滤
后台过滤了一些特殊字符或字母时
特殊字符:可以编码为浏览器可以识别的字符(浏览器能够识别并执行)
字母:可以通过大小写的转换进行绕过
<SCRIPt>alert(xss)</SCRIPT>
这道题我们先尝试一下有哪些字符被过滤了
<scrpit>
说明scrpit被过滤了,我们换成大写字母试试(<SCRIPt>alert(xss)</SCRIPT>)
显示只有小写字母被过滤了,大写字母绕过成功。
3.6:xss之htmlspecialchars
htmlspecialchars()函数用于将一些预定义的字符转换为 HTML 实体。能够防止这些特殊字符在 HTML 中被浏览器错误地解释,避免了跨站脚本攻击(XSS)等安全问题。
&(和号)成为&
"(双引号)成为"
'(单引号)成为'
<(小于)成为<
‘>’(大于)成为>
ENT_ COMPAT -默认。仅编码双引号。
ENT QUOTES -编码双引号和单引号。
ENT NOQUOTES -不编码任何引号。
我们先输入一串特殊字符并查看源码
htmlspecialchars函数对单引号不进行处理
构造闭合
' onclick='alert(111)'
3.7:xss之href输出
<a>
标签的href
属性本身并不直接执行JavaScript代码,不过在讨论的是<a>
标签的href
属性与XSS的关系时,更常见的是通过href
属性中的javascript:
伪协议来执行JavaScript代码。
我们打开先看一下提示
提示说明是a标签中的herf,我们可以使用
javascript:alert(1)
3.8:xss之js输出
先看提示,在输入框中输入tmac
尝试构造闭合
'</script><script>alert('xss')</script>