上一节的XSS基础教学1里面讲到了输入输出的概念,在实际情况中,输出往往会出现在HTML标签的属性之中。
例如: 、 .. 这个时候怎么办呢?
这种情况,直接用前面提到的方法写入的话,页面中标签是不会被解析的。因为这段内容在标签属性中的时候,是不会被当做标签进行解析的。如下图,这段代码会以字符串文本的形式,输出在输入框里面。
比较常见的情况是下面这样的。
http://xxxx.com/search.php?word=11111
对应的网页源代码如下:
关键词:<input type="text" value="11111" />
如果这里的word没过滤双引号。就会有以下的情况发生。
http://xxxx.com/search.php?word=111" onclick="alert(1)
对应的网页源代码如下:
<input type="text" value="111" onclick="alert(1)" />
这时候当用户点击页面中的text文本框的时候,就会执行onclick事件,执行alert代码,这种构造方法是不破坏跳出原有标签,直接构造添加事件属性,从而执行js代码。
当然,如果同时没有过滤"><的情况下,我们也可以把代码这么写:
http://xxxx.com/search.php?word=111"><img src=x onerror=alert(1)>
对应的网页源代码如下:
<input type="text" value="111"><img src=x onerror=alert(1)>" />
这种情况 源码中会侧漏一部分(这个侧漏也经常被作为可能存在XSS漏洞的一个特征),可以自动触发XSS漏洞。
综上所述,当输出点在HTML标签的属性中时,我们构造代码的时候,就要先用双引号去闭合属性,跳出该属性限制,然后再根据实际情况,去构造最终写入XSS代码。
这节课,你学会了吗?