0

我读到用户可以通过在登录时为 PHPSESSID 令牌指定一个特制的值来覆盖文件系统上的任意文件。它声明它可以覆盖其他会话文件或删除其他系统相关文件。

只有登录用户才能访问该应用程序。我们在文件系统中维护会话。会话文件名是以字符串常量为前缀的会话 ID。当有来自客户端的请求时,我们从 PHPSESSID 获取会话 ID,并将字符串常量添加到会话 ID 中,并将其用作文件系统中该会话的文件名。只有登录的用户可以

例如:

PHPSESSID = A3KJHT63XK496LSDNTJ45

会话文件名 i 文件系统将是“STRINGA3KJHT63XK496LSDNTJ45”

通过发出如下请求来覆盖/删除现有文件的可能性是什么...

POST /login HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Macintosh; ...(truncated) 
Cookie: PHPSESSID=../../php.log;
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 47
login=login&username=user1&password=Password1234

在上面的示例中,会话文件是使用名称“STRING../../php.log”创建/访问的。这是安全漏洞审核指出的,因为直接提供了文件名,因此该系统文件有可能被删除或覆盖。

在这种情况下,任何通过会话 id 制作的字符串(例如是“../../php.log”),其前缀是一些其他字符串常量,如“STRING”,以给出最终字符串“STRING../.. /php.log" 变为有效。文件系统中不存在具有该名称的文件名,也不存在任何安全漏洞。

然而,我想知道上述方法还带来了哪些其他漏洞?

4

0 回答 0