1.xss的基本概念
跨站脚本攻击xss(cross site scripting),为了不和层叠样式表(cascading style sheets)的缩写混淆,故将跨站脚本攻击缩写为xss。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击。
2.xss分类
分类可以分成三类:反射型xss、dom型xss、存储型xss
反射型xss又称非持久xss,这种攻击往往具有一次性
存储型xss又称持久xss,攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性
dom型xss全称document object model,dom文档对象模型,使用dom动态访问更新文档内容、结构及样式
3.input标签属性
name名称属性:元素的名称,也就是名称的值代表当前输入元素的名字
value属性:元素的默认值
1)当input type=“text”、“password”、“hidden”时,定义输入字段的初始值
2)当input type=“button”、“reset”、“submit”时,定义按钮上显示的文本
2)当input type=“checkbox”、“radio”、“image”时,定义与输入相关的值
网页上输入https://xssaq.com/yx/开始挑战
level1-无过滤机制
看到/level1.php?name=test
//问号?用来查询参数,欢迎用户test,payload的长度(test)长度为4
那么对name=test的test修改会看到payload的长度在变化
按f12看源代码
没有任何防护的所以我们在test这个地方输入语句他就会有响应
试试构造xss漏洞并验证
那么/level1.php?name=<script>alert(/xss/)</script>
//将test的值换了,组成的<script>alert(/xss/)</script>的alert( )括号的内容可输入不同的内容
显示通过了
level2-闭合标签
那么像第一关那样输入<script>alert(/xss/)</script>看看会发生什么
看看源代码
这青色的 vlaue的值为 "<script>alert(/xss/)</script>" 黑色的 >与<input >相联
那么这里可看到,在input的value值前后有双引号
根据sqli-labs的经验,添加">和<"来绕过
将<input name=keyword value="<script>alert(/xss/)</script>">构造成这样
变为<input name=keyword value=""><script>alert(/xss/)</script><"">
那么将网页这么输入
"><script>alert(/xss/)</script><"
通过
level3-单引号闭合
试试输入"><script>alert(/xss/)</script><"
并没有反应,那么看看源代码怎么样的吧
跟在文本框输入后的源代码比较
发现"还有<和>被转义了
双引号"被转义为"
小于号<被转义为>
大于号>被转译为<:
那么试着构造一个带单引号的xxs漏洞验证代码并验证
了解到html事件属性
试试onclick看看会不会通过
' οnclick=alert('test') '
从属性onclick开始试,那么这发的是onmouseover的时候成功例子
输入'οnmοuseοver='alert(/xss/)
level4-双引号闭合
看看源代码value值那像双引号闭合代码
先试试输入上一关成功的代码看看会发生什么
没怎么被闭合那么试试将单引号换成双引号吧
"οnmοuseοver="alert(/xss/)
构成源代码如图,看vlaue值
那么成功显示完成的不错啦
less5-创建标签
那么按照惯例看看源代码吧
输入上一关通过的"οnmοuseοver="alert(/xss/)看看会发生什么
那么发现on之间被加了_也就是被过滤了,然后vlaue像双引号闭合,那么根据sqli-labs的经验用双写也就是"oonnmouseover="alert(/xss/)发现还是没通,value=""oo_nnmouseover="alert(/xss/)"也许要考虑别的方式了
对此,我们可测试其他关键字语句比如<a href="javascript:alert(/xss/)">在加上"> <"构成闭合语句那么就像这样,输入"><a href="javascript:alert(/xss/)">xss</a><"
源代码为
界面显示为
那么点击xxs
通过