跨站脚本攻击XSS
跨站脚本攻击与SQL注入攻击区别在于XSS主要影响的是客户端安全,SQL注入主要影响Web服务器安全。
一、反射式XSS
非持久型、参数型跨站脚本,主要用于将恶意脚本附加到URL地址的参数中。
-
low:
服务器端核心代码:
观察到并没有对name进行任何的过滤操作,
那么输入<script>alert(123456)</script>观察到弹窗。
-
Medium:
看到有一个 $name = str_replace( '<script>', '', $_GET[ 'name' ] );
这个函数将字符“<script>”换为NULL,那么由于函数只执行一次,有多种方法可以绕过。
比如将这个标签双写绕过,但是只能过滤一次,就达成了我们的目的。
比如:<sc<script>ript>alert(123456)</script>
或者使用大小写混淆的方法。
<Script>alert(123456)</script>
-
High:
观察到使用了正则表达式来过滤:
preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i'
那么我们就不能使用大小写绕过和重写的方法来绕过了。
虽然无法使用<script>标签注入XSS代码,但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。这样就会避免出现<script>标签被正则表达式匹配到。
我们可以使用以下:
<img src=" " onerror=alert('xss')>
(因为src无我们就可以将其路径设置为null)
-
Impossible:
二、存储式XSS
持久型跨站脚本,更具威胁性,并且可能影响到web服务器自身的安全。XSS通常用于发动Cookie窃取、恶意软件传播(蠕虫攻击)、会话劫持、恶意重定向等。存储式XSS会保存在服务器上,有可能会跨页面存在,它不改变页面URL的原有结构,所以有时候还能逃过一些IDS检测。
从攻击过程来说,反射式XSS一般要求攻击者诱使用户单击一个包含XSS代码的URL链接;而存储式XSS则只需让用户查看一个URL链接,这个链接中存储了一个脚本。
-
low
输入有限制,修改前端最大长度后插入<script>alert(123456)</script> 语句xss
-
Medium
还是加一个<script>标签过滤,可以使用上述方法进行绕过(重写或者大小写绕过)
使用<Script>alert(/xss/)</Script>绕过:
-
High
同样正则过滤,使用
<img src=1 οnerrοr=alert(/XSS/)>
-
Impossible