上一等级里,我们的xss 构造格式是在img 中,然后直接通过URL 参数提交,通常反射型的XSS 比较广泛,但是伤害一般来说没有太高,而且比较容易防范。除了img 元素,还有诸如input, iframe,a href, 主要利用的是href 或者 src 可以使用javascript, 或者是使用onerror,表示当前图片无法显示时候可以调用的脚本。更多的内容,接下来详析。
接下来,我们针对的还是反射型的XSS,仍然是在参数中,作为目标文件中的参数,通过URL 传递给它,但是没有对该参数进行详细的过滤,造成了有机可趁,继续放出腾讯家以前的一个例子,也是乌云上的,网址如下:
http://activity.soso.com/common/setParentsInfo.php?callback=aaaaaaaaa
此处的callback 参数,如果没有过滤的话,得到的网页源码里,我们就会看出来,如下:
拿出这一块的上下文代码,大约构造是这样的:
|
|
aaaaaa如果我们替换成
|
|
当然,我们注意到,上边的script 还没有闭合,为了让代码提前跳出前一个script ,我们应该在前边吧sciprt 闭合,这样:
|
|
这样,很明显,就会继续发起了XSS 弹窗。但是,如果我们不允许输入破折号呢,上边所说的就没有办法了,但是,这并不代表毫无办法,还有一些具有威胁的函数,比如eval, String.fromCharCode, execute,这些都会造成XSS,也要过滤。如下,我们使用eval() 来构造攻击:
|
|
callback=eval(‘alert(1)’);void 仍然令我们的源代码语法正确,能够正确执行。
但是像这样构造出来的情况,其实非常的少见,因为正常传第一个参数进去,开发者都会将 “ 过滤掉,这样构造就失败了。
我们知道,XSSer 和 防御者之间的斗争从来就是道高一尺,魔高一丈的过程,防御者绞尽脑汁去过滤所有可能出现的情况,去处理所有可能的奇葩诡异编码情况,而XSSer 又会绞尽脑汁的去挖掘茫茫网络中漏洞,努力用各种奇技淫巧构造出五花八门的形态,看起来诡异无比,然而偏偏又能让javascript 语法正确,正常运行。
然而xss 却又一直是热门,但并不是很受重视的攻击手法,原因大概是这样的: