概述
Cross-Site Scripting 简称为“CSS”,为避免与前端叠成样式表的缩写"CSS"冲突,故又称XSS。一般XSS可以分为如下几种常见类型:
1.反射性XSS;
2.存储型XSS;
3.DOM型XSS;
XSS漏洞一直被评估为web漏洞中危害较大的漏洞,在OWASP TOP10的排名中一直属于前三的江湖地位。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。
形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
你可以通过“Cross-Site Scripting”对应的测试栏目,来进一步的了解该漏洞。
反射型xss(get)
不管三七二十一我看到这题先直接用经典的弹窗搞一下子
<script>alert(/xss/)</script>
但是我们在输入的时候发现输不全
闭合的<script>没有输入进去导致这个没法执行,那么这个东西肯定有长度限制,那我们就看看url有没有限制,对url进行拼接
这时候我们发现成功了
反射性xss(post)
可以自己爆破一下或者直接输入admin和123456进入主界面
进入主界面还是输入
<script>alert(/xss/)</script>
点击按钮直接就成功了,反射型的是一次性的所见即所得,一般出现在查询类页面等
存储型xss
还是使用
<script>alert(/xss/)</script>
点击一下按钮就自动将<script>alert(/xss/)</script>存储到数据库了,大家可以试试你刷新一次就会多一次弹窗,因为存储型xss是保存在数据库里的,刷新之后,留言列表从数据库提取出xss数据所以会弹框,存的好会一直弹出来
DOM型xss
与普通XSS不同,DOM XSS是在浏览器的解析中改变页面DOM树,且恶意代码并不在返回页面源码中回显。
我们还是使用<script>alert(/xss/)</script>浅试一下
<script>alert(/xss/)</script>
发现没啥用
我们打开网页源代码看一看,好家伙不讲武德,被修改成功一个超链接
那我们得想办法给它闭合喽,<a href='"+str+"'>
,可以构造为:
'onclick="alert(/xss/)">
点击按钮,下面会出现一个网址,再点击网址就可以看见xss成功了
DOM型xss-x
老套路依旧是浅试一下
<script>alert(/xss/)</script>
发现没有出现我们想要的弹窗
看看源码
发现和上一道题一样,输入
'onclick="alert(/xss/)">
点击按钮,成功xss
xss盲打
依旧是浅试一下,这两个框都输入然后提交
<script>alert(/xss/)</script>
我们修改一下url进入后台看一看
http://127.0.0.1/pikachu-master/vul/xss/xssblind/admin_login.php#
账号密码还是admin和1213456,进入后台就发现注入成功了
xss之过滤
不用浅试了直接上语句
<ScriPT>alert(/xss/)</ScriPT>
我原本输入的是大写但是看看源码改成了小写
XSS之htmlspecialchars
老规矩浅试一下
<script>alert(/xss/)</script>
发现出现一个链接但是点击之后访问不了
看一下源码,我们发现,这又是个超链接,但是题目上又是htmlspecialchars,证明需要转义
'onclick='alert(/xss/)'
xss之href输出
这里使用伪协议
javascript:alert(/xss/)
成功
xss之js输出
'</script><script>alert(/xss/)</script>
'</script>是为了闭合前面,使后面构成一个完整的弹窗
就是为了构成这个方法
成功