前言:
年关将至,这可能是年前最后一篇文章了。已经有一段时间没有更新文章了,因为最近也没有学到什么新的知识,也就没什么可写的,又不想灌水。最近关注的好兄弟们多了很多,在这里也是十分感谢大家的支持,在未来笔者也会在法律允许的范围内一如既往的为大家分享比较有用的知识,也会一如既往的不在文章里插广告恶心人。
今天的这篇文章是笔者最近做漏洞挖掘的时候,无意中捡到的漏洞,这个漏洞就是典型的--服务器开启了不安全的HTTP方法,导致服务器易受攻击。那么究竟什么才是HTTP方法,他们有哪些危害,我们在平时测试的时候应该如何去测试呢?
0X01 HTTP方法有哪些
不安全的 HTTP 方法是指在不使用安全连接 (例如 TLS) 的情况下,可能导致数据泄露或被篡改的 HTTP 请求方法。这些方法包括:
TRACE: 用于测试服务器的响应。
GET: 用于获取服务器上的资源。
HEAD: 类似于 GET,但不返回资源的主体,只返回元数据。
POST: 用于向服务器提交数据。
PUT: 用于向服务器上的资源位置上放置新内容。
DELETE: 用于从服务器上删除资源。
CONNECT: 用于建立一个隧道以便在服务器和客户端之间传输数据。
OPTIONS: 用于查询服务器的性能。
TRACE: 用于测试服务器的响应。
PROPFIND:用于查询资源的属性
MKCOL:用于在 WebDAV服务器上创建新的资源集合 (通常是文件夹)。
MOVE:用于在 WebDAV服务器上移动资源。
COPY:用于在 WebDAV服务器上复制资源。
PROPPATCH:用于在WebDAV服务器上更新资源的属性。
LOCK:用于在 WebDAV服务器上锁定资源。
UNLOCK:用于在WebDAV服务器上解锁资源。
0X02 不安全的HTTP方法如何发觉
笔者在一次漏洞挖掘的过程中,几乎是习惯性的看了一眼OPTIONS方法,OPTIONS方法很简单,只需要在请求包里直接将GET/POST方法进行替换,即可看到服务器开启了哪些方法
我们看一下OPTIONS方法能看到哪些内容吧
我们可以看到,这个系统开放了很多的HTTP方法,而我们接下来就以这些方法为切入点为大家带来讲解
0x3 PROPFIND方法
PROPFIND 是一种 HTTP 请求方法,用于查询资源的属性。它是 WebDAV (Web Distributed Authoring and Versioning) 协议的一部分,用于在 Web 上创建、编辑和管理文档。
使用 PROPFIND 方法,客户端可以请求服务器上的资源的属性列表,也可以请求具体的属性值。服务器响应的状态码为 207 Multi-Status,并在响应主体中包含所请求的属性信息。
例如,客户端可以使用 PROPFIND 方法请求服务器上的文件的创建时间、修改时间和大小等属性。服务器会返回这些信息,客户端可以使用这些信息来更新本地文件列表。
服务器响应的状态码为 207 Multi-Status,并在响应主体中包含所请求的属性信息。
我们在此次案例中进行测试,返回的内容并没有我们想要看到的信息
0X03 PUT 方法
PUT 是一种 HTTP 请求方法,用于向服务器上的某个资源发送数据,以便修改或替换该资源。
使用 PUT 方法时,客户端向服务器发送 PUT 请求,并在请求主体中包含要发送的数据。
服务器会返回一个状态码来表示操作是否成功。如果文件修改成功,服务器会返回 200 OK /201 Created状态码;如果文件修改失败,则会返回其他状态码,例如 405 Method Not Allowed。
如上图所示,我们在网站根路径写下一个1.txt的文件,内容为:Command=Login&loginfo=a_167323xxxxxxxx97&T=1673231718359
我们访问http://ip/1.txt 返回内容如下
PUT方法文件写入漏洞与TOMCAT任意文件写入漏洞有异曲同工之妙,利用方式在这里不做过多介绍
0X04 PROPPATCH方法
PROPPATCH 是一种 HTTP 请求方法,用于在 WebDAV (Web Distributed Authoring and Versioning) 服务器上修改资源的属性。
使用 PROPPATCH 方法时,客户端向服务器发送 PROPPATCH 请求,并在请求主体中包含要修改的属性和新值。
服务器会返回一个状态码来表示操作是否成功。如果属性修改成功,服务器会返回 207 Multi-Status 状态码;如果属性修改失败,则会返回其他
我们在这次的案例中进行测试
在此次测试中,我们尝试修改文件的创建时间,但是失败了
0X05 MOVE方法
MOVE 是一种 HTTP 请求方法,用于在 WebDAV (Web Distributed Authoring and Versioning) 服务器上移动资源。
使用 MOVE 方法时,客户端向服务器发送 MOVE 请求,并在请求中指定要移动的资源和目标位置。
服务器会返回一个状态码来表示操作是否成功。如果文件修改成功,服务器会返回 200 OK / 201 Created状态码;如果文件修改失败,则会返回其他状态码,例如 405 Method Not Allowed。
我们在此次实验中进行测试
我们此时重新访问http://ip/1.txt 我们发现此时已经无法再访问了
我们访问 http://ip/cgi-bin/1.txt ,我们访问成功了
0X06 COPY方法
COPY 是一种 HTTP 请求方法,用于在 WebDAV (Web Distributed Authoring and Versioning) 服务器上复制资源。
使用 COPY 方法时,客户端向服务器发送 COPY 请求,并在请求中指定要复制的资源和目标位置。
服务器会返回一个状态码来表示操作是否成功。如果文件复制成功,服务器会返回 201 Created 状态码;如果文件复制失败,则会返回其他状态码,例如 405 Method Not Allowed。
此时我们访问 http://ip/cgi-bin/2.txt 我们访问成功了
0X07 MKCOL 方法
MKCOL 是一种 HTTP 请求方法,用于在 WebDAV (Web Distributed Authoring and Versioning) 服务器上创建新的资源集合 (通常是文件夹)。
使用 MKCOL 方法时,客户端向服务器发送 MKCOL 请求,并在请求主体中包含所需的资源集合信息
如果服务器成功创建了新文件夹,它会返回 201 Created 状态码;如果创建失败,则会返回其他状态码,例如 405 Method Not Allowed。
这里不进行演示哈
0X08 LOCK 方法
LOCK 是一种 HTTP 请求方法,用于在 WebDAV (Web Distributed Authoring and Versioning) 服务器上锁定资源。
使用 LOCK 方法时,客户端向服务器发送 LOCK 请求,并在请求主体中包含锁定信息。服务器会返回一个锁定标识符 (lock token),客户端可以使用该标识符在之后的请求中引用该锁定。我们以锁定900秒进行测试
服务器会返回一个状态码来表示操作是否成功。如果锁定成功,服务器会返回 200 OK 状态码,并在响应主体中包含锁定令牌。
接下来我们进行实战演习吧
芜湖,失败了
0X09 UNLOCK方法
UNLOCK 是一种 HTTP 请求方法,用于在 WebDAV (Web Distributed Authoring and Versioning) 服务器上解锁资源。
使用 UNLOCK 方法时,客户端向服务器发送 UNLOCK 请求,并在请求中包含锁定标识符 (lock token)
服务器会返回一个状态码来表示操作是否成功。如果解锁成功,服务器会返回 204 No Content 状态码;如果解锁失败,则会返回其他状态码,例如 409 Conflict。
0X10 DELETE 方法
DELETE 是一种 HTTP 请求方法,用于从服务器上删除指定的资源。使用 DELETE 方法时,客户端向服务器发送 DELETE 请求,并指定要删除的资源。
服务器会返回一个状态码来表示操作是否成功。如果文件删除成功,服务器会返回 200 OK 状态码;如果文件删除失败,则会返回其他状态码,例如 405 Method Not Allowed。
我们继续使用我们的测试网站进行测试
我们访问 http://ip/cgi-bin/2.txt ,我们发现,文件已经被删除了
我们再次验证,这一次删除1.txt
我们成功了!
0X11 TRACE方法
TRACE 是一种 HTTP 请求方法,用于向服务器发送调试信息。
使用 TRACE 方法时,客户端向服务器发送 TRACE 请求,并在请求主体中包含调试信息。服务器会返回原始请求的报文,以便客户端检查是否有任何修改。
服务器会返回一个状态码来表示操作是否成功。如果调试信息发送成功,服务器会返回 200 OK 状态码;如果调试信息发送失败,则会返回其他状态码,例如 405 Method Not Allowed。
暂时到这里吧