Skip to content

Commit

Permalink
21/03/28
Browse files Browse the repository at this point in the history
  • Loading branch information
WindRunnerMax committed Mar 28, 2021
1 parent 30c742e commit 7320256
Show file tree
Hide file tree
Showing 63 changed files with 1,561 additions and 1,181 deletions.
6 changes: 6 additions & 0 deletions Browser/CSRF跨站请求伪造.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,9 @@
### 加入Token验证字段
` CSRF`攻击之所以能够成功,是因为浏览器自动携带`cookie`进行请求,该请求中所有的用户验证信息都是存在于`cookie`中,由此可以完全伪造用户的请求。要抵御`CSRF`,关键在于在请求中放入黑客所不能伪造的信息,并且该信息不存在于`cookie`之中。
在请求头中加入一个`Token`字段,浏览器并不会自动携带`Token`去请求,且`Token`可以携带一段加密的`jwt`用作身份认证,这样进行`CSRF`的时候仅传递了`cookie`,并不能表明用户身份,网站即拒绝攻击请求。

## 每日一题

```
https://github.com/WindrunnerMax/EveryDay
```
127 changes: 66 additions & 61 deletions Browser/CSS劫持攻击.md
Original file line number Diff line number Diff line change
@@ -1,61 +1,66 @@
# CSS劫持攻击
`CSS`劫持是一种并不很受重视的劫持方式,但是其也有一定的危害,且由于其并不一定需要依赖`JavaScript`,这使得此种攻击方式更容易实现。

## ClickJacking点击劫持
当访问某网站时,利用`CSS`将攻击者实际想让你点击的页面进行透明化隐藏,然后在页面后显示 一些东西诱导让你点击,点击后则会在用户毫不知情的情况下做了某些操作,这就是点击劫持`ClickJacking`

### iframe覆盖
假如现在我们有个贴吧,想让人关注,可以构造一个钓鱼页面,诱导用户点击,实际上攻击者想要用户点击的关注页面是个透明的,用户如果在网页端登录了贴吧,就会在毫不知情的情况下关注了贴吧,这属于危害较小的情况,若是搭配一些表单诱导用户在页面输入某些敏感信息甚至可以构成财产损失的情况。

```html
<!DOCTYPE HTML>
<html>
<meta content="text/html; charset=utf8" />
<head>
<title>ClickJacking点击劫持</title>
<style>
html,body,iframe{
display: block;
height: 100%;
width: 100%;
margin: 0;
padding: 0;
border:none;
}
iframe{
opacity:0.2;
position:absolute;
z-index:2;
}
div{
display: flex;
justify-content: space-around;
position:absolute;
top: 335px;
left: 310px;
z-index: 1;
width: 300px;
height: 26px;
}
</style>
</head>
<body>
<!-- 例子中的按钮位置是写定的,在不同分辨率下并不一定合适,应该动态确定按钮位置,但是作为一个Demo就不作过多操作了 -->
<div>那些不能说的秘密<button>查看详情</button></div>
<iframe src="https://tieba.baidu.com/f?kw=%E6%96%97%E7%A0%B4%E8%8B%8D%E7%A9%B9%E5%8A%A8%E6%BC%AB"></iframe>
</body>
</html>
```
### 防御
`X-FRAME-OPTIONS`是目前最可靠的方法。
`X-FRAME-OPTIONS`是微软提出的一个`HTTP`头,专门用来防御利用`iframe`嵌套的点击劫持攻击。
```
DENY // 拒绝任何域加载
SAMEORIGIN // 允许同源域下加载
ALLOW-FROM // 可以定义允许frame加载的页面地址
```


## CSS劫持流量
关于诱导用户点击进入网站的操作,利用`CSS`劫持也不失为一个好的思路,无论是论坛,还是邮件都有一个富文本编辑器,如果网站并未注意此种攻击方式并特殊处理,便很容易被利用。
将富文本插入一个链接,在正常情况下应该是`<a href="xxx"></a>`,假如我们为其赋予一个样式,或者将其内部包裹一个字体的样式,将样式设置为`display: block;z-index: 100000;position: fixed;top: 0;left: 0;width: 1000000px;height: 100000px;`,也是就是让链接作为块级元素充满整个屏幕,则用户无论点击页面中的任何地方都会跳转到你指定的页面,这就将流量劫持到了你的页面,若用户并未注意到`url`的改变,还可以在跳转的新页面进行钓鱼。
# CSS劫持攻击
`CSS`劫持是一种并不很受重视的劫持方式,但是其也有一定的危害,且由于其并不一定需要依赖`JavaScript`,这使得此种攻击方式更容易实现。

## ClickJacking点击劫持
当访问某网站时,利用`CSS`将攻击者实际想让你点击的页面进行透明化隐藏,然后在页面后显示 一些东西诱导让你点击,点击后则会在用户毫不知情的情况下做了某些操作,这就是点击劫持`ClickJacking`

### iframe覆盖
假如现在我们有个贴吧,想让人关注,可以构造一个钓鱼页面,诱导用户点击,实际上攻击者想要用户点击的关注页面是个透明的,用户如果在网页端登录了贴吧,就会在毫不知情的情况下关注了贴吧,这属于危害较小的情况,若是搭配一些表单诱导用户在页面输入某些敏感信息甚至可以构成财产损失的情况。

```html
<!DOCTYPE HTML>
<html>
<meta content="text/html; charset=utf8" />
<head>
<title>ClickJacking点击劫持</title>
<style>
html,body,iframe{
display: block;
height: 100%;
width: 100%;
margin: 0;
padding: 0;
border:none;
}
iframe{
opacity:0.2;
position:absolute;
z-index:2;
}
div{
display: flex;
justify-content: space-around;
position:absolute;
top: 335px;
left: 310px;
z-index: 1;
width: 300px;
height: 26px;
}
</style>
</head>
<body>
<!-- 例子中的按钮位置是写定的,在不同分辨率下并不一定合适,应该动态确定按钮位置,但是作为一个Demo就不作过多操作了 -->
<div>那些不能说的秘密<button>查看详情</button></div>
<iframe src="https://tieba.baidu.com/f?kw=%E6%96%97%E7%A0%B4%E8%8B%8D%E7%A9%B9%E5%8A%A8%E6%BC%AB"></iframe>
</body>
</html>
```
### 防御
`X-FRAME-OPTIONS`是目前最可靠的方法。
`X-FRAME-OPTIONS`是微软提出的一个`HTTP`头,专门用来防御利用`iframe`嵌套的点击劫持攻击。
```
DENY // 拒绝任何域加载
SAMEORIGIN // 允许同源域下加载
ALLOW-FROM // 可以定义允许frame加载的页面地址
```

## CSS劫持流量
关于诱导用户点击进入网站的操作,利用`CSS`劫持也不失为一个好的思路,无论是论坛,还是邮件都有一个富文本编辑器,如果网站并未注意此种攻击方式并特殊处理,便很容易被利用。
将富文本插入一个链接,在正常情况下应该是`<a href="xxx"></a>`,假如我们为其赋予一个样式,或者将其内部包裹一个字体的样式,将样式设置为`display: block;z-index: 100000;position: fixed;top: 0;left: 0;width: 1000000px;height: 100000px;`,也是就是让链接作为块级元素充满整个屏幕,则用户无论点击页面中的任何地方都会跳转到你指定的页面,这就将流量劫持到了你的页面,若用户并未注意到`url`的改变,还可以在跳转的新页面进行钓鱼。

## 每日一题

```
https://github.com/WindrunnerMax/EveryDay
```
101 changes: 54 additions & 47 deletions Browser/HTTPS加密传输过程.md
Original file line number Diff line number Diff line change
@@ -1,47 +1,54 @@
# HTTPS加密传输过程
`HTTPS`全称`Hyper Text Transfer Protocol over SecureSocket Layer`,是以安全为目标的`HTTP`通道,在`HTTP`的基础上通过传输加密和身份认证保证了传输过程的安全性。`HTTPS``HTTP`的基础下加入`SSL`层,`HTTPS`的安全基础是`SSL`,因此加密的详细内容就需要`SSL`

## 知识储备
### HTTP
`HTTP`是应用层协议,默认运行在`80`端口,是一种不安全的传输协议,经其传输的数据都是未加密的明文数据,可以被中间人攻击,获取到你的网络传输数据,这也就是尽量不要使用公共场所`WIFI`的原因。

### HTTPS
`HTTPS`是应用层协议,默认运行在`443`端口,是一种安全的传输协议,通过在`HTTP`层与运输层的`TCP`直接加入一个加密/身份验证层来保证安全传输。

### SSL
`SSL`安全套接层`Secure Sockets Layer`,位于`TCP/IP`协议与各种应用层协议之间,为数据通讯提供安全支持。`SSL`协议可分为两层:
`SSL`记录协议`SSL Record Protocol`:它建立在可靠的传输协议如`TCP`之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
`SSL`握手协议`SSL Handshake Protocol`:它建立在`SSL`记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

### TLS
`TLS`传输层安全性协议`Transport Layer Security`用于在两个通信应用程序之间提供保密性和数据完整性,其由`TLS`记录协议和`TLS`握手协议组成。`TLS1.0`即为`SSL3.0`的标准化版本,`SSL`最初由网景`Netscape`提出研发,在`SSL3.0`时由国际互联网工程任务组`IETF`进行了标准化并添加了少量机制,并更名为`TLS1.0`

### 对称加密
简单来说对称加密的加密密钥和解密密钥是相同的,对称加密的效率要比非对称加密高。

### 非对称加密
简单来说非对称加密的加密密钥与解密密钥是不同的,需要一把公钥与一把私钥,私钥不能被其他任何人知道,公钥则可以随意公开。公钥加密,私钥解密;私钥数字签名,公钥验证。

### CA
由于公钥是放在服务器的,在建立连接的过程中将公钥传输到用户,但是如何避免中间人攻击,即在传输公钥的过程中避免劫持,于是引入第三方认证权威机构`CA`,大多数操作系统的`CA`证书是默认安装的,`CA`也拥有一个公钥和私钥。任何人都可以得到`CA`的证书,其包含公钥,用以验证它所签发的证书。`CA`为服务申请者颁发证书,在`CA`判明申请者的身份后,便为他分配一个公钥,并且`CA`将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。如果一个用户想鉴别一个证书的真伪,他就用`CA`的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。证书实际是由证书签证机关`CA`签发的对用户的公钥的认证。


## 传输过程
1. 首先`TCP`三次握手建立链接,这是数据传输基础,在此之上开始`SSL`
2. 客户端首先发送`Client Hello`开始`SSL`通信,报文中包含客户端支持的`SSL`版本、随机值`Random1`、加密算法以及密钥长度等。
3. 服务器发送`Server Hello`,和客户端一样,在报文中包含`SSL`版本、随机值`Random2`以及加密组件,此后服务端将证书也发送到客户端。
4. 此时客户端需要对服务端发送的证书进行验证,通过操作系统内置的`CA`证书,将服务器发送的证书的数字签名进行解密,并将证书的公钥进行相同算法的`HASH`与解密的数字签名解密的内容进行对比,验证证书是否合法有效,是否被劫持更换。
5. 客户端验证证书合法,然后生成一个随机值`Random3`,用公钥对`Random3`进行加密,生成`Pre-Master Key`,客户端以`Client Key Exchange`报文将`Pre-Master Key`发送到服务端,此后发送`Change Cipher Spec`报文表示此后数据传输进行加密传输。
6. 服务端将`Pre-Master Key`用自己的私钥解密为`Random3`,服务端发送`Change Cipher Spec`报文表示此后数据传输进行加密传输。
7. 此时客户端与服务端都拥有三个随机字符串,且`Random3`是密文传输的,是安全状态的,此时则可以使用这三个字符串进行对称加密传输。由于非对称加密慢,不能每次传输数据都进行非对称加密,所以使用非对称加密将密钥协商好然后使用对称加密进行数据传输。
8. 此时便正常进行`HTTP`数据传输,但是由于`SSL`加密的作用,此时的`HTTP`传输便是安全的,此为`HTTPS`的传输过程,其中`2``3``5``6`也被称为`SSL`四次握手。

## 参考

```
https://www.cnblogs.com/yangtianle/p/11202574.html
https://www.cnblogs.com/liyulong1982/p/6106132.html
https://blog.csdn.net/lyztyycode/article/details/81259284
https://blog.csdn.net/lihuang319/article/details/79970774
https://blog.csdn.net/qq_32998153/article/details/80022489
```
# HTTPS加密传输过程
`HTTPS`全称`Hyper Text Transfer Protocol over SecureSocket Layer`,是以安全为目标的`HTTP`通道,在`HTTP`的基础上通过传输加密和身份认证保证了传输过程的安全性。`HTTPS``HTTP`的基础下加入`SSL`层,`HTTPS`的安全基础是`SSL`,因此加密的详细内容就需要`SSL`

## 知识储备
### HTTP
`HTTP`是应用层协议,默认运行在`80`端口,是一种不安全的传输协议,经其传输的数据都是未加密的明文数据,可以被中间人攻击,获取到你的网络传输数据,这也就是尽量不要使用公共场所`WIFI`的原因。

### HTTPS
`HTTPS`是应用层协议,默认运行在`443`端口,是一种安全的传输协议,通过在`HTTP`层与运输层的`TCP`直接加入一个加密/身份验证层来保证安全传输。

### SSL
`SSL`安全套接层`Secure Sockets Layer`,位于`TCP/IP`协议与各种应用层协议之间,为数据通讯提供安全支持。`SSL`协议可分为两层:
`SSL`记录协议`SSL Record Protocol`:它建立在可靠的传输协议如`TCP`之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。
`SSL`握手协议`SSL Handshake Protocol`:它建立在`SSL`记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

### TLS
`TLS`传输层安全性协议`Transport Layer Security`用于在两个通信应用程序之间提供保密性和数据完整性,其由`TLS`记录协议和`TLS`握手协议组成。`TLS1.0`即为`SSL3.0`的标准化版本,`SSL`最初由网景`Netscape`提出研发,在`SSL3.0`时由国际互联网工程任务组`IETF`进行了标准化并添加了少量机制,并更名为`TLS1.0`

### 对称加密
简单来说对称加密的加密密钥和解密密钥是相同的,对称加密的效率要比非对称加密高。

### 非对称加密
简单来说非对称加密的加密密钥与解密密钥是不同的,需要一把公钥与一把私钥,私钥不能被其他任何人知道,公钥则可以随意公开。公钥加密,私钥解密;私钥数字签名,公钥验证。

### CA
由于公钥是放在服务器的,在建立连接的过程中将公钥传输到用户,但是如何避免中间人攻击,即在传输公钥的过程中避免劫持,于是引入第三方认证权威机构`CA`,大多数操作系统的`CA`证书是默认安装的,`CA`也拥有一个公钥和私钥。任何人都可以得到`CA`的证书,其包含公钥,用以验证它所签发的证书。`CA`为服务申请者颁发证书,在`CA`判明申请者的身份后,便为他分配一个公钥,并且`CA`将该公钥与申请者的身份信息绑在一起,并为之签字后,便形成证书发给申请者。如果一个用户想鉴别一个证书的真伪,他就用`CA`的公钥对那个证书上的签字进行验证,一旦验证通过,该证书就被认为是有效的。证书实际是由证书签证机关`CA`签发的对用户的公钥的认证。


## 传输过程
1. 首先`TCP`三次握手建立链接,这是数据传输基础,在此之上开始`SSL`
2. 客户端首先发送`Client Hello`开始`SSL`通信,报文中包含客户端支持的`SSL`版本、随机值`Random1`、加密算法以及密钥长度等。
3. 服务器发送`Server Hello`,和客户端一样,在报文中包含`SSL`版本、随机值`Random2`以及加密组件,此后服务端将证书也发送到客户端。
4. 此时客户端需要对服务端发送的证书进行验证,通过操作系统内置的`CA`证书,将服务器发送的证书的数字签名进行解密,并将证书的公钥进行相同算法的`HASH`与解密的数字签名解密的内容进行对比,验证证书是否合法有效,是否被劫持更换。
5. 客户端验证证书合法,然后生成一个随机值`Random3`,用公钥对`Random3`进行加密,生成`Pre-Master Key`,客户端以`Client Key Exchange`报文将`Pre-Master Key`发送到服务端,此后发送`Change Cipher Spec`报文表示此后数据传输进行加密传输。
6. 服务端将`Pre-Master Key`用自己的私钥解密为`Random3`,服务端发送`Change Cipher Spec`报文表示此后数据传输进行加密传输。
7. 此时客户端与服务端都拥有三个随机字符串,且`Random3`是密文传输的,是安全状态的,此时则可以使用这三个字符串进行对称加密传输。由于非对称加密慢,不能每次传输数据都进行非对称加密,所以使用非对称加密将密钥协商好然后使用对称加密进行数据传输。
8. 此时便正常进行`HTTP`数据传输,但是由于`SSL`加密的作用,此时的`HTTP`传输便是安全的,此为`HTTPS`的传输过程,其中`2``3``5``6`也被称为`SSL`四次握手。

## 每日一题

```
https://github.com/WindrunnerMax/EveryDay
```


## 参考

```
https://www.cnblogs.com/yangtianle/p/11202574.html
https://www.cnblogs.com/liyulong1982/p/6106132.html
https://blog.csdn.net/lyztyycode/article/details/81259284
https://blog.csdn.net/lihuang319/article/details/79970774
https://blog.csdn.net/qq_32998153/article/details/80022489
```
6 changes: 6 additions & 0 deletions Browser/HTTP协议概述.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,12 @@
* `504` `Gateway Time-out`: 充当网关或代理的服务器,未及时从远端服务器获取请求。
* `505` `HTTP Version not supported`: 服务器不支持请求的`HTTP`协议的版本,无法完成处理。

## 每日一题

```
https://github.com/WindrunnerMax/EveryDay
```

## 参考

```
Expand Down
8 changes: 7 additions & 1 deletion Browser/SQL注入.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,10 @@ SELECT count(*) FROM user_info WHERE account = '';DROP TABLE qweqwe#' AND passwo
对访问数据库的`Web`应用程序使用`Web`应用程序防火墙`WAF`,它可以帮助识别`SQL`注入尝试。

### 定期检查
定期测试与数据库交互的`Web`应用程序,且将数据库更新为最新的可用修补程序,防止旧版本的漏洞利用。
定期测试与数据库交互的`Web`应用程序,且将数据库更新为最新的可用修补程序,防止旧版本的漏洞利用。

## 每日一题

```
https://github.com/WindrunnerMax/EveryDay
```
6 changes: 6 additions & 0 deletions Browser/TCP三次握手.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@ client server
第一,保证客户端发送的最后一个`ACK`报文能够到达服务器,因为这个`ACK`报文可能丢失,站在服务器的角度看来,我已经发送了`FIN+ACK`报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个`2MSL`时间段内收到这个重传的报文,接着给出回应报文,并且会重启`2MSL`计时器。
第二,防止类似已经失效的连接请求报文段出现在本连接中。客户端发送完最后一个确认报文后,在这个`2MSL`时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。

## 每日一题

```
https://github.com/WindrunnerMax/EveryDay
```

## 参考

```
Expand Down
Loading

0 comments on commit 7320256

Please sign in to comment.