level 1

首先观察一下页面,我们可以知道:采用get类型传参,并且得到的参数会回显到页面之上,而且会计算它的长度。

通过观察源码我们可以发现标红的位置存在注入点。注入类型为XSS反射型注入。

将name的参数改变为

1
<script>alert('xss')</script>

直接通关!!

level 2

将test改为

1
<script>alert('xss')</script>

发现它并没有进行弹窗,这时候我们查看源码

发现它将<>都变成了HTML的实体字符了,猜测是使用htmlspecialchars()函数。

但是我们发现仍有地方没有被更改

但是它的语句在属性的值里,原来的语句是无法进行弹窗的这是我们更改语句使语句闭合。

"><script>alert('xss')</script>//

成功通关

level 3

插入注入语句之后发现并没有出现弹窗,查看源码。

发现两处都被转义成为了HTML实体的字符了。猜测后端有两个htmlspecialchars()函数,通过查看后端的代码证实了我们的猜想。

我们可以通过<input>标签的一些特殊事件来执行JS代码。

构造代码:level3.php?keyword='onfocus=javascript:alert('xss') > //&submit=搜索

或者是' onclick='alert(1)

onfocus 事件是在对象获得焦点时才产生,onfocus 通常用于 <input>, <select>, 和<a>.

简单的说就是要鼠标点击输入框的时候才会触发。

成功通关

level 4

插入注入语句并没有出现弹窗,查看页面的源代码

我们可以发现1处被转译成的HTML实体的字符,2处直接除去<>,这时我们考虑采用

test" onclick="alert(1)

采用事件触发的方式不需要用到<>,通关后端我们可以知道后端采用str_replace() 函数将<>消去了。

成功通关

level 5

插入注入语句并没有出现弹窗,查看页面的源代码

可以发现后端将script转换为scr_ipt并且转义为HTML实体的字符。

然后发现on也被过滤了,而且所有的事件属性都是带有on的,所以在此处无法采用事件

构造一个Payload闭合闭合原标签,重新创建一个a标签

a标签中引入一个script超链接来调用弹窗

这时我们考虑采用

"><a href="javascript:alert(1)">link</a>

成功绕过,通过后端代码我们可以知道后端将script转义为scr_ipt,将on转义为o_n,转义为HTML实体的字符。

成功通关

level 6

插入注入语句并没有出现弹窗,查看页面的源代码

使用注入语句"><a href="javascript:alert(1)">link</a>发现并没有弹窗,查看页面的源代码发现href被转义成了hr_ef

此时我们查看后端的代码可以发现它转义了很多东西,但是我们发现它并没有强制变为小写,所以我们采用大写的方式绕过。

构造语句 "><a Href="javascript:alert(1)">link</a>

成功绕过!

level 7

插入注入语句并没有出现弹窗,查看页面的源代码

发现script被删,改用 "><a Href="javascript:alert(1)">link</a>

发现Href,script被删,猜测后端进行了小写转换,并且删去了href,script。

双写href和script,构造语句 "><a hrhrefef="javascscriptript:alert(1)">link</a>

这一题其实也可以采用编码绕过。

成功绕过

level 8

插入注入语句没有出现弹窗,查看页面的源代码

发现它将‘ ’,script转义。而且因为我们只需要一个连接,所以我们采取编码的方式绕过。

采用javascript:alert(1)的编码:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

成功绕过。

level 9

插入注入语句没有出现弹窗,查看页面的源代码.

发现它转义成了HTML字符,而且它它还输出了链接不合法的通知,我们查看后端的代码。发现它会寻找是否有http://的字符。

于是我们在编码之后加上字符串”http://“,构造语句 &#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;//http://

成功绕过

level 10