xss:cross site scripting 跨站脚本攻击
定义
将脚本代码注入到网页上,其他浏览者浏览网页时执行脚本
相对于sql注入,xss的对象是网站用户,sql注入的对象是网站服务器
分类
反射型:需要用户点击链接的一次性攻击,通过GET方式把脚本附加在url中,可以通过短网址来隐藏脚本
存储型:脚本永久存储在目标服务器数据库或文件中,任何人浏览页面都会触发脚本
dom型:利用客户端浏览器对请求的网页进行dom渲染
实战流程
1. 制作并搭建接收远程cookie的页面和站点
2. 寻找目标网站的xss注入点
反射型:使用get方式提交信息,寻找url中带?的页面
存储型:使用post提交
3. 确认注入点
在输入区提交js代码 <script>alert(11)</script>,如果成功被执行会出现弹窗,则存在注入点。
如果网站留言需要管理员审核,则无法确认是否存在注入点。
4. 提交盗取管理员cookie的脚本
5. 等待管理员登录并查看留言
6. 使用收到的管理员cookie绕过身份验证,直接登录网站后台
防御绕过方法:
过滤关键字:
关键字大小写转换
复写关键字
使用其他html标签注入,如<img src=1 οnerrοr=alert(document.cookie)>
字符长度被限制:
前端限制
改标签的maxlength属性
删除js代码
通过burpsuit抓包修改提交
后端限制
看不到源代码就没办法,蒙吧
实战举例1:
本地创建js文件,用于执行时向php代码提交获取到的cookie
本地创建php文件,用于将接收到的cookie写入到本地保存
通过在目标网站表单提交注入脚本。网站管理员在审核留言时执行脚本,将cookie写入到本地保存。
实战举例2:
dvwa中XSS (Reflected) medium级别
Php中str_replace函数区分大小写,改大写字母绕过过滤
Php中str_replace函数替换只做1次,不做递归替换,通过复写绕过过滤
dvwa中XSS (Reflected) high级别
Preg_replace函数不区分大小写,并且通过正则递归匹配,无法使用script标签。使用img标签的错误事件来绕过
实战举例3:
dvwa中XSS (Stored) medium级别
Message中对特殊符号进行了过滤,无法使用script标签,但name只用str_replace做过滤。但name input标签对输入的长度进行了限制,将10删掉即可提交。
dvwa中XSS (Stored) high级别
Name使用了正则过滤,使用img标签加事件即可。
实战举例4:
dvwa中XSS (DOM) medium级别
查看页面源代码,发现下拉框是js操作dom画的,此时想执行注入的js,需要提前闭合option和select标签。同时php代码中使用了stripos函数过滤script标签,所以使用img标签加事件来注入js代码。
dvwa中XSS (DOM) HIGH级别
Php中使用switch语句,相当于开了白名单,任何其他标签无法都无法通过。此时使用#来跳过检测。Php中支持3种注释,js支持2种注释,所以#后的部分php不会执行,但js会执行。