Xss-labs靶场通关

Xss-labs靶场通关

  • XSS前言
  • level1
  • level2
  • level3
  • less4
  • less5
  • less6
  • less7
  • less8
  • level9
  • level10
  • level11
  • level12
  • level13
  • level14
  • level15
  • level16
  • level17
  • level18

XSS前言

Xss-labs靶场通关_第1张图片

level1

我们来看看第一关,看一下源代码

<!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>
<h1 align=center>欢迎来到level1</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "

欢迎用户".$str."

"
; ?> <center><img src=level1.png></center> <?php echo "

payload的长度:".strlen($str)."

"
; ?> </body> </html>

观察源代码可以看到变量$str,GET了一个变量,并没有做什么过滤,可以在这里进行XSS注入

http://127.0.0.1/xss-labs-master/level1.php?name=<script>alert(1)script>

第一关完成了

level2

首先我们还是先看一下这一关
Xss-labs靶场通关_第2张图片
我先尝试在搜索框注入,但是好像没啥用
Xss-labs靶场通关_第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="level3.php?writing=wait"; 
}
</script>
<title>欢迎来到level2</title>
</head>
<body>
<h1 align=center>欢迎来到level2</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "

没有找到和".htmlspecialchars($str)."相关的结果.

"
.'
.$str.'">
'
; ?> <center><img src=level2.png></center> <?php echo "

payload的长度:".strlen($str)."

"
; ?> </body> </html>

可以看到有一个函数htmlspecialchars()
Xss-labs靶场通关_第4张图片
我们再看一下网页的源代码
Xss-labs靶场通关_第5张图片
可以看到在

标签之中的恶意代码被编码了,其中<、>都被编码成了html字符实体。可以知道是函数htmlspecialchars()在服务器端对keyword参数的值进行了处理,往下看可以看到插入到value参数值中的恶意代码并没有被编码而是直接原样返回的。但是问题是这里的js代码在标签属性值中,浏览器是无法执行的。
既然上面的恶意代码被编码了,那么只能从属性值中的恶意代码处进行突破了。要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合就可以了。
操作如下:

http://192.168.92.157/xss-labs-master/level2.php?keyword="><script>alert('xss')script>//


可以看到成功执行了,这关也成功的注入了,看一下网页源代码
Xss-labs靶场通关_第6张图片
从图中可以看出,在

标签中的恶意代码依然被编码了。但是在下方标签中我们提交的代码成功的对引号和标签进行了闭合,这样浏览器就能成功执行js代码了。在我们构造的恶意代码中最后的//是为了将后面的">注释掉。

<input name=keyword  value=""><script>alert('xss')script>//">

level3

直接看一下源代码,现在value参数值也被htmlspecialchars函数检测了一遍,第二关的方法不能用了

<!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 "

没有找到和".htmlspecialchars($str)."相关的结果.

"
."
"
; ?> <center><img src=level3.png></center> <?php echo "

payload的长度:".strlen($str)."

"
; ?> </body> </html>

发现过滤了很多,像<,>,=这些都被过滤了,尝试了很多都没能成功。
这里get到一个新的知识点
通过标签的一些特殊事件来执行js代码
payload:

level3.php?keyword='οnfοcus=javascript:alert('xss') > //

输入payload的时候,并没有以往的成功的弹窗跳出来
Xss-labs靶场通关_第7张图片
这是因为onfocus事件的特殊性造成的

onfocus 事件在对象获得焦点时发生。
onfocus 通常用于 <input>, <select>, 和<a>.

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

less4

看一下这一关的页面
Xss-labs靶场通关_第8张图片
我这边尝试用第三关的方法去注入,但是失败了,然后我们看一下页面源代码,发现第三关的单引号变成双引号了
Xss-labs靶场通关_第9张图片
这下我们改成双引号注入
Xss-labs靶场通关_第10张图片
XSS注入成功
Xss-labs靶场通关_第11张图片

less5

我们来看一下第五关
Xss-labs靶场通关_第12张图片
尝试一下最简单的XSS语句,发现有过滤
Xss-labs靶场通关_第13张图片
尝试第三第四关的方法,发现也有过滤
Xss-labs靶场通关_第14张图片
此处既然无法通过

你可能感兴趣的:(xss,php,web安全)