渗透学习-靶场篇-XSS-labs(持续更新中)
文章目录
- 前言
- 一、XSS-labs下载与安装
- 二、靶场攻略
- level 1
- level 2
- level 3
- level 4
- level 5
- level 6
- level 7
- level 8
- level 9
- level 10
- level 11
- level 12
- level 13
- level 14
- level 15
- level 16
- level 17
- level 18
前言
在进行学习玩XSS的大部分基础知识后,以及初步完成一些简单的XSS测试后。接下里让我们开始对xss-labs进行攻略吧!! 不过需要注意的是,对于xss-labs我们只需大致了解一些思路即可,因为实战中,一般很少有这种弯弯绕绕的地方,不过可能在CTF中倒是会比较常见。
一、XSS-labs下载与安装
使用集成环境phpstudy。
xss-labs下载
下载后,直接解压到网站的根目录下就可以直接运行了!
二、靶场攻略
level 1
打开页面后,出现如下图,我们可以仔细观察到在url处有个参数name 以及 下面的payload长度4 刚刚好符合test的长度,因此,我们可以大致判断这里就可以进行xss的注入。
然后,我们在参数name下输入payload:
<script>alert(1)</script>
完成! 注意蛤,这里之所以不会弹出1 是因为xss-labs进行了检测,当我们能够正确注入时,xss-labs就会将弹出的内容进行替换!
level 2
这里,我们按照上述思路直接输入xss代码的话,是无法进行执行的。然后,我们来查看以下页面的布局,看看是否有其他的思路可以进行绕过:
由箭头,我们可以看出对应的关系!!! 这里,我们在输入框输入的xss语句虽然没被执行,但是其还是被带入到了value中的。
因此,我们可以试想一下,这里既然已经嵌入在value= “ … ” 之中了,那我们是否可以利用闭合以及onclick属性进行点击执行呢?让我们动手试试看:
"onclick='alert(1)'>
通过查看页面布局,我们发现这里确实是已经构造完成了! 但是由于onclick属性的问题,我们需要在这里点击一下输入框,才能够触发这个漏洞:
完成,进入第三关!
level 3
我们仔细看一下,图中数据填入的地方。我们可以发现有两个问题:1、我们输入的> < 这两个符号都会被进行实体化;2、这里闭合回路的符号多出来了一个 "
然后,让我们在看一下第三关的源代码:
使用了htmlspeialchars 函数将特殊字符转化为html实体。
除此之外,发现这里确实利用了 ’ '来进行闭合回路,且对于输入的字符中又进行拼接了" " 。所以说我们那边闭合时才会多出一些符号。 那么要如何进行绕过呢?
这里我们需要清楚一点的是,在源代码中value的范围应该是 ’ … ’ 这之间的 , 这里由于" " 将会和输入的字符串一起作为value值的一部分。我们想要构造起能够执行的onclick,就必须把value的值进行闭合了,因此这里我们可以先输入一个’ 来进行将value的值闭合。。。 但是由于后门还会有一个’未进行处理,因此我们可以直接把这个当作闭合onclick的值的符号即可,也就是我们只输入了onclick = 'alert(1)
'οnclick='alert(1)
成功!为方便理解,我们在看一下输入后的页面源代码:
确实是闭合上了!! 至于这里连接的" 为什么不见了? 好吧我也不清楚,我猜测是html语言自己忽略了(如果有知道的欢迎指出) 反正呢,这里就是按着源码就可以直接用’ 进行将两边都闭合起来!!!
level 4
第四关,利用替换函数直接就将<>换成空了:
然后,查看一下源代码:
emmm,和上一关一样的意思。。。将上一关payload里的’ 换成"即可:
"οnclick="alert(1)
level 5
我们发现这里貌似将script进行了替换! 为了方便理解,让我们直接看源代码吧:
这里,php源码中首先进行了将所有都转为小写的操作。然后,在将script进行替换的操作!!! 因此,这里我们无法使用script这个标签了,但是我们可以使用其他的标签,比如超链接标签等,以下我们就来使用这个标签看看:
"><a href='javascript:alert(1)'>
输入完后,点击旁边那个蓝色的按钮就可以实现超链接跳转:
level 6
第六关,我们发现还是对scriipt进行了替换,但是当我们转化一下大小写发现好像并不会过滤,因此我们可以直接利用大小写以及闭合进行绕过:
"><Script>alert(1)</Script>
level 7
这一关,为了学习的方便,我们直接看看源代码:
我们发现这一关将很多关键词都进行了替换!!! 看似毫无办法,但是这里却隐藏着一个逻辑上的bug。。这里由于,代码中的替换只执行了一次,未进行循环的的检测与替换,因此啊我们可以直接就利用双写进行绕过测试了:
"><scrscriptipt>alert(1)</scrscriptipt>
level 8
我们首先输入一串xss的脚本语句,然后发现呢!我们输入的东西最后都拼接到下面友情链接处了,因此这里我们只需要写入javascript:alert(1),就可以利用超链接进行跳转!
但是呢,由于代码中进行了替换,因此直接写入是不可取的!
于是,这里我们采取Unicode编码看看?
javascript:alert(1)
然后,再点击刚刚那个链接按钮:
level 9
我们先看看源码:
因此,这一关需要加上http:// (说实话这玩意,实战怎么可能有??? 不看代码这怎么想得出来???)
javascript:alert(1)//http://
然后此时就可以绕过了:
level 10
来到这一关啊,我们一打开,首先发现的是这里没有输入框了!!! 既然如此,我们可以先看看页面的源代码布局,以此来看看是否有隐藏的变量在其中?
从图中可以看出,确实是有的!!! 那我们看看是否可以利用这个参数作为xss的切入点呢?
keyword=well done!&t_sort=" type="text" οnclick="alert(1)"
okok,注入完成!
level 11
这里,我们先查看一下页面源代码:
发现这有一个ref的变量,那么这里我猜想这可能似乎是数据包里的referer 。为了验证一下我的猜想,我们先打开源代码进行查看一下:
发现这里确实是读取了这个变量! 然后具体分析一下这个源代码中存在的问题:这里一共接收了三个参数,而其中的keyword与t_sort这两个参数呢,被进行了html实体化的处理,因此这里不太好进行注入。而,我们发现在这的referer变量却没有做这些过滤,因此可以初步断定这里存在着注入点!
referer: " type="text" οnclick="alert(1)"
然后就可以发现,我们已经注入成功了:
level 12
继续按上述的方法,进行查看一下页面的源代码:
这里啊,很明显是读取了user-agent的信息,因此,可以直接判定这里很可能存在着注入点:
User-Agent: " type="text" οnclick="alert(1)"
注入完成!!!
level 13
同理,这里我们直接查看:
大概猜这个cook变量应该是cookie的缩写:
然后,我们发现这里的cookie确实是存在着一个变量user,那我估计大概率就是这里,不管怎么样先试试看!
成功成功!
level 14
这里一开始呢,我尝试了很多次都没有成功。然后经过一番探查发现,这一关想考的是图片EXIF注入,也就是说当我们上传一个文件到本关卡中时,本关会读取图片的属性并写入到页面上,因此,我们就可以通过在图片的属性里写入脚本语句代码来进行XSS的注入!!
这里我主要参考了博主:3hex 的文章,然后利用该博主的方法建立了一个页面以此来进行模拟原本的关卡,在此十分感谢该博主大大!!! 原文链接在此处:[靶场] XSS-Labs 14-20 欢迎大家查看原博文!
好了,接下来我们先写入php代码:
<?php
echo '
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>欢迎来到level14</title>
</head>
<center>
<form action="level14-test.php" method=POST enctype=multipart/form-data>
<label for=file>文件名:</label><input type=file name=file id=file><br>
<input type=submit name=submit value=提交></form></center></html>';
try{
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp); // 获取文件后缀名
echo $_FILES["file"]["type"];
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
# && ($_FILES["file"]["size"] < 204800) // 小于 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
}
move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);
}
else
{
echo "非法的文件格式";
}
$file = $_FILES["file"]["name"];
$exif = exif_read_data($file, 0, true);
echo "<h4>[ ".$file." ]的EXIF信息:</h4>";
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo "$key.$name: $val<br />\n";
}
}
}catch (Exception $e){
echo $e;
}
?>
然后将该代码放入xss-labs的文件中,并命名:level14-test.php (注意:这里的文件名一定要和上面代码中跳转的文件名一致,否则不成功!)
然后,我们还需要开启php 的 exfi模块:
此时,就已经成功了!让我们访问看看,并上传一个文件看看:
okok,此时我们开始对图片进行写入脚本了:
然后,再上传一下看看:
成功!!!
level 15
这一关依旧有问题。。。。我们需要进行更正一下:本关考察的是angularJS包含,我们修改地址为:https://cdn.staticfile.org/angular.js/1.4.6/angular.min.js:
然后,直接输入网址:http://192.168.10.129:8080/xss-labs/level15.php 就可以进入第15关了:
然后看到图片底下这里有个src 的属性来加载图片的,emm,而且在之前的能够错误页面上,我们也能看出写端倪来:
因此,感觉这里应该是存在注入点!写入一些看看:
这里的ng-include相当于php的include函数,所以我们包含一个有XSS漏洞的URL就可触发这里的XSS。 于是进行如下的构造:
src='level1.php?name=<a type="text" href="javascript:alert(1)">'
点击下面那个按钮即可:
或者直接写入:
src='level1.php?name=<img src=yuan οnerrοr=alert(1)>'
level 16
当我们输入 语句后,发现这里貌似将空格进行了替换!!
那么,让我们仔细的来看看源代码中的内容吧:
发现这里确实是被进行了替换。。我们可以使用以下%0a来代替空格字符! 进行rul的编码绕过:
keyword=<img%0asrc=yuan%0aonerror=alert(1)>
level 17
这一关主要考查的是Flash XSS。 因此这里,我们利用其特性与闭合回路的思想进行xss注入:
level17.php?arg01=a&arg02=" onmouseover=alert(1)
注意这一关,是需要能够识别起flash插件的浏览器,比如本人在火狐上咋样都不可以,在谷歌上却成功了!!
level 18
与上面是同理的:
由于后面两关涉及过深的flash,已经超出目前我所学,暂时我就先不做了!