Burpsuite
Burpsuite
1.Proxy:用于拦截和修改HTTP请求和响应,并允许用户在发送到目标服务器之前手动修改请求内容。
1.1.Intercept:允许用户拦截应用程序的HTTP和HTTPS请求,查看和修改请求,然后转发到目标服务器。使用Intercept,用户可以深入分析应用程序的请求和响应,并查找潜在的漏洞。Intercept还可以帮助用户快速验证漏洞的利用。
在浏览器上安装Proxy SwitchyOmega,进行快速代理。
须将浏览器的流量包转移到burpsuit上,burpsuit再进行发包。
1.2.HTTP history:记录了所有被拦截的请求和响应,使用户能够查看和分析以前的请求和响应。用户可以使用过滤器来搜索特定请求和响应,以便更轻松地查找和分析流量。
2.Target:用于设置测试目标,并让Burp Suite扫描目标应用程序以发现漏洞。
3.Dashboard:用于执行自动化漏洞扫描,包括SQL注入、跨站脚本等多种漏洞。
4.Repeater:用于显示请求和响应的详细信息,包括HTTP头和正文。
5.Intruder:用于发送请求的多个副本,以测试目标服务器的响应是否相同。
1.设置代理:开启浏览器代理,配置burp代理ip,注意要与浏览器代理ip一致(建议使用8080端口)
2.抓包:切换到Proxy菜单,拦截开关开启(intercept is on),点击open browser打开浏览器
3.send to Intruder(Ctrl+I)
Positions: 对需要处理的参数(账号,密码)做变量处理(一个参数做变量,选择Sniper;两个以上,选择Cluser Bomb)
点击需要操作变量的参数,点击add按钮
Payloads:载入密码文本
4.Start attack
5.查看结果:扫描完成后,Intruder会显示每个尝试的响应,包括成功登录和失败的情况。通过分析响应,可以判断哪些密码尝试有效。
HTTP
HTTP是一种用作获取诸如 HTML 文档这类资源的协议。它是 Web 上进行任何数据交换的基础,同时,也是一种客户端—服务器(client-server)协议,也就是说,请求是由接受方,通常是 Web 浏览器发起的。
URL
URL(统一资源定位符)是因特网中的唯一资源的地址。它是浏览器用于检索已发布资源(例如 HTML 页面、CSS 文档、图像等)的关键机制之一。
HTTP请求包结构
1.起始行:用于描述要执行的请求,或者是对应的状态,成功或失败。这个起始行总是单行的。
2.一个可选的 HTTP 标头集合指明请求或描述消息主体(body)。
3.一个空行指示所有关于请求的元数据已经发送完毕。
4.一个可选的包含请求相关数据的主体(比如 HTML 表单内容),或者响应相关的文档。主体的大小有起始行的 HTTP 头来指定。
请求头列表
1.User-Agent:标识客户端使用的浏览器和操作系统信息。
Accept: text/plain, text/html
可以通过$_SERVER[‘HTTP_USER_AGENT’]获取。
2.Accept:指定客户端能够处理的内容类型,即可接受的媒体类型。
可以通过$_SERVER[‘HTTP_ACCEPT’]获取。
3.Accept-Charset:浏览器可以接受的字符编码集
Accept-Charset: iso-8859-5
4.Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型
Accept-Encoding: compress, gzip
5.Accept-Language:浏览器可接受的语言
Accept-Language: en,z
6.Accept-Ranges:可以请求网页实体的一个或者多个子范围字段
Accept-Ranges: bytes
7.Content-Type:指定请求体中的数据格式类型。常见的取值有application/json、application/x-www-form-urlencoded等。
可以通过$_SERVER[‘CONTENT_TYPE’]获取。
8.Date:请求发送的日期和时间。
9.Authorization:用于进行身份验证的凭证信息。常见的取值有Bearer Token、Basic Authentication等。
可以通过$_SERVER[‘HTTP_AUTHORIZATION’]获取。
10.Cookie:包含来自客户端的Cookie信息。
HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。
Cookie: role=admin;ssid=1
可以通过$_SERVER[‘HTTP_COOKIE’]获取。
11.Referer:指示当前请求是从哪个URL页面发起的。
可以通过$_SERVER[‘HTTP_REFERER’]获取。
12.Host:指定服务器的域名或IP地址。
可以通过$_SERVER[‘HTTP_HOST’]获取。
13.X-Requested-With:指示请求是否由Ajax发起的。通常在Ajax请求中会设置该头部字段,取值为”XMLHttpRequest”。
可以通过$_SERVER[‘HTTP_X_REQUESTED_WITH’]获取。
14.Content-Length:指定请求体的长度。
Content-Length: 348
可以通过$_SERVER[‘CONTENT_LENGTH’]获取。
15.Cache-Control:控制缓存行为的指令。用于指定客户端和代理服务器如何缓存响应
Cache-Control: no-cache
可以通过$_SERVER[‘HTTP_CACHE_CONTROL’]获取
16.X-Forwarded-For(XFF):是一个事实上的用于标识通过代理服务器连接到 web 服务器的客户端的原始 IP 地址的标头
17.Connection:表示是否需要持久连接
// HTTP 1.1默认进行持久连接
Connection: close
18.Expect:请求的特定的服务器行为
19.From:发出请求的用户的Email
GET与POST的区别
GET 请求主要用于从服务器获取数据。
参数和 URL之间用问号?
隔开, 参数键值用等号=
连接,然后参数之间用连接符&
拼接起来
数据包格式:
1.GET 请求数据包格式:
请求行:GET /path/to/resource?param1=value1&m2=value2 HTTP/1.1
请求参数:参数会附加在 URL 后面,形如?param1=value1&m2=value2
2.POST 请求数据包格式:
请求行:POST /path/to/resource HTTP/1.1
请求头(Headers):包含一些元数据信息,如 Content-Type(内容类型)、Content-Length(内容长度)等。
请求体(Body):放置实际提交的数据,不同的 Content-Type 决定了数据的格式,可以是表单数据、JSON、XML 等。
多次发送相同的 GET 请求会产生相同的结果,不会对服务器状态产生影响。
这使得 GET 请求适合用于获取静态资源,如网页、图片、文件等。
POST 请求主要用于向服务器提交数据,通常用于创建、更新或删除资源。它将请求的参数作为请求体的一部分发送到服务器。POST 请求是非幂等的,即多次发送相同的 POST 请求可能会产生不同的结果,因为它可能会改变服务器的状态。
GET 和 POST 请求的存在是为了满足不同的需求。GET 请求适用于获取数据,而 POST 请求适用于提交数据并对服务器状态进行更改。选择正确的请求方法取决于请求的性质和预期的服务器操作。
GET比POST更不安全,因为GET参数会直接暴露在url上。所以不能用来传递敏感信息get 请求的参数传递方式
在 HTTP 请求中,GET 请求可以通过 URL 参数或者请求体的方式传递参数。
1.URL 参数:GET 请求可以通过 URL 中指定的 key-value 形式传递参数。
2.请求体(仅适用于 POST、PUT、PATCH 请求):当 POST、PUT 或 PATCH 请求的 URL 中没有指定参数时,参数会被放置在请求体中。
请求体中的数据可以是表单数据、JSON 数据等。
例如,使用 POST 请求将 JSON 数据发送到如下 URL 时,请求体中的 JSON 数据如下:
{
“name”: “John Doe”,
“email”: “john.doe@example.com“
}
HTTP
1.请求报文格式
2.响应报文格式
HTTP动词
常见方法:HEAD / GET / POST / PUT / DELETE / PATCH / OPTIONS / TRACE
扩展方法:LOCK / MKCOL / COPY / MOVE
version
报文使用的HTTP版本
格式为HTTP/
HTTP状态返回代码 1xx(临时响应)
表示临时响应并需要请求者继续执行操作的状态代码。
100 继续 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分
101 切换协议 请求者已要求服务器切换协议,服务器已确认并准备切换
HTTP状态返回代码 2xx (成功)
表示成功处理了请求的状态代码。
HTTP状态返回代码 3xx (重定向)
表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。
HTTP状态返回代码 4xx(请求错误)
HTTP状态返回代码 5xx(服务器错误)