协议分析

HTTP


HTTP工作原理

在用户点击url的连接后,浏览器和web服务器执行以下动作

  1. 浏览器分析超链接中的URL

  2. 浏览器向DNS请求解析URL IP地址

  3. DNS将解析出来的IP地址返回浏览器

  4. 浏览器与服务器建立TCP连接(HTTP默认端口80)

  5. 浏览器请求文档:GET/POST

  6. 服务器给出响应,将所访问的资源发回给浏览器

  7. 释放TCP连接

  8. 浏览器解析显示返回内容

    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
  1. 请求行:GET /hello.txt HTTP/1.1
    • GET: 请求方法,表示客户端希望获取指定资源
    • /hello.txt: 请求的URI,表示请求的资源为/hello.txt
    • HTTP/1.1: 使用的HTTP版本,表示使用的是HTTP 1.1协议
  2. Host字段:Host: www.example.com
    • Host: 请求头字段,指定请求的目标服务器的主机名和端口号
    • www.example.com: 请求的目标服务器主机名
  3. 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: 渲染引擎和版本号
  4. 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值越大,优先级越高
  5. Accept-Language字段:Accept-Language: en-US,en;q=0.5
    • Accept-Language: 请求头字段,指定客户端能够接受的自然语言
    • en-US: 客户端首选的语言为英语(美国)
    • en;q=0.5: 客户端次选的语言为英语,但优先级比英语(美国)低
  6. 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-TypeContent-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
posted @ 2024-01-25 17:16  往来风雪皆惺忪  阅读(53)  评论(0)    收藏  举报