先了解一下xss
简单来说XSS,也叫跨站漏洞,攻击者对网站代码进行攻击检测,对前端输入的地方注入了XSS攻击代码,并写入到网站中,使用户访问该网站的时候,自动加载恶意的JS代码并执行,通过XSS跨站漏洞可以获取网站用户的cookies以及seeion值,来窃取用户的账号密码等等的攻击行为
寻找xss漏洞
XSS漏洞经常出现在需要用户输入的地方,在寻找XSS漏洞时,先随便输入东西观察页面的响应方式,然后查看页面源码,然后构造合适的alert()弹窗来发现,同样也可以使用prompt(),confirm()。
xss分类
存储型XSS:存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie
反射型XSS:非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面
DOM型XSS:不经过后端,DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。
详细内容见师傅的博客
在phpstudy中搭建xss-labs
level-1
观察url地址会发现?name=test
这里是向服务器提交了一个值为test
的name
参数
并且页面不仅回显name参数的值,而且显示了name参数的值的长度。
查看页面源代码
发现
name参数的值在h2标签中,直接在name参数中使用欢迎用户test
弹框完成的不错
因为是通过url传参,属于DOM型xss也属于反射型xss
在弹框页面无论点击确定或取消都会跳转到level-2
level-2
url中?keyword=test
是向服务器提交了一个值为test
的keyword
参数
页面中央还有一个输入框和搜索按键
直接在输入框输入
这里参考了师傅们的博客
没有找到和<script>alert('xss')</script>相关的结果.
就会发现h2标签中的恶意代码被编码了,<和>被编码成html字符实体<
和>
value参数值中的恶意代码没有被编码,是直接返回的value=""
因为恶意代码的<和>被编码,所以要构造闭合
?keyword=">
level-3
直接在输入框输入进行尝试,点击搜索后只显示了
并不能成功
参考师傅们的博客
这里要通过input标签的一些特殊事件来执行js代码,如onfocus事件
,onmouseover事件
可以构造'onfocus=javascript:alert('xss') >
或者
'onclick=javascript:alert('xss') >
onfocus事件
onmouseover事件
不用
有区别查看页面源码
可以发现<和>均被编码,而且value里的<和>被直接删除过滤了同Level-3进行尝试input标签的一些特殊事件,如
onfocus事件
,onmouseover事件
来执行js代码使用
'onfocus=javascript:alert('xss')
尝试,发现并没有弹窗应该是构造闭合的方式不对
value="'onfocus=javascript:alert('xss')"
如果与level-3弹窗的页面源码比较
value=''onfocus=javascript:alert('xss') >'
(这里的>
是>
被编码后的显示)会发现
onfocus
前的闭合字符是有规律的,而且alert('xss')
后面是少了东西的接下来就是尝试的时候,将
onfocus
前的'
换成"
,alert('xss')
后面也使用"
,也就是keyword="onfocus=javascript:alert('xss') "
点击输入框后弹窗成功
页面源码
在尝试的过程中还发现alert('xss')
之后的符号并没有限制,只要onfocus
前的闭合字符输入正确,可以在alert('xss')
之后输入任意字符level-5
来到第五关
使用进行测试
输入框的显示为
alert('xss') 说实话前面一直遇到的是对符号进行转义的,遇到
还是有点不知所措的
但是转念一想,前面两关还都没用到那这关先可以用前面的尝试一下
再看看师傅们的博客,师傅们的思路是这样的
因为无法通过标签或触发事件来执行js代码,那么可以换一个标签来执行js代码,构造a标签再尝试利用a标签的href属性执行js代码
?keyword="> xss
说实话又有点拖了。。
7.22