声明:
由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。
笔记内容来源于各类网课。
环境:
XSS Challenges Stage #3:http://xss-quiz.int21h.jp/ , Firefox浏览器,BurpSuite
一、概述
选择列表的XSS。
二、select和表单介绍
select元素可创建单选或多选菜单。
<select>元素中的<option>标签用于定义列表中的可用选项。
其中option标志中的文本表示展示的文本,option的value属性表示提交表单时的对应选择的值。
例如:
<option value='b'>a</option>
选项展示的内容时a,但是提交表单时的值为b。
HTML表单用于搜集不同类型的用户输入。
三、XSS探测过程
1. 正常的数据提交
输入数据123abc。查看到正常显示。
2. 代码审查
我们进行代码审计,这里是反射型XSS漏洞。其中数据被b标签和引号闭合,我们尝试一下闭合前面,插入脚本。
"</b>123abc
我们的数据依然别识别为文本,无法闭合标签。我们打开页面源代码。
可以看到我们的符号全部被转义,被识别为字符串,不能闭合标签。
我们分析一下网络请求。
发现我们提交后,页面发送了一个POST请求,参数1为我们输入数据,参数2为下拉框的数据。
我们查看下拉框的HTML代码。
发现没有value属性。由于option标签没有value属性,提交数据时,就默认提交option中间的文本。从刚才的正常数据返回中,可以看到除了显示我们自己提交的数据,还有下拉框的数据。我们是否可以换一个注入点,在option处注入。
我们修改option的选项内容,我们将Japan修改为JS脚本。
定位后,双击即可修改内容。
发现,修改内容是不可行的,因为修改后,会被识别为JS代码。
那我们可以再option中增加value属性,那么提交时会提交我们的JS代码。
我们再提交。JS代码成功插入,并且成功执行。
除了修改option属性value,我们还可以使用BurpSuite拦截包,将提交的p2参数修改为JS脚本。
3. 构造Payload
我们使用BurpSuite进行拦截。
Japan"</b><script>alert(document.domain);</script>
我们成功闭合了b标签,也插入了JS代码,并且执行成功。