XSS 跨站脚本攻击 Crossing Site Scripting
XSS 分类
反射型 xss
又叫 非持久性 xss,攻击者通过邮件等形式将包含xss攻击脚本的代码链接发送给正常用户,用户点开链接之后服务器接收用户的请求并且进行处理,然后把带有xss代码发给用户,用户浏览器解析代码的时候就会触发xss 漏洞
GET 类型和 POST 类型的区别
- GET 类型的请求参数会显示在url中,而 POST 类型的请求参数不会显示在url中
存储型 xss
又称持久性 xss,攻击脚本存储在目标服务器的数据中,具有更强的隐蔽性
攻击者在论坛、博客、留言板中发帖的过程中嵌入xss攻击代码,帖子被目标服务器存储在数据库中,当用户进行正常访问的时候出发xss代码
DOM 型 xss
使用 DOM 动态访问更新文档的内容、结构以及样式
服务器不会处理攻击者脚本,而是用户浏览器处理这个响应的时候dom会处理xss 代码,出发xss漏洞
Cookie 盗窃
cookie 定义
cookie 是 http 协议下 服务器或者脚本可以在客户端保存的小数据,用于记录用户的一些信息,比如登录状态、购物车信息等。cookie 有些是临时的,有些是持续的,临时的经过一定时间就会失效,持续的则会一直保存在客户端
反射 xss 做法
首先我们先理解,对于网页的操作事实上是对拉取到本地的html文件进行操作,同时,如果网站有文本框,那么我们就可以在文本框内输入符合js语法的代码,提交之后浏览器就会将这段代码识别为指令而不是文本,从而运行之
pikachu 靶场相关 : 反射型
在文件vul/xss/xss_reflected_get.php 中我们可以看到 html 片段
1 | if($_GET['message']=='kobe'){ |
那么我们会发现它直接将 $_GET 中的 message 参数拼接到了 html 中,这就会导致文本框内容会被浏览器执行
但是作为不知道源码的黑客,我们首先应该通过如下顺序进行检查
- 检查文本框是否会过滤特殊字符: 如果不能输入
<script>那么白搭,所以我们要先输入一遍< / , (这些字符来进行查看 - 发现输出处没有减少内容,所以不会缩减,那么我们就用
<script>alert(1)</script>来进行测试 - 提交之后确实出现了1的弹窗,说明漏洞已经找到了
- 那么一般盗取过程中是使用通过js代码提交之后的生成url的链接发送给别人,通过域名的知名度诱导别人点击从而获得隐私信息 (比如返回cookie)
存储型
其余步骤保持不变,对于存储型,在输入 <script> 之后每次刷新网页,都会重复 <script> 一次
DOM 形式
这种往往是对网页元素的操作了,我们对这题的网页查找 what do you see? 片段,然后就会发现这个链接的生成代码是 href= + str + ">what do you see
那么我们可以利用这个 str 搞事情,比如使用 ' onclick="alert(1)"> 来让链接定义提前结束并且进入 alert 脚本
过滤形式
对于有一些网站的textbox会过滤类似 script 字眼,那么我们就只能借用常用原件的 onmouseover, onclick 等属性进行化简,或者直接使用 javascript:alert(1) 这种方式进行破解
