第一关
这里将test改成1发生没有过滤可以直接输出,那么可以直接使用代码进行注入测试了
输入代码
<script>alert(/xss/)</script>
直接注入xss代码将1换成我们注入的代码,即可通关。
第二关
先按照常规思路注入代码,看是否可行 ,发现没有找到。
那就F12打开网页源码
发现str需要闭合一下,那我们就来闭合一下。输入
”><script>alert('6')</script>
将这个代码闭合下。 :// >是为了闭合include左边的< "是为了闭合value右边的"
第三关
先输入一个<>测试一下发现值被赋了"和”>
感觉和第二题差不多,但实际想着没那么简单的情况下,我们打开了源码进行查看,发现使用了
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
htmlspecialchars() 预定义的字符分别是:
&=&
"="
'='
<=>
例如 htmlspecialchars("&")
将返回 &
,这样在 HTML 中显示时就不会被解析为标签的开始。
所以我们这次就是用事件类型进行注入。
' οnmοuseοver='alert(1) //由于是使用多个onmouseover注入,需要滑动一下鼠标才能实现。//这里的' onmouseover是为了在源码中value的左边成为一对, 'alert是为了和左边的'划成一对,'的作用是为了定义字符串的边界,这样才不会被htmlspecialchars函数转换为 HTML 实体。
第四关
做的我有点烦了,这边直入主题,先输入一个<> 返现和上一关没什么两样,打开源码,情况基本和上一关差不多,什么html乱七八糟的,
查看以上代码,发现意思大致差不多,就是一个转义,第三题的单引号(‘)在前面,所以这次事件输入,改为" οnmοuseοver="alert(1) 使得双引号对称,最终实现效果。
以下是补齐以后的源码。
第五关
直接对源码进行解析 继而得出大小写,on 、script 都无法使用
由于这里只对script进行过滤,所以我们可以使用伪协议来绕过过滤。输入代码,生成超链接即可成功。
"><a href=javascript:alert(1)>绝活哥</a>
第六关
这里使用伪协议对靶场进行测试,发现不行
这里打开源码发现
1:所有的输入没有规定只能小写输出(没有之前的严格,那这次我们可以以这个为突破口)
2:输入<script会输出为scr_ipt
3:输入on会输出为o_n
4:输入src会输出sr_c
5:输入data会输出data_
6:输入href会输出hr_ef
这里我们使用混淆大小写的方式绕过。
输入代码:
"><sCript>alert(1)<sCript>
第七关
上来第一步,拿个大小写碰碰运气测试测试,结果不行
那就打开源码看看吧!
基本上差不多
1:输出统一都为小写
2:script 为空值
3:on 为空值
4:src也为空值
5:data也为空值
6:href输出也为空(那就用不了伪协议了)
这里我们采用重复注入的方式对靶机进行注入
输入代码
"><scscriptript>alert(1)</scscriptript>
第八关
这里旁边有一个超链接 我们点进去试试。
像是把输入的值当成a标签里的herf属性进行跳转。
下面我们输入csdn的网址进去试试,发现可以跳转。
查看了网站源码是直接进行输出的,那我们试试伪链接看看能不能输出。
使用伪链接进行输出 结果还是被滤了。
那么废话不多说,直接开始尝试转码,转码后直接通关。
javascript:alert(1)
这里通关了之后,我们来看下系统源码
$str = strtolower($_GET["keyword"]); // 将获取到的 "keyword" 参数转换为小写
$str2 = str_replace("script","scr_ipt",$str); // 将字符串中的 "script" 替换为 "scr_ipt"
$str3 = str_replace("on","o_n",$str2); // 将字符串中的 "on" 替换为 "o_n"
$str4 = str_replace("src","sr_c",$str3); // 将字符串中的 "src" 替换为 "sr_c"
$str5 = str_replace("data","da_ta",$str4); // 将字符串中的 "data" 替换为 "da_ta"
$str6 = str_replace("href","hr_ef",$str5); // 将字符串中的 "href" 替换为 "hr_ef"
$str7 = str_replace('"','"',$str6); // 将字符串中的双引号替换为 HTML 实体 "
第九关
这里抱着侥幸的态度,试一下上一次的代码,但是看右下角
直接就没有输出,而且还说我的链接不合法
这次尝试使用http://sougou.com/进行访问,显示访问成功,结合两次源码结果返回。可以试试将源码加上http进行绕过攻击。
将伪协议转换码放在前,http的网址放在后面,记住要加 // 进行连接
javascript:alert(1)//http://www.sougou.com
注入后我们先添加,暂时不点击链接,观察源码这边已经成功绕过。点击链接发现成功绕过。
既然已经打开了那么就打开源码看看分析一下情况啦。
过滤处就不单独列开了,和上面一致。
个人认为是,这里唯一不同的是在下面TF条件中,增加了需要增加http://这个要求。文中的意思是如果没有http就要显示链接不合法这里,如果包含,则直接去下一条,是整个链接连接在一块。
第十关
输入个111看一下结果,打开源码发现3个隐藏文件。
我们用text替换hidden,使得表格显现出来。
这边没有keyword,标签名都是以t_什么什么结尾的,所以我们尝试在文本框输入
t_sort="type="text" onmouseover="alert(1) (不要问我为什么一上来就写sort,我也是一个个试过来的)
查看源码,发现被正常拼接在一起了。这里我们点回车,成功执行。
这边进行代码分析 大差不差,不出我们所想。keyword被输出t_short (就简单来说,他只接受t_sort)
再就是$22这句代码就是将$11中的<>都给替换成空值,再将结果存储在$str33当中。
第十一关
来到第十一关,在查看源代码之后,发现多了一行name为t_ref的input输入库
看了一下就比上一关多了一个t_ref ,另外这个t_ref框里的value似乎是上一个关卡的网站。
那我们这里就在hakbar的数据里对Referer进行添加值。随后点击一下弹出的输入框即通关完成。
输入代码。
123”onclick="javascript":alert(1)"type="
第十二关
打开源码,看到这里比上一关多了一个user agent,结合上一关的思路,我们先按上一关的手法试试这个。
这里先打一些东西进去探探路。
打开源码,和我们想的差不多。基本是照单输出了。
然后这里使用bp进行抓包
基本上和输入输出的差不多
然后对其进行注入,输入代码。
'"onblur="alert(/1/)"type="text"//'"type="hidden">
然后把url复制到浏览器后,点击回车。
最后将url复制到浏览器中即可执行。
源码分析:
也没什么好说的,和第12关基本一样,只是注入标签从herf变成了user_age了。
这里使用bp抓包抓一下在复制进去就可以了。
第十三关
这里看到原来的UA变成了cookie,这个我们按照上一关的思路去试一试。
这里成功抓到了包。和上一关基本一样,就是抓的头不一样。
然后把上一关的代码替换掉这个就可以了,注意的是需要将代码补齐,否则不运行。
'"onblur="alert(/1/)"type="text"//'"type="hidden">
源码分析,也没什么。就是注入的头部变成了cookie,再就是注意前面的单双引号补全即可。