xss-labs靶场

Posted Breeze blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xss-labs靶场相关的知识,希望对你有一定的参考价值。

在线XSS-labs靶场:https://xssaq.com/yx/

靶场搭建

靶场是直接使用docker搭建的

docker pull vulfocus/xss-labs

启动靶场

docker run -p 8005:80 vulfocus/xss-labs

浏览器访问IP+8005


windows搭建

使用phpstudy_pro搭建
下载地址:https://github.com/do0dl3/xss-labs

解压文件放入www文件夹下,开启服务

浏览器访问127.0.0.1/xss-labs

level1


仔细观察看到在url栏中传了一个参数,所以在该参数处进行尝试传入其它参数


发现页面有所变化,在 “欢迎用户” 后有一个显示位能对传入的参数进行输出
构造poc

<script>alert(\'xss\')</script>


源码分析
程序将用户以GET方式提交的参数name赋给$str获取name的值,直接返回前端使用,没有对其进行过滤导致恶意代码可以在前端执行

level2

来到第二关有搜索框,直接使用第一关的poc,没有弹窗,代码原样输出

<script>alert("xss")</script>


右键查看源码发现<>都被过转义了


回到页面F12定位到搜索框,发现是<input>标签可以利用
利用:闭合<input>标签


构造poc:

"><script>alert(xss)</script>


源码分析
程序没有对value属性使用htmlspecialchars() 函数进行处理,只对<h2>处进行过滤处理
知识补充

level3


先输入字符串test进行尝试,传入的参数和搜索框的一样

查看源代码和第二关差不多

使用第二关的poc

"><script>alert("xss")</script>

没有弹窗

查看源代码,发现两处<>都被HTML实体化,可以推测这两处都使用了htmlspecialchars()函数
<input>标签无法闭合,可以绕开标签去使用新标签,<input>标签的一些特殊事件来执行js代码
使用单引号闭合属性value,添加事件执行js

poc

\'onfocus=javascript:alert(\'xss\') >

onfocusjavascript中在对象获得焦点时发生的事件,最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此点击当前页面的输入框就可以完成弹框了

源代码分析
刚刚的推理正确,这两处都使用了htmlspecialchars()函数

level4


这个和上两关类似,直接丢入poc查看

<script>alert("xss")</script>

查看源代码发现<h2>(标号1)使用了使用了htmlspecialchars()函数处理
标号2处< >被删除

很明显和第三关差不多,使用事件来触发js,唯一不同的是使用双引号闭合
poc

"onfocus=javascript:alert(\'xss\') >

填入poc点击搜索框触发事件

源代码分析
keyword参数的值赋给str变量,然后经过1处理将变量值中包含的<、>符号删除
2处对变量值进行编码处理之后显示在页面之上
最后处将去除特殊符号后的变量值插入到<input>标签的value属性值中

level5

此题和上一关卡变化不大,但不知道服务器端对其是怎么处理的,直接丢入poc查看源代码

<script>alert("xss")</script>

根据上几题第一处很明显使用htmlspecialchars()函数处理过才返回到浏览器显示的
二处可以看到<script>标签被插入了一个_(下划线)符号
可以简单的推测一下服务器在2处使用了正则匹配,匹配到<script>标签插入_符号

<script>标签无法使用,可以使用其他的标签绕过,使用事件进行绕过测试

"onfocus=javascript:alert(\'xss\') >

测试发现没有弹窗,查看源代码onfocus事件也被插入了_(下划线)符号

再次尝试其他的标签:<a>

使用新标签要先闭合<inupt>标签构造poc

"><a href=javascript:alert("xss")>xss</a>

填入poc,点击链接触发弹窗


源代码分析
1标号处GTE入参数给str,分别对on<script>进行了过滤,,过滤之后再见值传给了srt3

安全-Level3(xss-labs)

前言

安装步骤跳过,源码可去github上下载

xss-labs下载

HTML 事件参考手册

一、题目

源码如下

<!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>
<h1 align=center>欢迎来到level3</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>	    
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>
<center><img src=level3.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

二、绕过

[1]. 测试

在搜索框输入& " ' < >后发现只有单引号没有被HTML实体化


[2]. 第一处调用

php代码中的双引号是为了将html代码括起来,在实际输出内容的时候得看双引号括起来的内容

[3]. 第二处调用

[4]. 构造payload

第一处因为尖括号都被过滤了,又没有单引号,所以只能看看第二个地方
第二处只能用单引号来构造闭合,所以不能构造新的标签,只能构造<input>标签内新的属性

'属性名='alert(233)

属性名的话可以看自己需要去选择,相当于触发XSS的条件
输入了payload点击搜索之后,在输入框中一按下键盘就会出现弹窗
HTML 事件参考手册

'οnkeydοwn='alert(233)


以上是关于xss-labs靶场的主要内容,如果未能解决你的问题,请参考以下文章

XSS-Lab(XSS注入笔记1-16)

XSS-Lab(XSS注入笔记1-16)

xss-labs通关记录

Xss-labs-游戏闯关1-2

安全-Level4之属性构造(xss-labs)

xss-labs