XSS 分类

反射型 xss

又叫 非持久性 xss,攻击者通过邮件等形式将包含xss攻击脚本的代码链接发送给正常用户,用户点开链接之后服务器接收用户的请求并且进行处理,然后把带有xss代码发给用户,用户浏览器解析代码的时候就会触发xss 漏洞

GET 类型和 POST 类型的区别

  • GET 类型的请求参数会显示在url中,而 POST 类型的请求参数不会显示在url中

存储型 xss

又称持久性 xss,攻击脚本存储在目标服务器的数据中,具有更强的隐蔽性
攻击者在论坛、博客、留言板中发帖的过程中嵌入xss攻击代码,帖子被目标服务器存储在数据库中,当用户进行正常访问的时候出发xss代码

DOM 型 xss

使用 DOM 动态访问更新文档的内容、结构以及样式
服务器不会处理攻击者脚本,而是用户浏览器处理这个响应的时候dom会处理xss 代码,出发xss漏洞

cookie 是 http 协议下 服务器或者脚本可以在客户端保存的小数据,用于记录用户的一些信息,比如登录状态、购物车信息等。cookie 有些是临时的,有些是持续的,临时的经过一定时间就会失效,持续的则会一直保存在客户端

反射 xss 做法

首先我们先理解,对于网页的操作事实上是对拉取到本地的html文件进行操作,同时,如果网站有文本框,那么我们就可以在文本框内输入符合js语法的代码,提交之后浏览器就会将这段代码识别为指令而不是文本,从而运行之

pikachu 靶场相关 : 反射型

在文件vul/xss/xss_reflected_get.php 中我们可以看到 html 片段

1
2
3
4
5
if($_GET['message']=='kobe'){  
$html.="<p class='notice'>愿你和{$_GET['message']}一样,永远年轻,永远热血沸腾!</p><img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
}else{
$html.="<p class='notice'>who is {$_GET['message']},i don't care!</p>";
}

那么我们会发现它直接将 $_GET 中的 message 参数拼接到了 html 中,这就会导致文本框内容会被浏览器执行
但是作为不知道源码的黑客,我们首先应该通过如下顺序进行检查

  1. 检查文本框是否会过滤特殊字符: 如果不能输入 <script> 那么白搭,所以我们要先输入一遍< / , ( 这些字符来进行查看
  2. 发现输出处没有减少内容,所以不会缩减,那么我们就用<script>alert(1)</script> 来进行测试
  3. 提交之后确实出现了1的弹窗,说明漏洞已经找到了
  4. 那么一般盗取过程中是使用通过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) 这种方式进行破解