The leading toolkit for web security testing.
一个抓包改包工具 / 安全测试的工具包,这个怎么理解呢?先回到我们的HTTP协议。HTTP协议本质是一个基于文本的解析规则
,即通过socket API发送一段特定格式的文本:
GET /captiveportal/generate_204 HTTP/1.1
Host: edge-http.microsoft.com
Pragma: no-cache
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: close
...
上述文本的回车换行实际上就是\r\n
,这段文本在底层(C语言socket API)应该是这样的:
int sock;
struct sockaddr_in serv_addr;
char msg[1024];
strcpy(msg, "GET / HTTP/1.1\r\n");
strcat(msg, "Host: www.baidu.com\r\n");
strcat(msg, "Content-Type: text/html\r\n");
strcat(msg, "Content-length: \r\n");
printf("%s",msg);
sockfd = socket(AF_INET, SOCK_STREAM,0);
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("x.x.x.x")
serv_addr.sin_port = htons(atoi(端口号));
connect(sockfd,(struct sockaddr*)&serv_addr, sizeof(serv_addr);
send(sockfd, msg, strlen(msg), 0);
close(sockfd);
用python有助于我们更好理解:
#!/usr/bin/env python3
import socket
target_host = "127.0.0.1" #目标IP
target_port = 9999 # 目标端口
# 建立一个 socket 对象
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 链接客户端
client.connect((target_host,target_port))
# 发送一些数据
client.send("GET / HTTP/1.1\r\nHost:baidu.com\r\n\r\n".encode())
# 接受一些数据
response = client.recv(4096)
print(response.decode())
with open("/home/kali/Desktop/test.html","w") as f:
f.write(response_str)
发送的文本就是HTTP请求
上面的python代码一个HTTP 客户端,或者说TCP客户端。这就已经实现HTTP协议,就是 客户端发送一段文本消息,服务端按\r\n
分割逐行解析这些文本所预定义的意义。我们所做的Web漏洞测试就是围绕这些文本进行的,也就是所谓HTTP请求包
。
现在我们使用BurpSuite监听一个端口,然后在浏览器中设置代理指向该端口。这里其实就是一个正向代理了。当你在浏览器中设置代理地址的时候,其实就是设置了IP和端口。浏览器正常的通过三次握手与bp建立连接,bp即是浏览器所发起的任何网络连接的服务器。当bp收到来自浏览器的请求时,提取请求的URL/域名。之后,bp又充当客户端,向该url/域名请求资源,之后将响应的资源又响应给浏览器
通过Wireshark抓包,我们可以清晰的看见,浏览器设置经过代理的HTTP请求与不经过代理的HTTP请求包是一致的,只是代理的请求数据包的下层协议(网络层-IP、传输层-端口)封装的地址指向了代理服务器,HTTP请求包不需要改变或封装。
浏览器的包发送到bp,在bp可以对HTTP数据包的内容进行修改,用于安全测试。进一步,我们针对数据包实现对其的编码/解码、比较、爆破等功能,那么,就可以称之为工具包了。
**Burp 渗透测试工作流的核心是能够在 Burp 工具之间传递 HTTP 请求以执行特定任务的能力。**您可以从 “代理拦截” 选项卡,“代理历史记录”,站点地图,甚至在 Burp 中您看到 HTTP 消息的其他任何地方发送消息。为此,选择一个或多个消息,然后使用上下文菜单将请求发送到另一工具。
你将用于特定任务的 Burp 工具如下:
你可以通过多种方式组合 Burp 的各种工具,以执行从非常简单到高度高级和专业化的测试任务。
上图的工作流即可看成HTTP数据包的流转。每一个框代表了一个功能模块,数据包(HTTP请求)流经里面,我们可以实现进行一些操作,并能得到一些结果。比如:
等等。
https://www.wangan.com/docs/1339