HTTP
HTTP工作原理
在用户点击url的连接后,浏览器和web服务器执行以下动作
-
浏览器分析超链接中的URL
-
浏览器向DNS请求解析URL IP地址
-
DNS将解析出来的IP地址返回浏览器
-
浏览器与服务器建立TCP连接(HTTP默认端口80)
-
浏览器请求文档:GET/POST
-
服务器给出响应,将所访问的资源发回给浏览器
-
释放TCP连接
-
浏览器解析显示返回内容
HTTP状态码如下:
200 OK:请求成功。
201 Created:请求已经被实现,资源被新建。
202 Accepted:服务器已接受请求,但尚未处理。
204 No Content:服务器成功处理了请求,但不需要返回任何实体内容。
206 Partial Content:服务器已经成功处理了部分 GET 请求。
301 Moved Permanently:请求的资源已经被永久移动到新的URI,将来任何对该资源的引用都应使用新的URI。
302 Found:请求的资源临时被移动到新的URI。
304 Not Modified:客户端发送了一个带有条件的请求,服务器告诉客户端,原先缓存的响应还可以继续使用。
400 Bad Request:请求格式错误。
401 Unauthorized:请求需要认证或者认证失败。
403 Forbidden:服务器拒绝请求。
404 Not Found:未找到指定资源。
500 Internal Server Error:服务器发生了不可预期的错误。
502 Bad Gateway:网关或代理服务器从上游服务器接收到无效的响应。
以下是一个GET示例中的请求头字段,以及对应的解释和分析:
makefileCopy code
GET /hello.txt HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://www.example.com/index.html
Connection: keep-alive
- 请求行:
GET /hello.txt HTTP/1.1
GET
: 请求方法,表示客户端希望获取指定资源/hello.txt
: 请求的URI,表示请求的资源为/hello.txt
HTTP/1.1
: 使用的HTTP版本,表示使用的是HTTP 1.1协议
- Host字段:
Host: www.example.com
Host
: 请求头字段,指定请求的目标服务器的主机名和端口号www.example.com
: 请求的目标服务器主机名
- User-Agent字段:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0
User-Agent
: 请求头字段,指定客户端的用户代理(即浏览器等)Mozilla/5.0
: 浏览器的标识,表示使用的是Mozilla浏览器(Windows NT 10.0; Win64; x64; rv:58.0)
: 操作系统和浏览器版本号Gecko/20100101
: 渲染引擎和版本号
- Accept字段:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept
: 请求头字段,指定客户端能够接收的MIME类型text/html
: 客户端能够接受的HTML类型的文档application/xhtml+xml
: 客户端能够接受的XHTML类型的文档application/xml
: 客户端能够接受的XML类型的文档q=0.9,*/*;q=0.8
: 表示客户端能够接受的其他MIME类型以及它们的优先级,q
值越大,优先级越高
- Accept-Language字段:
Accept-Language: en-US,en;q=0.5
Accept-Language
: 请求头字段,指定客户端能够接受的自然语言en-US
: 客户端首选的语言为英语(美国)en;q=0.5
: 客户端次选的语言为英语,但优先级比英语(美国)低
- Accept-Encoding字段:
Accept-Encoding: gzip, deflate, br
Accept-Encoding
: 请求头字段,指定客户端能够接
以下是一个POST示例中的请求头字段,以及对应的解释和分析:
makefileCopy code
POST /login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 21
Connection: close
username=admin&password=123456
POST /login HTTP/1.1
: 表示使用POST方法请求/login
资源,HTTP版本为1.1。Host: example.com
: 表示请求的服务器地址。User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
: 表示客户端的类型和版本信息,这里是Mozilla Firefox浏览器的信息。Accept: */*
: 表示客户端可以接受任何类型的响应数据。Accept-Language: en-US,en;q=0.5
: 表示客户端可以接受的语言类型和优先级,这里是英文和任何语言的一半权重。Accept-Encoding: gzip, deflate
: 表示客户端可以接受的压缩编码类型,这里是gzip和deflate。Content-Type: application/x-www-form-urlencoded
: 表示请求正文的类型为application/x-www-form-urlencoded
,即表单数据。Content-Length: 21
: 表示请求正文的长度为21字节。Connection: close
: 表示完成请求后立即关闭连接。
请求正文:
username=admin&password=123456
: 表示POST请求的参数,这里包含用户名和密码,采用application/x-www-form-urlencoded
编码方式。
总体来说,POST请求与GET请求最大的区别是,POST请求把请求参数放在请求正文中,而GET请求把请求参数放在URL中。POST请求的请求头和GET请求的请求头相比,多了一个Content-Type
和Content-Length
字段。其中,Content-Type
指定了请求正文的类型,Content-Length
指定了请求正文的长度。这些字段可以帮助服务器正确解析请求,获取请求参数,进行相应的处理。
以下是一些WAF绕过技术:
Null Byte Injection(空字节注入):攻击者在上传的文件名中添加空字节(\0),以绕过WAF对文件类型的检测。例如,攻击者将文件名命名为"shell.php\0.jpg",WAF将仅检查.jpg的文件类型而忽略后面的字符。
文件头篡改:攻击者可以篡改文件的文件头,使其在WAF的检测中通过,例如,将一个包含PHP代码的文件的文件头更改为GIF格式的文件头,以绕过WAF的检测。
MIME绕过:攻击者可以通过修改文件的MIME类型,使其伪装成WAF允许的文件类型。例如,将一个包含PHP代码的文件的MIME类型更改为image/jpeg,WAF将不会对其进行检测。
Chunked Encoding:攻击者可以使用Chunked Encoding技术,在不知道文件大小的情况下,将恶意代码分段上传到服务器上。
代理不错的软件surge3,
##surge3的一个轮子,可以将时间增加
#!/usr/binn/env bash
cd $(dirname "$0")
read -sp "Password:" pwd
echo
echo "${pwd}"| sudo -S date 010110002010
nohup ./Surge\ 3.app/Contents/Macos/surge\ 3 & sleep 30
echo "${pwd}" | sudo -S sntp -sS time.apple.com
标签:分析,协议,HTTP,请求,Accept,服务器,浏览器,客户端
From: https://www.cnblogs.com/Tongyanxi/p/17987673