xss漏洞
xss属于被动式的攻击,攻击者先构造一个钓鱼网站或者是跨站网站,一般是利用Javascript方式来进行的。当用户访问该网站时,如果用户已经在该网站登录后,那么攻击者就会获取到用户的cookie,从而使得攻击者可以伪造成该用户来访问网站
攻击方式
以xss-labs为例
第一关
当我们看到该界面时发现并没有输入框那我们就可以考虑在地址栏进行直接传参
然后就右键查看页面页面源代码
发现name参数直接传到欢迎用户后面。那我们直接插入js代码
?name=<script>alert()</script>
这样就直接出现弹窗
第二关:
我们先随便输入123看网页源代码
这一关我们发现他进行了双引号处理那我们进行双引号闭合处理
输入 "<script>alert()</script>"
结果发现还是不可以这是为什么呢,我们看网页源代码
这其实是input是一个标签 script也是一个标签。要想运行script标签首先要将input标签进行闭合
所以正确方法应该是 "><script>alert()</script><"
第三关:
发现是单引号处理,那我们只需进行单引号闭合就可以了
输入'><script>alert()</script><' 发现并没有过关那我们查看网页源代码
将我们输入的js代码转变成 '> <script>alert()</script> <'
所以我们判断他进行了<>这两个符号替换
查看网站代码
发现是利用htmlspecialchars函数将符号实体化了,但该函数只针对于<>的实体化,我们还可以利用其他不含<>的事件进行过关。比如onfocus事件
格式
<input type="text" οnfοcus="myFunction()">
然后我们可以配合javascript伪协议来执行JavaScript代码
' οnfοcus=javascript:alert() '这里要注意空格没有则会失败
当我们再次点击输入框后会出现弹窗
第五关
查看源代码发现是双引号闭合那就试试" οnfοcus=javascript:alert() " 发现并没有成功
查看网页代码
发现将on替换为o_n那试试大小写绕过呢 " ONfocus=javascript:alert() " 输入后查看网页代码并没有任何区别那我们看看网页源代码
发现他对输入进行了处理 strtolower函数会将输入全部转化为小写并对<script>和on进行了替换那我们尝试一种新的事件 href
格式:
<a href="http://www.xxx.com">xxx</a>
那我们构造js代码
"><a href=javascript:alert()>xxx</a><"
当我们再次点击xxx后就会出现弹窗
第七关
发现是双引号闭合后先试试" οnfοcus=javascript:alert() " 没有成功看网页代码
变成了 focus =java:alert()
删除了一部分,那么我们可以试试双拼写绕过
" oonnfocus=javascriscriptpt:alert() "当他删除on,script后就变为" οnfοcus=javascript:alert() "
尝试后确实成功
第八关
上来先随便输入看看网页代码
他插入到了a标签,所以试试 javascript:alert()
发现并不可以大小写也不可以 看看网页源代码呢
发现他对大部分标签进行了替换。这时候我们可以利用href的隐藏属性,它可以自动对unicode解码,所以我们可以对插入的js代码进行Unicode编码
将 javascript:alert()编码为javascript:alert()
成功弹窗
第九关
看网页代码发现跟第八关差不多,试试第八关的方法。没反应看看源代码
其他和第八关一样只不过多了一段
这段是判断你输入的链接中是否含有http://没有则无法添加
我们就要在js代码中添加http://并且让他不能影响js代码正常运行,可以考虑将他注释掉
构造
javascript:alert()/* http:// */
成功
第十关
发现并没有输入框
使关键字=123试试
123被实体化了,但我们看到有三行input标签 ,每个里面都有参数,所以判断有隐藏的传参,
看源代码发现确实如此
所以直接对t_sort传参就行并且要显示输入框 使用type=test
?t_sort=" οnfοcus=javascript:alert() type="test
第十一关
查看网页代码跟上一关差不多,对每个参数都试试发现不行
查看网页源代码
t_ref的<input>标签是http头的referer参数类似的还有
t_ua 对应 User-Agent
t_cook 对应 cookie
打开burpsuite抓包然后对应修改或者添加就可以了
第十五关
查看代码
发现个 ng-include 之前没出现
搜索发现
那我们可以让其包含第一关试试
?src='./level1.php'
其中./表示当前目录../表示上一级目录依次类推
出现了第一关的图片
所以我们可以构造img标签,
?src='./level.php?name=<img src=1 οnmοuseοver=alert()>'
当鼠标移动到图片时触发弹窗