目 录CONTENT

文章目录

HTB靶场-APTLabs-20241012

Administrator
2025-03-10 / 0 评论 / 0 点赞 / 3 阅读 / 0 字

一、整体直播内容概述

  1. 两大块主要内容

    • 第一大块:关于靶场中 88 这台机器的 SQL 注入部分,继续将其完成。通过这一块基本上能够把我们在 Web 端口、各个 IP、各端口对应服务的渗透流程梳理到一个阶段性的总结,也讨论接下来如何进一步分析。

    • 第二大块:在每前进一步时,要对已有信息做评估,考虑攻击思路、可利用信息、优先级等。讲到后面要进入节奏更紧凑的阶段,而且要根据前面曾经的攻击过程做回顾和思考。

  2. 本次直播的主要安排

    • 由于“SQL注入”体量很大,且“盲注”部分也相当庞大,因此决定先把与 88 号机器相关的 SQL 注入继续推进,做完之后再看是否需要更多的嵌入学习或其他技术点插入。

    • “盲注”的具体知识点非常多(涉及布尔型盲注、基于时间的盲注、子查询、DNS 方式的数据导出、自动化扫描工具、SQLMap 专业版里的一些外带工具、MySQL 特定的用法以及 DNS 带外泄漏等)。如果深入展开,可能需要很长时间(比如两个月)才能把所有细节与实操都讲完。

    • 希望在每周六直播里既能给出足够的理论与实战指引,又保证靶场进度不会完全停滞。

  3. 对已有拓展内容的说明

    • 已整理出的 SQL 注入资料非常庞大,全部来自国内外多方参考资料,尤其是付费课程、国外培训机构等,搜集了极其全面的注入手法、案例、以及自动化或带外渗透手段。

    • 如果需求高,可以在后续继续详细地“实操演示”某些技术;如果大部分人希望加快靶场进度和关注重点实战环节,那就保留详细文档为主,关键处点到即可。


二、回顾 88 号机器所获得的信息与整体攻击思路

1. 88/77 机器的背景与注入思路

  1. 88/77 机器背景

    • 整体背景设定:目标可能是某种“暗网”或者灰色渠道销售的数据库/信息,如果我们不想花钱买就需要技术上突破。

    • 本次情境为:我们在渗透 88 这台机子时,发现有 SQL 注入可能性,想要通过手工或自动化测试来拿到更多信息。

  2. 注入前的逻辑

    • 在这类目标里常见做法:我们通过字典、payload 尝试,看看是否能注入成功。

    • 强调过一句核心:“在 SQL 注入中,要根据表单逻辑和业务逻辑去反推开发者会怎么写 SQL 语句”,尤其是复杂业务,不能只依赖 sqlmap 默认爆破或大力出奇迹,否则容易失败。

    • 手工与工具互补:若注入点比较常见或简单,sqlmap 可能拿到结果;若遇到防护和绕过要求,就要手工对 payload 做调整。

2 实际找到可注入点并验证成功

  1. 具体注入点

  • 88 机器有一个搜索功能,会根据“search term”去检索出用户名、邮箱、密码、hash、电话等信息。

  • 注入时也会去参考一些payloads

    https://github.com/payloadbox/sql-injection-payload-list

  • 通过不断测试

    根据开发经验,以常⽤payload⼏经尝试,发现 RedteamNotes' ) or 1=1 -- - 可以触发sql注⼊。

    尝试的经验和优先级影响因素,也包括运⽓:

    例如,假设有⼀个原始的SQL查询,它在WHERE⼦句中包含了⼀对括号:

    SELECT * FROM users WHERE (search_term = '<input_term>') AND category = '<dropdown_value>';


    如果攻击者将⽤户名输⼊为 anything') OR 1=1 -- - ,那么查询将变成:

    SELECT * FROM users WHERE (search_term = 'RedteamNotes' ) or 1=1 -- -') AND category = 'username';




  • 成功发现:在搜索条件处,加入特定的 闭合字符和逻辑(例如 tess ' ) or 1 = 1 -- - 或在后面再补一个括号之类),能够触发 SQL 成功执行。

    tess ' ) or 1 = 1 -- -






    将这些重要信息拿出来做细致的分析

    keyboard_arrow_rightEdaboard
    username: 
    email: bob@live.com
    password: P@ssw0rd1!
    hash: 3684311f2ab8cdb11eb6bdc159bd880d
    mobile: +90 432 652 14 13
    
    keyboard_arrow_rightGoGames
    username: Junglelee
    email: kim.stone@protonmail.com
    password: P@ssw0rd1!
    hash: 3684311f2ab8cdb11eb6bdc159bd880d
    mobile: +90 653 111 67 35
    
    keyboard_arrow_rightLinuxForums
    username: linuxrobert
    email: robert@0x0security.com
    password: iL0v3l!nux
    hash: d8f40ecca9c23d665cb86579ab62c586
    mobile: +90 921 525 87 74
    
    keyboard_arrow_rightLupaWorld
    username: khalifaLife
    email: jim.khalifa@hotmail.com
    password: P@ssw0rd1!
    hash: 3684311f2ab8cdb11eb6bdc159bd880d
    mobile: 
    
    keyboard_arrow_rightMoneyBookers
    username: bob.billings
    email: bob.billings@protonmail.com
    password: P@ssw0rd1!
    hash: 3684311f2ab8cdb11eb6bdc159bd880d
    mobile: APTLABS{P@sS0rD_R3Us3}
    
    keyboard_arrow_rightcollection1
    username: mak
    email: mark@0x0security.com
    password: $Ul3S@t0x0S3c
    hash: 35aaa279711af9353dcd8f2e5c22b86b
    mobile: +90 433 794 13 53
    
    keyboard_arrow_rightgigantichosting
    username: bob
    email: bob@gigantichosting.com
    password: P@ssw0rd1!
    hash: 3684311f2ab8cdb11eb6bdc159bd880d
    mobile: +90 763 995 34 55

  • 首先,经过我们前期的信息收集从10.10.110.231哪里获取到了这个公司内部分角色的职位和邮箱信息



    而且当时已经在10.10.110.74:25这台部署了SMTP的机器上验证了这些邮箱是真实存在的

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




    经过尝试
    bob.billings
    P@ssw0rd1!

    可以登录Django
    http://10.10.110.62/admin


    mark@0x0security.com
    $Ul3S@t0x0S3c

    可以登录nextcloud
    https://nextcloud.0x0security.com

第二个flag---10.10.110.88

=====================
APTLABS{P@sS0rD_R3Us3}
=====================

第三个flag---10.10.110.62

http://10.10.110.62/admin

bob.billings
P@ssw0rd1!




=====================
APTLABS{C3rT!fIcAt3_M@nAg3r}
=====================

这里继续看Django 的内容
Certificate Authorities
证书颁发机构

Certificate
证书






  • 特别关键:需要在末尾注意括号的用法,否则逻辑顺序会错,导致注入失败。









  1. “为什么要用括号”

    • 开发者在拼接 SQL 语句时,可能使用了更复杂的查询逻辑或多个 AND/OR 的组合。有时为了表达优先级或可读性,代码里会额外加括号。

    • 注入者需要猜到这一点,必须注意到“后面可能存在一个‘)’,必须再额外用 ‘(’ 来正确闭合”,否则注释无法生效或逻辑不通。

    • 这就是注入里典型的“推断后端 SQL 拼接方式”的过程。

  2. 成功后获取到大量数据

    • 注入成功可看到用户表里存有大量信息(用户名、email、明文密码、电话、hash 等),这些就是泄露数据库。

    • 实战中会把所有信息导出来、存成原始数据,以便之后做撞库业务分析其他子系统尝试

    • 在这个靶场中,得到了一些用户名和密码,有的人使用外部邮箱(如 live、gmail),有的人使用企业邮箱(@0x0security@gigantic 等),还有一些特殊加密或明文密码字段。

  3. 旗标(Flag)

    • 在这个数据表中还找到了第二个 Flag(题目会设置若干 Flag 来验证进度)。

2.3 利用泄露的账号密码尝试其他系统登录

  1. 思路:撞库尝试

    • 靶场里我们已知道多台机器的不同服务端口,比如 Nextcloud(云盘/协作服务)、SSHJungle Administration(某种管理后台),都有可能用到同一批账号密码。

    • 实战中,如果拿到几十上百条密码,就要用脚本/自动化来批量爆破撞库,因为手工挨个输入耗时且易出错。

    • 也要根据用户角色和重要性做优先级排序,比如 CTO 级别、技术负责人更有可能复用自己的密码。

  2. 在靶场中具体测试的三处

    • SSH(22端口):脚本爆破后发现暂无可用,获取不到登录成功。

    • Nextcloud:可登录界面,但是有的账号需要二次验证(2FA),比如 mark 帐号提示必须二步验证,所以登录失败。

    • Jungle 管理后台:某些组合测试成功,比如 “bob” 的某条明文密码就可登录到 Jungle Administration

  3. Jungle Administration 的功能

    • 登录进 Jungle Admin 后,能看到有一个证书管理(Certificate Manager) 界面。可见它被用于统一管理多个站点的 SSL 证书(例如 gigantic hostingHTB0x0security 等证书都在此平台管理)。

    • 除此之外暂时还没看到更多敏感功能。

    • 这里拿到了第三个 Flag。

  4. 考虑后续可能的渗透

    • 已有一些新的账号/密码,但许多服务(Nextcloud)有 2FA,我们无法直接进。

    • SSH 也未爆破成功。

    • 已拿到证书管理后台,但目前尚不清楚能否利用这些证书进行 MITM 攻击或其他方式进行突破。

    • 暂时没有更进一步的漏洞/信息,只能先进行评估,看下一步可能的**“钓鱼(phishing)”方案,因为内网基本没开口子、外部也没有明显的 web 漏洞**,只能设法通过社工邮件等方式突破。

    • 在真实实战里,如此局面也确实非常常见 —— 如果没有更多 0day 或 Nday 漏洞,就要结合社会工程手段来做突破。

2.4 评估与阶段总结

  1. 对整个 88 机器的攻击过程

    • 通过 SQL 注入或通过系统自带泄露库比对(在某些场景下也可以直接在暗网或撞库平台上检索)拿到大量账号密码 → 进行多系统登陆尝试 → 最终拿到 Jungle Admin 后台、证书管理权限和一些 Flag。

    • 这个机器给我们的启示:SQL 注入里一些“细节”(括号、注释、逻辑顺序)才是最常见的绊脚石,需要深入理解。

  2. 后续总体攻击规划

    • 目前除非再找到额外漏洞,否则可能只能转向钓鱼

    • 后续直播会进入 钓鱼专题,并且会在某些场景中穿插盲注更多细节、C 编程注入、DNS 出站等更高阶的注入技巧。

    • 整体上为了不耽误攻防流程,会把这些注入知识进一步拓展(比如深度盲注、大体量数据提取、DNS-based exfiltration、自动化脚本、最优绕过、MS SQL/Oracle/MySQL 的差异等)拆分到合适时机系统讲解或留在文档中。


三、SQL 注入高级/盲注专题的系统性梳理

这一部分是笔记中相当大的一块,从布尔盲注时间盲注,以及基于DNS带外的注入和自动化脚本优化等。讲者多次提到体量巨大,会在合适时机再次详讲。这里先把直播中已经提到的内容与思路按照原顺序做最完整的呈现,并加上扩展

3.1 SQL 注入常规概念回顾

  1. 常见数据库与命令行工具

    • 常见数据库:MySQL、PostgreSQL、MS SQL(又称 SQL Server)、Oracle、IBM DB2 等。

    • 交互工具:

      • MySQL: mysql 命令行

      • PostgreSQL: psql

      • MS SQL: sqlcmdosql(老版本)或 sqlcmd + SSMS(SQL Server Management Studio)

      • Oracle: sqlplus

    • 在渗透测试或红队实战中,横向移动常常需要手动连接这些数据库,测试账号口令是否可直接登录数据库获取进一步权限。

  2. 基础原理

    • SQL 注入:由于“将用户输入直接拼接到 SQL 语句中”导致的漏洞。

    • 防御:对输入进行严格检查或使用安全的参数化语句,而非字符串拼接。

    • 进攻:在知道或猜测后端数据库类型、表结构时,插入精心构造的payload,实现“信息读取”或“权限提升”等目的。

3.2 盲注(Blind SQL Injection)基础

  1. 定义

    • 盲注指的是:后端仍然存在注入点,但应用并不回显报错信息或结果,只有“对”或者“错”、“存在”或“不存在”之类极少量反馈,也可能是页面有些差异、或者在响应延时上有差异。

    • 常见分类:

      • 基于布尔值的盲注(Boolean-based Blind):应用只返回两种状态,表示 True 或 False。

      • 基于时间的盲注(Time-based Blind):通过 sleep() 等方式来判断注入是否成功,如果数据库延迟响应,就代表一定程度上的 True/False。

  2. 为什么会出现盲注

    • 开发者对错误、异常做了统一处理,不会把 SQL 报错直接抛给前端,但并没有彻底过滤或使用安全写法,导致依旧可以通过巧妙的条件判断,推理出数据库信息。

3.3 布尔型盲注的举例与代码分析

  1. 示例一:PHP简化逻辑

    • 伪代码中:

      $email = $_GET['email'];
      $sql = "SELECT * FROM users WHERE email = '$email'";
      $result = $db->query($sql);
      if($result->num_rows > 0){
          echo "找到email";
      } else {
          echo "没有找到email";
      }
      
    • 开发者只输出“找到email”或“没有找到email”,不会输出数据本身。

    • 注入者通过在 $email 里植入诸如 ') AND (条件)-- 的方式,如果能让程序走到“找到email”分支,就代表布尔判断为真,否则为假。

    • 由此可以不断构造各种布尔表达式来一点点推理数据库中的实际信息。

  2. 示例二:注册场景

    • 注册时,输入用户名后,前端提示“用户名可用”或“用户名被占用”。

    • 这种二元提示也是布尔盲注的典型场景。

    • 在笔记中,代码流程大致为:

      • Ajax 调用 check_username.php?username=...

      • 后端再拼接查询 SELECT id FROM users WHERE username='$username'

      • 如果查到结果,就返回“占用”(token),没查到则返回“可用”(available)。

    • 攻击者可以先找一个确定存在的用户名(比如 mary),这样在继续构造盲注时,如果注入成立,就会走“占用”分支,否则走“可用”。

  3. 如何自动化:判定工具(oracle)

    • 由于盲注每次只能返回 True/False,需要写脚本或用工具来递归/循环提取数据。

    • 思路

      1. 找到一个已知存在的 username(比如 mary),构造 username=mary' AND (payload)--

      2. 如果页面回传 token(占用),说明布尔条件为 True;如果回传 available,说明布尔条件为 False;

      3. 这样就把一次HTTP请求变成一个“一元测试”,可不断细化查询。

    • 在 Python 中,会写一个函数 oracle() 或类似函数,负责发送请求并判断回显是否为“token”或“available”,从而得知 True/False。之后就可用循环或二分法等来“爆”字段、长度、字符等。

3.4 提取数据的原理(以布尔盲注为例)

  1. 先确定字段长度

    • 例如,猜测 length(email) 是否等于 X,逐步或采用二分逼近,得到确切长度。

  2. 再确定每个字符

    • 最简单的方式:从 ascii(32)ascii(126) 依次测试:

      AND ascii(substr(email,1,1))=97
    • 如果为 True,说明第一字符是 'a';如果为 False,测试下一个 ascii 值……

    • 在这种纯线性方法中,一次字符判断可能要发 90 多次请求(如果字符集设在 32~126)。

  3. 时间消耗问题

    • 如果字段较长(如 30 多位),加上要获取多个字段、多个表名,请求量激增,盲注往往非常慢。

3.5 提速方法:二分法 & 位运算

这是直播中非常强调的优化点,因为盲注若只用最原始的线性爆破,可能耗时几小时或更多。

  1. 二分法(Binary Search)

    • 原理:将字符的取值范围不断对半拆分,用“>”或“<”判断字符的ASCII码落在哪个区间。

    • 例如:初始范围 0~127,取中点 63,测试 ascii(字符) > 63 吗?

      • 如果为真则新范围是 64~127

      • 如果为假则新范围是 0~63

    • 如此对半缩小,只需要 log2(128) = 7 次就能定位一个字符,也就是一个字符只需要约 7 次测试。

  2. 位运算(Bitwise,基于 AND)

    • 利用位运算,可以更进一步减少请求。

    • ASCII值在 0~127 对应 7 位二进制,按位判断:

      AND (ascii(substr(email,1,1)) & 64) > 0
      AND (ascii(substr(email,1,1)) & 32) > 0
      ...
    • 通过判断结果是 True/False,就知道该位是 1 还是 0,一次可锁定一整个字符只需要 7 次请求。

    • 实测中,位运算往往还略快于二分法。

  3. 多线程并发

    • 盲注中,每个字符的猜测彼此独立,可用多线程同时测试所有字符。

    • 这样就可以极大地提高速度,从几十分钟降到几分钟甚至更短。

    • 这也是实际中必须考虑的一个重要优化点。

3.6 基于时间的盲注(Time-based Blind)

  1. 思路

    • 若页面回显“固定”,无法从中区分 True/False,可以尝试让数据库执行 sleep(N) 等操作:

      • 如果条件为真,则执行 sleep(5);如果条件为假,则不执行(或 sleep(0))。

    • 通过对响应延时的判断来获知 True/False。

  2. 常用方法

    • AND IF(条件, SLEEP(5), 0) (MySQL 常见)

    • AND case when (条件) then pg_sleep(5) else pg_sleep(0) end (PostgreSQL)

    • MSSQL 里可用 waitfor delay '0:0:5'

  3. 缺点与要点

    • 缺点:更耗时,对网络稳定性要求高。若网络抖动,会干扰判断。

    • 与布尔盲注类似,也可以使用二分法、位运算等减少查询次数。

3.7 其他高级注入点与带外(Out-of-band)注入

  1. DNS 带外注入

    • 一些数据库(如 MSSQL、Oracle、MySQL)在一定权限下,可发 DNS 请求到外部域名。如果能让数据库做 DNS 查询,就可把数据打包进子域请求进行带外泄露

    • 常用技巧:LOAD_FILE(), INTO OUTFILE, xp_dirtree(MSSQL) 等等,结合一个控制权在手的 DNS 服务器Burp Collaborator 等服务,用来收集从目标发出的 DNS 请求。

  2. Burp Collaborator

    • Burp Suite Pro 提供的一个集成服务,可生成形如 xxxxxx.burpcollaborator.net 的域名,用来检测 SSRF、DNS/HTTP请求外带数据、命令执行等。

    • 在盲注中,如果后端数据库支持 nslookup 或类似函数,就能把数据通过 DNS 解析的方式发送到 xxxxxx.burpcollaborator.net,从而在 Burp 端收到外带数据。


四、其他补充

  1. 扩展:信息收集和业务逻辑分析的重要性

    • 在上述 SQL 注入的尝试里,不仅要爆破技术本身,也要结合业务场景分析:该用户是谁、可能在哪些系统继续登录、如何优先撞库等。

    • 大量信息(如邮箱地址、姓名、角色、电话)要做分类和优先级排序,以免盲目尝试浪费时间。

    • 实战中团队合作时,要保持原始数据与分析后的数据都完整,以便后续随时追溯。

  2. 扩展:为什么实战中有时直接钓鱼更快

    • 直播中提及:有时候社会工程学手段(比如钓鱼邮件、冒充企业内部人员发信息)能比技术漏洞挖掘更快速获取目标权限。

    • 但技术渗透与社工手段通常要一起推进,不能只靠社工或只靠技术。

  3. 扩展:在红队演练里,对SQL注入的高要求

    • 虽然很多人认为如今框架更加安全,SQL注入减少,但在一定数量庞大的系统里,仍有不少地方存在注入点。

    • 而实际碰到的注入往往是盲注二次注入等相对更隐蔽的形式,这就需要掌握上述各种优化技术,以及对数据库特性的灵活运用。

  4. 提醒:钓鱼专题即将开始

    • 因为靶场进度中,88号机子获取信息后,其他端口/服务已经很难继续突破,下一步要进行钓鱼攻击环节。

    • 将在下一次直播(周二)详细讲如何使用内部或外部邮件服务器去发起钓鱼,如何利用已有的部分信息、角色定位去实施社会工程等。


五、结语

  • 本次直播的主要内容聚焦在完成 88 机器的 SQL 注入,并总结阶段性收获

    • 拿到大量泄露数据 → 找到多处系统 → 多次测试 → 部分成功登录 → 获得证书管理后台 + Flag。

    • 同时对“注入”领域展开了部分进阶技术(尤其是盲注、二分、位运算、多线程加速等)。

  • 由于篇幅所限,直播中提到的更多盲注、带外注入、高级技巧会在后续的资料或专题课程中继续深入。

  • 下周二开始,进入钓鱼专题,并逐步解锁新的靶场目标与思路。

-.-

0

评论区