新人手册之XSS

1 XSS详解

1 1 xss简介

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括JavaVBScriptActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

1.2 xss原理

XSS漏洞产生的主要原因是由于程序对输入和输入的控制不够严格,导致构建的恶意代码输入后,在前端浏览的时候被当作有效的代码解析执行从而产生危害。

1.3 xss危害

XSS主要有以下危害:

  1. 网络钓鱼,盗取各种用户账户。
  2. 窃取用户的cookies资料,从而获取用户隐私信息。
  3. 弹出广告页面,获取相关利益。
  4. 劫持用户会话,执行任意操作。
  5. 传播蠕虫病毒。

1.4 xss发生及挖掘

1.4.1 xss发生过程

例如:<input type="text" name="address1" value="value1from">**
当用户输入不是正常想要输入的内容,而是输入一串代码:”/><script>alert(document.cookie)</script>
变成:<input type="text" name="address1" value=""/><script>alert(document.cookie)</script>“>**
从而代码就会执行。

1.4.2 xss挖掘

参考链接:https://www.cnblogs.com/csnd/p/11807592.html

1.4.2.1黑盒测试

通过查找一切用户可以输入并且控制输出到页面代码中的地方,例如:URL中的参数、URL链接、表单、输入框、评论区、个人信息修改等。
高风险:评论区、留言区、个人信息修改、订单信息等
中风险:站内信、通信、私信、反馈等。
低风险:搜索框、URL、图片属性等。

1.4.2.2 白盒测试

关于XSS的代码审计主要就是从接收参数的地方和一些关键词入手。
PHP中常见的接收参数的方式有$***GET、$*POST、$_REQUEST等等,可以搜索所有接收参数的地方。然后对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和html编码等处理。
也可以搜索类似echo这样的输出语句,跟踪输出的变量是从哪里来的,我们是否能控制,如果从数据库中取的,是否能控制存到数据库中的数据,存到数据库之前有没有进行过滤等等。
**大多数程序会对接收参数封装在公共文件的函数中统一调用,我们就需要审计这些公共函数看有没有过滤,能否绕过等等。

1.5 xss分类

根据xss漏洞的形式可分为:反射型、存储型、DOM型。

1.5.1 反射型

1.5.1.1 原理

反射型XSS是将用户输入的内容作为代码让浏览器对其进行执行达到攻击的目的,一般需要引诱用户访问攻击者构建的URL。这种类型的攻击指发生在客户端上,并且需要访问带有恶意的参数特制的URL,所以也称之为非持久型XSS。

  1. 攻击者构造了一个包含恶意字符串的URL并把它发给受害者。
  2. 攻击者诱使受害者发起这个URL请求。
  3. 网站在响应中引入这个恶意字符串。
  4. 受害者浏览器执行响应中的恶意脚本,将受害者的cookies信息发给攻击者服务器。

1.5.1.2攻击位置

用户登录入口、网站搜索框等。

1.5.1.3案例

这里需要注意的是在这个提交框中存在限制长度数值,可以点击提交框然后右击检查,把数值调大就可以了。然后在输入框内输入<script>alert(1)</script>,然后点击提交。
图片[1]-新人手册之XSS-棉花糖网络安全圈
图片[2]-新人手册之XSS-棉花糖网络安全圈
当然这里其实可以自行观察URL,其实当什么都不输入的时候点击按钮会出现message=&submit=submit,而且message后面就是我们输入的内容,如果不想修改限制长度,而且限制长度刷新后就需要重新设置,那么可以直接在URL上修改,最后就是http://192.168.10.150/pikachu/vul/xss/xss_reflected_get.php?message=<script>alert(1)</script>&submit=submit

1.5.2 存储型

1.5.2.1 原理

存储型XSS是将攻击脚本永远嵌入某一个页面中,,当用户访问的时候就会触发执行,从而用户受到相关的攻击。并且该类型的攻击主要发生在服务端,所有用户访问该页面都将受到相应的攻击,所以也称之为持久型XSS。

  1. 攻击者利用网站的一个表单,将恶意字符串插入到网站数据库中。
  2. 受害者向网站请求页面。
  3. 网站在响应中引入恶意字符串,并把它发给受害者。
  4. 受害者浏览器执行响应中的恶意脚本,并把受害者的cookies发给攻击者服务器。

1.5.2.2 攻击位置

论坛、博客、留言板、评论区等交互区。

1.5.2.3案例

在评论区输入<script>alert(1)</script>后,点击提交按钮。
图片[3]-新人手册之XSS-棉花糖网络安全圈
当下次访问页面的时候就会自动执行,先执行再跳转至正常界面。

1.5.3 DOM型

1.5.3.1原理

DOM全称Document Object Model,是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。由于DOM型XSS不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,大部分属于反射型。

  1. 攻击者构造一个包含恶意字符串的URL并发给受害者。
  2. 攻击者诱使受害者发起这个URL请求。
  3. 网站收到请求,但并没有在响应中引入该恶意字符串。
  4. 受害者浏览器执行响应中的合法脚本,导致恶意脚本被插入到页面中。
  5. 受害者浏览器执行插入到页面中的恶意脚本,将受害者的cookies信息发给攻击者服务器。

1.5.3.2攻击位置

基于DOM型的XSS漏洞是不需要与服务器端交互,它只发生在客户端处理数据的阶段。

1.5.3.3案例

在前端进行交互的时候对其进行闭合形成一个新的标签页,从而实现XSS的弹窗。

1.6 XSS攻击常用标签

1.6.1 <scirpt>

示例:<scirpt>alert(“xss”);</script>

1.6.2 <img>

图片加载错误时触发
示例:
鼠标指针移动到元素时触发
示例:
鼠标指针移出时触发
示例:

1.6.3 <a>

示例:qq
示例:test</a>

1.6.4 <input>

按下按键时触发
示例:<input type="text" onkeydown="alert(1)">**
按下按键时触发
示例:<input type="text" onkeypress="alert(1)">**
松开按键式时触发
示例:<input type="text" onkeyup="alert(1)">**
竞争焦点,从而触发onblur事件
示例:<input autofocus>**

1.6.5 <style>

示例: