XSS(Cross-Site Scripting),中文意为跨站脚本攻击,是一种常见的 Web 安全漏洞。攻击者通过在页面中插入恶意脚本,利用用户浏览器对页面的信任,获取用户的敏感信息或进行其他恶意操作。XSS 分为存储型、反射型和 DOM 型三种类型。存储型 XSS 攻击是指将用户提交的恶意脚本存储在服务器端,当受害者访问该页面时,恶意脚本会被执行。反射型 XSS 攻击是指将恶意脚本作为参数传递给服务器端,服务器端将恶意脚本反射到页面中,当受害者访问该页面时,恶意脚本会被执行。DOM 型 XSS 攻击是指恶意脚本修改了页面中的 DOM 结构,从而达到攻击的目的。为了避免 XSS 攻击,开发人员应对用户输入做严格的限制和过滤,同时对输出的内容进行转义等安全措施。
XSS 的原理是利用用户浏览器对页面信任的特性,注入恶意脚本并使其在浏览器中执行。XSS 攻击主要有三种方式:
攻击者利用了页面中存在的漏洞或弱点,通过插入恶意脚本来进行攻击。常见的漏洞或弱点包括未过滤用户输入、未对输出内容进行转义等。对于开发人员来说,为了避免 XSS 攻击,需要对用户输入进行限制和过滤,同时对输出的内容进行转义等安全措施。
1.挂马
2.盗取用户Cookie。
3.DOS(拒绝服务)客户端浏览器。
4.钓鱼攻击,高级的钓鱼技巧。
5.删除目标文章、恶意篡改数据、嫁祸。
6.劫持用户Web行为,甚至进一步渗透内网。
7.爆发Web2.0蠕虫。
8.蠕虫式的DDoS攻击。
9.蠕虫式挂马攻击、刷广告、刷浏量、破坏网上数据
10.其它安全问题
XSS 攻击的利用方式主要有以下几种:
开发人员可以通过采用以下措施来保护网站免受 XSS 攻击的影响:
一些常用的标签与属性
常见的 XSS 攻击方式有以下几种:
开发人员可以通过采取以下措施来预防 XSS 攻击:
下面我列举的标签大部分是可以自动触发js代码的,无需用户去交互,大部分情况下我们也是希望是自动触发而不是等用户去触发。
1.scirpt 标签
12
2.img 标签
标签定义 HTML 页面中的图像。
1
12
3.input 标签
标签规定了用户可以在其中输入数据的输入字段。
1
onfocus 事件在对象获得焦点时发生:
12
竞争焦点,从而触发onblur事件:
1
input 标签的 autofocus 属性规定当页面加载时 元素应该自动获得焦点。可以通过autofocus属性自动执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发:
1
" οnclick=alert(1)> 这样需要点击一下输入框
" onmouseover=alert(1)> 需要鼠标划过输入框
12
4.details 标签
标签通过提供用户开启关闭的交互式控件,规定了用户可见的或者隐藏的需求的补充细节。ontoggle 事件规定了在用户打开或关闭 元素时触发:
123
使用details 标签的 open 属性触发ontoggle事件,无需用户去点击即可触发:
1
5.svg 标签
6.select 标签
7.iframe 标签
8.video 标签
9.audio 标签
10.body 标签
标签定义文档的主体。
123
onscroll 事件在元素滚动条在滚动时触发。我们可以利用换行符以及autofocus,当用户滑动滚动条的时候自动触发,无需用户去点击触发:
12
11.textarea 标签
12.keygen 标签
//仅限火狐
1
13.marquee 标签
//Chrome不行,火狐和IE都可以
1
14.isindex 标签
//仅限于IE
1
1.空格过滤
当空格被过滤了时,我们可以用 / 来代替空格:
/**/,注释符号绕过;/符号绕过;
也可以:
1234567
2.引号过滤
如果是html标签中,我们可以不用引号。如果是在js中,我们可以用反引号代替单双引号:
123
3.括号过滤
当括号被过滤的时候可以使用throw来绕过。throw 语句用于当错误发生时抛出一个错误。
// 在js中,我们可以用反引号代替单双引号
123
6.编码绕过
Unicode编码绕过
javascript:alert(/xss/) (编码了r和i)
1234567
url编码绕过
12345
Ascii码绕过
123
hex绕过
123
base64绕过
12345
7.过滤url地址
使用url编码
javascript:alert('xsshttp://')
12345
使用IP
1.十进制IP
2.八进制IP
3.hex
4.html标签中用//可以代替http://
5.使用\\
但是要注意在windows下\本身就有特殊用途,是一个path 的写法,所以\\在Windows下是file协议,在linux下才会是当前域的协议
6.使用中文逗号代替英文逗号
如果你在你在域名中输入中文句号浏览器会自动转化成英文的逗号
//会自动跳转到百度
12345678910111213141516171819
8.单引号闭合+htmlspecialchars函数绕过
'onmouseover='alert(/xss/)
1
9.JavaScript伪协议
"> o_n和过滤
1
1.什么是HttpOnly?
如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,具体一点的介绍请google进行搜索
2.javaEE的API是否支持?
目前sun公司还没有公布相关的API,但PHP、C#均有实现。搞javaEE的兄弟们比较郁闷了,别急下文有变通实现
3.HttpOnly的设置样例
javaEE response.setHeader(“Set-Cookie”, “cookiename=value; Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly”);
具体参数的含义再次不做阐述,设置完毕后通过js脚本是读不到该cookie的,但使用如下方式可以读取 Cookie cookies[]=request.getCookies();
C#
HttpCookie myCookie = new HttpCookie("myCookie");
myCookie.HttpOnly = true;
Response.AppendCookie(myCookie);
1234
VB.NET
Dim myCookie As HttpCookie = new HttpCookie("myCookie")
myCookie.HttpOnly = True
Response.AppendCookie(myCookie)
1234
但是在 .NET 1.1 ,中您需要手动添加 Response.Cookies[cookie].Path += “;HTTPOnly”;
PHP4
header("Set-Cookie: hidden=value; httpOnly");
12
PHP5
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);
12
最后一个参数为HttpOnly属性
1.标签语法替换
ipt>alert("XSS") ipt>
1
12
2.特殊符号干扰
3.提交方式更改
4.垃圾数据溢出
5.加密解密算法
6.结合其他漏洞绕过
下面的列表包含了可绕过的WAF、Paylaod以及相关的绕过技术
WAF名称:Cloudflare
Payload:click
绕过技术:非空格填充
123
WAF名称:Wordfence
Payload:click
绕过技术:数字字符编码
123
WAF名称:Barracuda
Payload:click
绕过技术:数字字符编码
123
WAF名称:Comodo
Payload:click
绕过技术:黑名单中缺少事件处理器以及函数调用混淆
123
WAF名称:F5
Payload:click
绕过技术:黑名单中缺少事件处理器以及函数调用混淆
123
WAF名称:ModSecurity
Payload:
绕过技术:黑名单中缺少标签或事件处理器
123
WAF名称:dotdefender
Payload:
1.测试一个使用GET方法的网页:
python xsstrike.py -u "http://example.com/search.php?q=query"
1
2.测试POST数据:
python xsstrike.py -u "http://example.com/search.php" --data "q=query"
python xsstrike.py -u "http://example.com/search.php" --data '{"q":"query"} --json'
12
3.测试URL路径:
python xsstrike.py -u "http://example.com/search/form/query" --path
1
4.从目标网页开始搜寻目标并进行测试
python xsstrike.py -u "http://example.com/page.php" --crawl
1
您可以指定爬网的深度,默认2:-l
python xsstrike.py -u "http://example.com/page.php" --crawl -l 3
1
5.如果要测试文件中的URL,或者只是想添加种子进行爬网,则可以使用该–seeds选项:
python xsstrike.py --seeds urls.txt
1
6.查找隐藏的参数:
通过解析HTML和暴力破解来查找隐藏的参数
python xsstrike.py -u "http://example.com/page.php" --params
1
7.盲XSS:爬行中使用此参数可向每个html表单里面的每个变量插入xss代码
python xsstrike.py -u http://example.com/page.php?q=query --crawl --blind
1
8.模糊测试–fuzzer
该模糊器旨在测试过滤器和Web应用程序防火墙,可使用-d选项将延迟设置为1秒。
python xsstrike.py -u "http://example.com/search.php?q=query" --fuzzer
1
9.跳过DOM扫描
在爬网时可跳过DOM XSS扫描,以节省时间
python xsstrike.py -u "http://example.com/search.php?q=query" --skip-dom
1
10.更新:
如果跟上–updata选项,XSStrike将检查更新。如果有更新的版本可用,XSStrike将下载更新并将其合并到当前目录中,而不会覆盖其他文件。
python xsstrike.py --update
1