原理
- 程序对输入和输出没有做合适的处理,导致恶意字符输出在前端时被浏览器当作有效代码解析执行
- 后端代码将用户输入的字符当成了js代码去执行
xss常用代码
- < script>alert(/xss/)
- onclick='alert(1)'
- onclick 属性是 HTML 元素中的一个事件属性,它用于指定在元素被点击时执行的 JavaScript 函数。
- < a href='javascript:alert(1)' >
- 引用a标签超链接 href 属性使用了 JavaScript 伪协议来执行 JavaScript 代码。点击超链接时执行 alert(1) 。
1.xss漏洞的三种形式
- 01.DOM型:
- 浏览器与服务器没有交互,浏览器去另一个浏览器
- 直接在url中添加代码
- 02.反射型 :
- 通过引用一个链接来引诱用户点击链接到一个恶意链接来实施攻击
- 浏览器与服务器有交互
- 常见利用在搜索框
- 服务器将浏览器的输入原样返回给了浏览器,==服务器不做操作==
- 搜索框输入 123 页面会回显123
- 搜索框输入 123 页面会回显123
如何查看服务器是否返回了原样内容
- 在搜索框内随意输入一串字符 如:cvbhnjkmgvhjkl
- ctrl+u查看网页源代码 ctrl+f搜索刚才查询的字符看是否一致
- 03.存储型 :
- 当一个页面存在存储型xss的时候,插入的恶意代码会存储到数据库中。任何人当访问此页面的时候,web程序会从数据库中取出恶意代码插入到页面,导致浏览器出发xss。
- 常利用在评论,论坛,邮件系统等有多用户交互的环境中。
- **浏览器与服务器有交互
- **会把前用户上传的内容存储到数据库中,并且以后任何用户访问该网页都会显示内容**
2. js代码思路
- 在前端页面中,script标签中的代码一定是js代码
- 但是js代码不一定必须在script标签中
- js运行环境是浏览器
3. xss漏洞的危害
- cookie盗取
- 站点重定向
- XSS蠕虫
- 获取客户端页面信息,例如邮件的内容窃取
4. 绕过方法
- onclick属性
- onclick 属性是 HTML 元素中的一个事件属性,它用于指定在元素被点击时执行的 JavaScript 函数。
- onclick='alert(1)'
- javascript伪协议绕过
- < a href='javascript:alert(1)' >
- 引用a标签超链接 href 属性使用了 JavaScript 伪协议来执行 JavaScript 代码。点击超链接时执行 alert(1) 。
- 大小写绕过
- < a hRef='javascript:alert(1)' >
- 双写绕过
alert(/xss/)
- javascript伪协议实体编码绕过
- 十进制编码
- 尝试 javascript:alert(1) ( 将javascript 末尾的 t 进行了十进制转码 )
- javascript:alert(1)
这里发现又新添加了一个函数 strtolower 含义就是将写入的字符中的所有大写全部转化为小写
- javascript:alert(1)
- 过滤下列关键字
- "script","scr_ipt"
- "on","o_n"
- "src","sr_c"
- "data","da_ta"
- "href","hr_ef"
- '"','"'
javascript:alert(1)将t编码后script就不会被过滤