gpt4 book ai didi

php - 利用php fopen中的漏洞

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:07:44 29 4
gpt4 key购买 nike

我正在参加网络安全类(class),为了完成一项作业,我们必须利用特定的 php 文件并获得对托管该文件的服务器的某种访问权限。我可以设置自己的 $email 和 $password 变量,因为它们是用 $_POST 设置的。我相信我唯一可以利用的代码就是这个。

$email = $_POST['email']
$password = $_POST['password']
....
$accountfile = "./acounts/" . $email

if(!file_exists($accountfile)){
diefooter("unknown email address or password")
}
$fh = fopen($accountfile, "r")
if(!$fh){
diefooter("Cannot open file $accountfile.");
}
$last = fgets($fh);
$first = fgets($fh);
$pass = fgets($fh);

if(strcmp($pass,$password)!=0){
diefooter("wrong email or password.")
}

我知道 fopen() 函数中存在漏洞,我可以使用正确的输入访问 shell。

filePath = "/var/ctf/music-copyright/html/cgi-bin/login.php"
shellKode = "exploit@gmail.com\0;echo shell_exec("+'"cat '+filePath+'");'
# payload = {'email':shellKode, 'password':'test'}
testPayload = {'email':'exploit@gmail.com','password':'a'}
r = requests.post(url, data = testPayload)
print(r.text)

我可以将电子邮件输入系统,但格式在保存前经过验证。在这一点上,我有点迷茫,不确定我还能做什么。fopen() 是文件中我认为可以被利用的唯一函数,我想不出另一个可能被利用的地方。

最佳答案

我认为他们指的是 CRLF 漏洞。

在您的示例利用代码中,您传递了一些 php 代码,但这不是您要做的。

目标是让 fopen 从 Internet 打开文件。如果 $email 变量包含两个由 CRLF 分隔的字符串,您可以让 fopen() 访问不应访问的外部网站。

这一切都取决于 $fh 文件描述符发生了什么,这将决定您将如何利用它。

这是我在该漏洞上找到的链接:http://www.securiteam.com/unixfocus/5OP0C0A8AC.html

在发布更多代码后进行编辑:

我们从您可以强制 $password 为您想要的值开始。

所以游戏的名称是强制 $pass 为你想要的值,这样 strcmp 返回 true,你就会被记录下来在不知道任何密码的情况下。

$pass 在最后一个语句 $pass = fgets($fh)

中被控制

如果您使用 CRLF 漏洞指向 fopen 打开您托管的 URL,例如http://your.ip.address/your-file ,并在该文件中设置与 $password 中相同的数据。这应该允许您无需注册即可登录。

但是代码中有一些奇怪的东西,例如:

$last = fgets($fh);
$first = fgets($fh);
$pass = fgets($fh);

看起来代码可能不完整,因为这里$last$first$pass 的值总是同样没有意义。这将是一个需要考虑的向量。

可能性 #2 - 文件遍历:

$email 变量中使用 ../,您将能够访问 fopen 中与 之外的不同文件code>acounts/ 文件夹。

如果你运行:

<?php
$fh = fopen("acounts/../../test.sh","r");
?>

它评估成功并为 test.sh 的内容查找两个文件夹。因此,您可以通过 $email 变量探测文件系统的内容。然后游戏的名字就是找到一个你知道内容的标准文件,把它填入$password,你就可以免注册登录系统了。

可能性 #3 - 注册一个以 .php 结尾的电子邮件地址:

正如 drew010 所提到的,假设您被允许注册一个自定义帐户,然后通过注册一个以 .php 结尾的 $email,并将 eval( ) $password 中的 php 代码在注册您的帐户时,将在 acounts/ 中创建一个以您的 $email 命名的后门文件您可以通过网络访问。

关于php - 利用php fopen中的漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41731909/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com