Hello,各位小伙伴,依旧是晚上好~~
今天跟大家分享的课题是,当我们进行XSS脚本注入时,在不同的注入点进行注入,会产生不同的结果,那么这到底是为什么呢?不同节点,我们又该用什么针对性的插入方法呢?
且听我细细道来~
Part.1
HTML标签之间
情况一:
对于大多数HTML标签而言,如果插入点就在标签之间,那么是可以直接运行js脚本的,如下:
此处我们可以直接插入js脚本,如:
<script>alert(1)</script>,插入后代码如下:
不过这种情况应该比较少见,大多数开发者都会对前端代码进行优化,避免出现这么直白的漏洞点。
情况二:
对于<title>标签,会对标签之间的内容进行htmlencode编码,使其转码为实体编码,无法作为js代码执行,如下:
我们依旧直接注入js脚本,例如
<script>alert(1)</script>,插入后代码如下:
会出现js代码正常显示,但并不会执行的情况:
面对这种情况,我们是不是就无法插入了呢?
既然<title>标签不行,那么我们可以把<title>标签给闭合了,插入</title><script>alert(1)</script>,此时可以成功执行js脚本,插入后代码如下:
以下标签均包含htmlEncode功能,在插入js代码时,我们需要注意关闭标签。
Part.2
HTML标签之内
情况一:
插入点在value值内,如下:
这种情况下,js代码也是无法执行的,我们需要让js代码跳出value值,并且想办法执行。
方法一:闭合value属性,并使用onmouseover这种可以直接执行js代码的属性。插入 " onmouseover=alert(1),插入后代码如下:
当我们将鼠标移动到输入框时,js代码就会执行:
方法二:闭合value属性,同时也闭合标签,插入
"><script>alert(1)</script>,插入后代码如下:
那么以上两种方法,哪种更好呢?
方法一需要鼠标覆盖才能执行,但方法二<script>标签更容易被过滤。
情况二
当type类型在前,且为hidden型时,如下:
这种情况,就无法使用onmouseover的方法了,因为整个input标签的内容都无法显示。
但我们依然可以使用关闭标签的方法,插入
"><script>alert(1)</script>,插入后代码如下:
当type类型在value后,为hidden时,如下:
HTML代码有一个特性,当标签中存在两个type属性时,第二个type属性就会失效,因此我们只要插入一个type="text",问题就容易解决了。
插入" onmouseover=alert(1) type="text 即可:
又或者插入:" /><script>alert(1)</script>
Part.3
可执行js代码的情况
情况一:
在src/href/action等属性内:
以上属性可以直接执行JavaScript伪协议,因此我们可以直接输入:JavaScript:alert(1)
在on*事件内:
可直接输入alert(1),如下:
情况二:
插入点在JavaScript代码中:
我们可以直接闭合掉<script>标签,输入如下:
</script><script>alert(1)</script>//
当然也可以输入";alert(1)// 仅仅闭合a属性。
Peace !