跨站脚本漏洞测试流程
1.在目标站点找到输入点,比如查询接口,留言板等;
2.输入一组“特殊字符+唯一识别字符”,点击提交后,查看返回的源码,是否有做对应的处理。
3.通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行JS代码的条件(构造闭合);
4.提交payload,成功执行则存在xss漏洞。
GET与POST的区别
数据提交方式:
GET:通过URL以查询字符串的形式提交数据。数据附加在URL后面,用“?”分隔URL和传输数据,参数之间用“&”相连。这种方式使得数据对用户和服务器都是可见的,并且由于URL长度有限制(虽然现代浏览器的限制较高,但仍然存在),GET方法提交的数据量也有限制。
POST:通过HTTP消息体(即请求体)提交数据。这种方式对用户不可见,且没有数据量的限制(虽然实际上也受到服务器和浏览器配置的限制,但远大于GET方法)。
网站链接:Get the pikachu
反射型xss(get)
由图我们可以看到本题网页中存在一个输入框可以进行交互
构造payload:
<script>alert("hello")</script>
输入时我们可以发现文本框的字符数发生了限制,我们可以:
1.在url中直接输入构造好的payload(输入kobe后url会反馈一个kobe值,用已经构造好的payload代替那个kobe的反馈值)
2.get→post:在前端源码中直接修改被设定的字符长度(20→200)
反射型xss(post)
根据提示我们可以知道(也可通过暴力破解来得到本题中的账号密码)username=admin;password=123456;
成功登录后我们可以看到与题目一一样的网页页面,此时我们在输入框中直接输入构造好的payload
可以发现网页会直接跳出弹窗
存储型xss
打开页面后我们可以看到有很多弹窗出现
在输入框中直接输入payload,并且切换页面重复此操作我们可以发现输入进去的payload一直会显示在页面上
这说明我们输入的语句已经被存储在数据库中
DOM型xss
打开网页在输入框中输入1111进行测试,我们可以发现下面蓝色字体处的跳转页面显示无法访问
查看源代码可以知道,我们需要在此处构造一个闭合来实现弹窗
我们需要将 href
属性设置为空字符串(''
),来防止链接在点击时执行默认的跳转行为
并使用一个onclick事件与alert函数来实现窗口的弹窗(onclick
事件处理器是一个常见的攻击向量,它允许攻击者向受害者的浏览器中注入并执行恶意脚本。onclick
是 HTML 中的一个事件属性,用于指定当元素被点击时应该执行的 JavaScript 代码)
构造payload:
' onclick="alert('hello')">
输入构造好的payload再点击蓝色字体进行跳转我们就可以得到固定内容的弹窗
DOM型xss-x
打开网页在输入框中输入1111进行测试,我们可以发现下面蓝色字体处的跳转页面会跳转出一个新的无法访问的链接,并且我们可以发现在url中我们可以直接观察到自己输入进去的text内容
与上题步骤相同我们查看源码
构造payload
' onclick="alert('hello')">
将herf闭合,并使用onclick事件与alert函数来实现窗口的弹出
根据第四第五题我们可以认为DOM型XSS是一种广泛存在的、基于DOM操作的XSS攻击类型,而XSS-X可能是一个更具体、更特定的概念,它可能包含DOM型XSS的某些特点,也可能具有自己的独特之处。