XSS Challenges
stage 1(无过滤的 XSS 注入)
📌注:提示中的内容需要选中才会显示
document.domain #该属性是一个只读的字符串,包含了载入当前文档的 web 服务器的主机名。
在规定位置可以执行 js 代码
首先看一下页面的逻辑结构
在输入框里面输入内容,下面会返还输入内容
看回显位置的时候,不要关注在页面有没有回显
可以用 BP 抓包,也可以用页面的检查
用 BP 抓包的时候,切记随机字符串只能用一次,抓到的包最好不要放行,可以做一次,刷新一次页面
搜索框中进行搜索信息,在页面下方会显示出搜索内容
按 F12 分析源代码
测试是否存在 XSS 可以直接在目标页面测,也可以自己创一个页面测
直接在目标页面测
输入<script>alert(document.domain);</script>
F12 看一下它在代码中的位置
<script>alert(document.domain);</script>
显示我们的结果,说明已经注入成功
在规定位置不能执行 js 代码
这个时候我们要想办法解决,可以联系到 sql 注入中的闭合,利用闭合将过滤的地方闭合,然后换个位置进行注入
<b>"1"</b>
如果这串js 代码中 1 不能正常执行,我们可以加一个"引号,闭合前面的",也就是<b>"1" xxxxxx "</b>
,这样我们就可以在里面写入我们想注入的内容。
再将代码改为<b>"1"</b> xxxxxx "</b>
这样我们输入的 js 代码就在 B标签之外
例如
输入代码freenice"</b><script>alert(document.domain);</script>
这个时候发现已经不在 B 标签里面了,而是在外面
细节分析
在外面执行完 js 代码后,发现<b>"1"</b> xxxxxx "</b>
中最后面的闭合没了
其中"变为文本信息也就是"``"``"
在 F12中,只有中间的双引号可以点击
</b>
是标签,会被系统判断为无用信息,自动给去掉。(浏览器的机制)
stage 2(属性中的 XSS 注入)
1、使用闭合 input 标签方式进行注入
首先我们可以先在输入栏里输入 freenice
发现输入和回响的位置是一个地方
通过检索页可以发现,freenice 这个地方不能执行 js 代码
可以输入一串 js 代码
<script>alert(document.domain);</script>
xuegod 的位置在 input 中的 value 属性当中。当我们注入 JavaScript 代码到 value 中时,页面加载并不会触发执行代码,因为我们输入的信息被当做文本信息存在 value 中。所以我们需要闭合 value将 JavaScript 代码插入到属性外面。
原代码:<input type="text" name="p1" size="50" value="freenice">
使用">闭合标签并插入 JavaScript 代码,在输入框中,输入以下内容:
freenice"><script>alert(document.domain);</script>
输入后代码结果如下:
<input type="text" name="p1" size="50" value="freenice"><script>alert(document.domain);</script>``">
[^注释1]
2、在 input 标签属性中注入事件
HTML 中的事件概述:
对于 HTML 属性事件的简单介绍
在现代浏览器中都内置有大量的事件处理器。这些处理器会监视特定的条件或用户行为,例如鼠标单击或浏览器窗口中完成加载某个图像。通过使用客户端的 JavaScript 可以将某些特定的事件处理器作为属性添加给特定的标签,并可以在事件发生时执行一个或多个 JavaScript 命令或函数。
例 1:onmouseover 事件:当鼠标指针移至元素之上时运行脚本
输入以下代码:
" onmouseover=alert(document.domain)>
使用方式很简单,使用双引号闭合 value 属性,添加事件 onmouseover 当鼠标移动到添加事件的元素中时,执行 JavaScript 代码 alert(document.domain)弹出域名
输入<input type="text" name="p1" size="50" value="freenice" onmouseover=alert(document.domain);"">
可以看到当鼠标移动到输入框会自动触发 XSS,所以事件就需要用户手动触发才能够被执行。
stage 3(选择列表中的 XSS 注入)
查看页面结构,搜索 tokyo,选中右侧搜索区域,会在下面提示搜索内容和右侧的搜索区域
Hint: The input in text box is properly escaped.
#提示:文本框中的输入已正确转义。就是第 3 题中,程序员已经加了过滤。
查看网页代码
HTML 表单用于搜集不同类型的用户输入。我们输入的信息都是以表单的方式提交到服务器。
Form 表单
代码中定了一个文本输入为 p1 然后使用 select 元素创建一个下拉列表为 p2 。
尝试在搜索框中进行 XSS 注入
输入:<script>alert(document.domain);</script>
我们注入的信息被转义成文本信息显示出来了,并没有被执行。
下面我们对选择列表进行注入
因为我们在输入时,下拉列表选项是不能进行修改的,但是我们可以使用 burpsuite 截取数据包对右侧选择列表进行注入。
开始截取,然后在火狐浏览器中输入数字 1 ,查看截取效果: