#XSS漏洞的挖掘与利用

#基础弹窗

1
2
<script>alert("XSS")</script>
<img src=1 onerror=alert("XSS")>

定义:存储在浏览器中的纯文本
JS中访问Cookie-document cookie 只能获取非httpOnly
属性选项:expires,domain,path,secure,HttpOnly
domain,path俩个属性决定什么时候cookie被浏览器发送出去
发生跨域ajax请求 即使请求URL的域名和路径都满足cookie的domain和path 默认情况下cookie也不会自动被添加到http头部 可以是本身/父项
secure设置 保证网页是Http协议的 HttpOnly不能通过JS代码区设置 只能通过服务器来设置

1.修改cookie-重新赋值,path/domain与旧保持一样
2.删除cookie-重新赋值,expires设置成过去的时间
3.编码-escape

#浏览器解析

-实体编号 例:< -&#60

-HTML

空元素
原始文本
RCDATA元素,可以容纳文本和字符引用
外部元素,(MathML或SVG命名空间元素)
基本元素
<textarea>or<title>需要闭合

-XSS

1.反射性XSS
2.存储型XSS
修改参数,提交后查看页面源代码,寻找输出位置
例 输出在<b>标签中 不需要闭合 直接XSS
input的value标签里面 “>+XSS
tips:选择框可以BP改 注意每一个Post参数
转义尖括号 “闭合 标签内构造属性
例 href属性 构造JS伪协议javascript:alert(docment.dcmain)
Domain被过滤javascript:alert(docment.&#100,&#111.&#109.&#97.&#105.&#110)
把script/on/style/大小写过滤:<iframe src="data:text/html;base64,......."></iframe>(创建子窗口在父窗口弹窗)
><均被转义 输出在JS的字符串当中 可以使用JS字符串的编码方式/unicode编码/八进制编码
输出在注释里 payload:换行+%0Aalert(1);//
反斜杠干掉双引号 中间变成一串字符串;用//注释掉多余的东西;=的优先级问题可以==替代;function XXX(){}优先级最高 防止提示未定义;空格用/**/替代
换行问题 用/链接字符串 加%c0吃掉转义符
尽量少用
//注释\转义

-eval函数

var obj=eval(‘(‘+’{“name”:”kericwy”}’+’)’);
alert(obj.name);
最后加\在console看error

-总结

1.输入在标签间:测试<>是否被过滤
2.在JS标签内:保证JS语法的正确性(控制俩处输入且\可以用,存在宽字节)
CSRF的利用

#域,同源策略

同源:协议、域名、端口(默认80)相同
非同源:cookie/LocalStorage/IndexDB无法读取 DOM无法获得 AJAX请求不能发送
二级域名相同(父子、兄弟域)允许通过设置document.domain共享cookie
跨域请求 JSONP WebSoket CORS
JSONP注入 通过添加一个<script>元素,通过src属性向服务器请求json数据,服务器将数据放在一个指定名字的回调函数返回 foo({“ip”:”8.8.8.8
“}) 不造是啥但能执行 callback/jsonp/…=.(函数名)..的API
防御:校验referer(但可从HTTPS向http发请求或在src中用data:base64)
callback=alert(1);//有反射型注入
CORS 允许浏览器向不同源服务器发出任何请求
简单请求 head/get/post
加origin头 如果可以会回acess-control-allow-origin等
双方withCredentials:true且acess-control-allow-origin不为*才能接受cookie
预检请求

#CSP专题