返回顶部

xss-labs闯关详细流程

一、准备工作

下载安装好phpstudy。运行phpstudy,Apache和MySQL绿灯亮起为正常。

下载并解压xss-labs文件。在phpstudy界面点击其它选项菜单,选择网站根目录,将解压好的xss-labs文件放入。

二、运行xss-labs靶场

在浏览器网址中输入localhost/xss-labs/index.php展示欢迎网页。

点击图片进入第一关。

三、开始闯关

1.第一关

 

可以发现它是向服务器提交了一个name参数,值为“test”。

从页面显示来看,将neme参数的值显示在了页面上,并且显示了name参数值的字符长度。

我们直接将name参数在地址栏中重新赋值:

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

来测试一下。发现成功弹窗。

接下来,右键检查,查看源代码。来看它的工作原理。

我们可以看到它将name的参数值,插入到了<h2> </h2>标签之间,由于服务器端对于提交的敏感字符有没有过滤,所以这里直接在name参数中赋值的恶意代码被执行,出现了XSS弹窗。

在次检查源代码。查看我们写入的弹窗在网页中是如何显示的。

 可以看到服务器是将我们的恶意代码原封不动的返回了,浏览器把它当成了JS语句运行了。

我们再来看一下服务端对参数进行的处理。

 从代码中看出,服务器将获得的name参数的值赋值给str变量,又将str变量直接插入到<h2> </h2>标签之间。数据不做任何处理,并且这个参数的值还是可控的,所以出现了反射型xss漏洞。

2.第二关

 先直接往搜索框中输入测试代码。<script>alert('xss')</script>

并没有出现弹窗。

检查网页源代码,分析是哪里出了问题。

<h2></h2>中的语句没有被当做语句执行,可能是后端对数据进行了处理。

 但是我们发现value吧红框部分作为了自己的值,导致我们的语句缺失了前半部分。

所以我们奖value闭合掉就能解决,并且将后面的”>用//给注释掉。

插入如下语句:

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

成功弹窗。

我们再查看服务端对参数进行了哪些操作,导致<h2>中的语句失效。

 服务器端用htmlspecialchars()函数对keyword参数的值进行了处理。<和>被编码成了html字符实体。

但<input>的value值是没做处理直接拿过来用的,所以闭合之后可以成功弹窗。

 

posted @ 2022-01-21 10:48  北辰、  阅读(755)  评论(0)    收藏  举报