XSS

单引号 双引号 尖括号(万能闭合方法)闭合前面的数据+xss攻击代码

使用:在url带参数比如id=1的后面接上xss攻击代码,刷新出现弹窗

要是浏览器限制输入长度,右键浏览器页面修改数值

1
2
3
4
5
6
‘“><script>alert(123)</script>
‘“><script>alert(”xxx“)</script> #字符加双引号
-script #javascript语言
-alert #弹窗的函数,如果浏览器执行会弹窗输出内容123

只要有弹窗就存在xss漏洞

什么是XSS

  • xss跨站脚本攻击,xss属于客户端攻击,也可以借助管理员权限获取网站的控制
  • xss攻击最终目的是在网页中嵌入恶意脚本代码,一般为javascript语言

XSS原理

  • 程序对参数的输入和输出控制不严格,导致攻击者精心构造的脚本输入后,在输到前端时被浏览器当作有效代码解析执行【xss弹窗】从而产生危害

XSS分类

  • 反射型:插入的数据(xss攻击代码)不会保存在数据库里,一次性的,刷新浏览器就没有了,只是把输入的数据反射给了浏览器

  • 储存型:插入的数据会被永久保存在数据库里,刷新浏览器还有

  • DOM型:浏览器的DOM节点产生的,基本没什么危害,不与后台服务器产生数据交互,通过前端的DOM节点形成xss漏洞

    • <a href='#' onclick="alert(123)">what do you see?</a>
      点击 what do you see? 会出现123弹窗
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      48
      49
      50
      51
      52
      53
      54
      55
      56
      57
      58
      59
      60
      61
      62
      63
      64
      65
      66
      67
      68
      69
      70
      71
      72
      73
      74
      75
      76
      77
      78
      79
      80
      81
      82

      #### XSS危害(xss能干什么)

      - `网站挂马`
      - `劫持用户cookie`
      - `框架钓鱼`
      - `监视键盘记录`

      劫持用户cookie

      - 渗透测试人员只输入弹窗攻击代码弹个窗口证明存在xss漏洞就行了
      - 红队就要输入能盗取cookie信息的攻击代码,使用网上在线xss平台也可以自己搭建,使用平台提供的盗取cookie攻击代码,插入到存在xss漏洞的地方,当用户点击存在xss漏洞的页面,就会触发盗取cookie,发送到xss平台。利用:在登录页面bp抓包,把劫持到用户的cookie信息粘贴到bp的cookie头里=可以用别人的身份直接登录。cookie信息=用户身份验证

      框架钓鱼

      - 需要做一个钓鱼页面,在存在xss漏洞的地方插入攻击代码,src=钓鱼页面,用户点击跳转至钓鱼页面输入提交的内容都会获取到

      网站挂马

      - 现在成功率极低,浏览器限制。在网站的Web页面中插入`网马`,用户在访问被挂马的网站时也会访问黑客构造的网马,网马在被用户浏览器访问时就会利用浏览器或者相关插件的漏洞,下载并执行恶意软件。网马本质就是一个特定的网页,这个网页包含了攻击者精心构造的恶意代码,这些恶意代码通过利用浏览器(包括控件、插件)的漏洞,加载并执行攻击者指定的恶意软件(通常是木马)

      键盘记录

      - 插入键盘监视脚本

      #### XSS可能出现的地方

      - 只要用户能输入的地方都有可能出现xss漏洞,登录、注册、邮箱、搜索

      - url带参数的地方,有输入输出

      #### XSS测试流程及工具

      - 见框就插
      - APPscan、AWVS、burpsuite等

      #### XSS与SQL的区别

      - xss不与数据库产生交互,sql与数据库产生交互

      #### XSS过滤了script标签怎么绕过

      - 使用其他标签 img、svg、a、p、div、input、select、form、object

      #### XSS括号被过滤了绕过

      - 使用`throw`绕过

      #### XSS尖括号被过滤绕过

      - HTML实体编码

      #### `弹窗函数alert过滤了绕过`

      - 使用其他函数 `prompt`、`confirm`

      #### 单引号被过滤了

      - 直接script:alert(123),不带其他参数符号(特殊情况)

      #### 单引号尖括号都被过滤了

      - 也有可能产生xss,在参数给变量的时候,变量输出的时候给了其他标签里面的话,是可以被执行的

      #### XSS绕过

      > `大小写`、`双写`、`编码`、`拼凑`、`换HTML标签`、`注释干扰`、`js前端输出绕过`

      编码:html实体编码,十进制,十六进制、url编码、js、unincode编码、base64编码、ascii编码

      HTML标签:img、svg、a、p、div、input、select、form、object

      拼凑:<sc<script>ript>alert('你打篮球像oldboy')</scr<script>ipt>

      js前端绕过:在前面加字符闭合就行了 abc123‘><script>alert(123)</script>

      详:https://github.com/BaizeSec/bylibrary/blob/main/docs/%E9%80%9F%E6%9F%A5%E8%A1%A8/sql%E6%B3%A8%E5%85%A5%E7%BB%95%E8%BF%87%E9%80%9F%E6%9F%A5%E8%A1%A8.md

      #### htmlspecialchars()函数的作用

      - `htmlspecialchars() 函数把一些预定义的字符转换为HTML实体。`

& (and号) 变为 &amp
“ (双引号) 变为 &quot
’ (单引号) 变为 &#039
< (小于) 变为 &lt

(大于) 变为 &gt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37

#### XSS常规防范

XSS防御的总体思路是:`对输入进行过滤,对输出进行转义`

过滤:根据业务需求进行过滤,比如输出点要求输入手机号,则只允许输入手机号格式的数字。
转义:所有输出到前端的数据都根据输出点进行转义,比如输出到html中进行html实体转义,输入到js里面的进行js转义

#### `跨站跟踪攻击即CST攻击`

- 是一种利用 XSS、HTTP、TRACE 功能进行行攻击的方式。
- 浏览器有一个安全策略,通过设置cookie的httponly属性,这样客户端就不能通过document.cookie访问cookie,即使有XSS漏洞,也不能盗取cokie,这时候就可以利用 HTTP TRACE 方法来获取用户cookie

##### `实战`

1. BP抓包
2. 修改get/post请求为trace,
3. 修改请求包中任意字段,例如cookie字段,插入XSS代码
4. 修改响应包中显示类型,将Content-Type:message/http,改为Content-Type:text/html Cookie
5. 发送请求后页面就会弹出代码内容了

#### 同源策略

- 禁止页面加载或执行与自身来源不同域的任何脚本即不同域之间不能使用JS进行操作,`比如,x.com域名下的js不能操作y.com域名下的对象`、
- 解决了,a站点js不能操作b站点js内容

#### 要想网站不受同源策略限制

- 在程序员写代码的时候 `Access-Control-Allow-Origin` 设置为 `*` 既允许所有人访问

#### 跨域标签加载资源`不受同源策略限制的有`

```bash
<`script` src=".."> #加载本地js执行
<`img` src=".."> #图片
<`link` href=".."> #css类
<`iframe` src=".."> #任意资源

为什么要有同源策略

  • 比如一个恶意网站的页面通过js嵌入了银行的登录页面(二者不同源),如果没有同源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码

跨域访问(浏览器)

同域:协议 主域名 端口 都要相同

不同域:协议 主域名 端口任意一个不同就是不同域

跨域:不同域之间的数据操作叫做跨域访问,这是浏览器自身安全的机制,不同域之间的数据操作时不允许的。

CORS跨域资源共享漏洞
  • 跨域资源共享可以放宽浏览器的同源策略,可以通过浏览器让不同的网站和不同的服务器之间通信,当服务开启CORS功能,如果响应包返回的报文头Access-Control-Allow-Credentials为true时,攻击者可以利用该配置缺陷创建一个特殊的JavaScaript脚本去发送CORS请求,从而窃取用户的敏感数据。

  • 验证:bp抓包、在请求体里添加一个请求头:Origin:http://随意网址。看响应包里有没有 Access-Control-Allow-Credentials=true