目录
一、XSS攻击初步-btslab-盗用cookie
-
用两个浏览器来模拟攻击者(firefox)和受害者(google)
-
用受害者浏览器注册一个新账号,并在受害者浏览器进行登录,发布一个forum
可以看到有一个用户test新发布的forum
再用未登录的攻击者发布一个forum,可以看到新增了一条由匿名用户发布的forum
最后查看一下受害者的cookie,以便后面与攻击者获得的cookie对比
-
攻击者在xss安全测试平台复制一段xss攻击代码,放在发布的forum的message中,引诱受害者去点击自己发布的forum
-
受害者收到引诱去点击刚刚匿名攻击者发布的forum
-
攻击者在xss平台查看,可发现新增一条记录,点击展开可发现,有cookie字段,和前面的受害者cookie对比,发现一致
-
攻击者利用拿到的cookie冒充test用户发布forum,此时需要用到firefox的插件modheader
可以看到此时攻击者发布一条冒充的forum,但发布者却显示是test用户,即攻击成功
二、xss-labs:level1-level10
-
level1
首先发现xss输入点和输出点,页面上的test和payload会随url中get参请求数的变化而变化,于是将url中的test改为js代码,通关
-
level2
首先发现潜在的xss输入点和输出点
采用和第一关相同的方法发现并未成功
查看页面源码,发现尖括号被转义(原因是服务器端用**htmlspecialchars()**函数进行了处理)导致执行失败
但考虑input标签value处的属性值,可以构造">使value先闭合,然后再放入script代码,通关成功
-
level3
首先发现潜在的xss输入点和输出点,在输入框输入文字点击搜索后,页面会显示相应的输入框中的内容
直接输入js代码点击搜索后,不能成功执行,于是查看页面源码,发现h2标签和input标签中的尖括号都被转义
但我们还可以通过绑定js事件的方式执行js代码,构造**’ οnfοcus=‘alert();**,前面的’ 先闭合value属性,此时查看页面源代码,发现input已经多了一个onfocus事件绑定,此时再去聚焦到页面上的输入框可以发现执行成功
-
level4
首先寻找潜在的xss输入点和输出点,在输入框中输入js脚本尝试执行,发现搜索框中的尖括号全部消失
查看页面源码,此时同样考虑用第三关事件绑定的js执行方式,构造**" οnfοcus="alert();**,查看页面源码发现input标签多了一个onfocus事件,再点击输入框发现执行成功
-
level5
寻找潜在的xss输入点和输出点,在输入框中输入js脚本,点击搜索,发现搜索框中原本输入的script变为scr_ipt,同时尝试onfocus绑定事件执行,同样失败
于是我们尝试换一种js执行方式,利用a标签执行,构造**"><a href=“javascript:alert();”>xss</a>**,点击搜索后的xss链接,发现执行成功
-
level6
寻找潜在的xss输入点和输出点,同时输入js代码进行测试,同样script变为了scr_ipt,尝试使用a标签和onfocus执行js同样失败
尝试将a标签的href换为大写HREF,发现没有被处理,点击链接后执行成功
-
level7
查看潜在的xss输入点和输出点,并用js代码测试,可见输入框中script均被删除
于是考虑双写绕过,构造**"><scscriptript>alert();</scscriptript>**,发现执行成功
-
level8
查看潜在的xss输入点和输出点
用js代码进行测试
于是我们考虑html转义字符,构造javascript:alert();,点击链接,发现执行成功
-
level9
寻找潜在的xss输入点和输出点,可以看到a标签处的链接被判定为不合法,经测试发现,链接中只要含有http://即被判定为合法
尝试构造javascript:alert();//http://,发现javascript与第八关一样被处理了,所以采用html转义,点击链接后发现执行成功
-
level10
寻找潜在的xss输入点和输出点,同时输入js代码进行测试,发现有三个输入框均被隐藏
通过get请求参数构造,发现只有name为t_sort的输入框可以显示出来
于是利用这个特点构造t_sort=" type=“text” οnfοcus="alert();,聚焦输入框,可以发现执行成功
三、xss利用总结
- 在无特殊处理的情况下直接执行js代码
- 当输入的字符串被放入某标签属性中时,可以通过构造字符串先闭合标签,然后再写入要执行的js代码
- 可以利用onfocus或其他事件绑定执行js代码
- 可以利用a标签的href属性执行js代码,具体为href=“javascript:xxx”
- href属性被处理时,可以利用大小写绕过
- 当script被整体删除时,考虑双写绕过
- 注意使用注释符//