黑盒渗透DC-2报告总结
一、渗透设备
kali、vsphere(两台网络连接都为NAT模式,两台在同一个网段中)
二、任务描述
黑盒渗透:在渗透拿到授权之后,什么信息都没有,需要找出风险点;
何为渗透,在定义好目标之后,朝着目标前进,中间碰到阻碍要么攻击掉要么绕过(详尽的信息收集(打点、踩点))
三、步骤
1)信息收集 - 网络主机发现
1、命令: nmap -sP 192.168.X.0/24
作用: 这是初步侦查。
详细解释:
-sP
参数代表 Ping 扫描。该命令会向指定网段(例如 192.168.1.0/24)内的所有 IP 地址发送探测包,然后根据主机的响应来判断哪些 IP 地址上有存活的主机。这一步的目的是快速确定靶机dc-2
的 IP 地址。
2、命令: nmap -A -p- 192.168.X.X
作用: 这是深度侦查。
详细解释:
-p-
: 扫描目标主机的所有端口(1-65535),而不仅仅是默认的常用端口。-A
: 启用激进模式,包括操作系统检测、版本检测、脚本扫描和路由追踪。这会尝试识别出每个开放端口上运行的是什么服务(如 Apache HTTPD、OpenSSH)及其具体版本号。
目的: 全面了解目标主机对外开放的服务,为后续攻击提供突破口。例如,发现 80 端口(HTTP)开放,意味着有一个网站;发现 7744 端口(SSH)开放,意味着可以通过 SSH 远程连接。
2)修改host文件
C:/Windows/System32/drivers/etc/hosts文件中加入以下ip地址: dc-2
、Google 翻译
作用: 本地 DNS 解析欺骗。
详细解释: 靶机
dc-2
可能是一个基于域名的虚拟主机。这意味着直接通过 IP 地址访问网站,可能看不到正确的内容。通过修改本机的hosts
文件,可以手动将域名dc-2
指向其正确的 IP 地址。这样,当你在浏览器中输入http://dc-2
时,你的电脑就知道要去访问哪个 IP。添加 Google 翻译域名: 这是因为靶机网站可能引用了 Google 翻译的服务,如果无法连接这些服务,可能会导致页面加载不正常或功能异常。
3)访问网站,获取 Flag 1
作用: 直接获取初步成果和信息提示。
详细解释: 这是渗透测试中最直接的一步。访问网站首页,很可能在页面的源代码或显眼位置找到第一个 Flag(Flag 1)。这个 Flag 通常包含对后续步骤的提示,例如提示你使用 CeWL 工具。
4)目录爆破
作用: 发现隐藏的目录和文件。
详细解释: 网站除了首页,还有很多不直接链接出来的后台管理页面(如
/admin
,/login
)、配置文件(如/config.php
)等。使用工具(如御剑、DirBuster、gobuster)或手动猜测,可以尝试找出这些隐藏的路径。目的: 找到网站的登录后台,为下一步爆破用户名和密码做准备。
5)使用 WPScan 枚举 WordPress 用户
1、wpscan --update
2、vim /etc/hosts
使用wpscan过程中发现无法连接目标服务器,分析原因因为是域名访问,当前没有连接DNS服务器,所以在攻击机器上也要修改hosts文件,加入dc-2 ip地址
思路:找后台 -- 猜用户名 – 做字典 -- 爆破 -- 目标登录后台
3、命令: wpscan --url dc-2 -e u
作用: 针对 WordPress 网站的专用信息收集工具。
详细解释:
-e u
参数表示枚举用户。WordPress 网站在某些配置下会暴露用户名(例如,文章作者链接)。WPScan 会利用这些特性,尝试获取到网站的所有注册用户名。目的: 为密码爆破创建精准的用户名字典。不知道用户名就无法进行有效的密码爆破。
4、touch user.txt
主要功能:
创建一个名为 "user.txt" 的空文件
具体作用:
如果 user.txt 文件不存在:创建一个全新的空文件
如果 user.txt 文件已存在:更新该文件的"最后修改时间"为当前时间,但不会改变文件内容
5、ls
6、vim user.txt
6)使用 CeWL 生成自定义密码字典
1、命令: cewl dc-2 > pwd.txt
作用: 根据目标网站的内容生成个性化的密码字典。
详细解释: CeWL 会爬取指定网站的页面,提取所有独特的单词。因为人们常常使用与网站内容相关的词语作为密码(例如公司名、产品名、文章标题等),所以这个工具生成的字典比通用的弱密码字典更具针对性,爆破成功率更高。
目的: 将生成的单词列表保存为
pwd.txt
,作为爆破密码的字典。
2、ls
7)使用 WPScan 进行密码爆破
1、命令: wpscan --url dc-2 -U user.txt -P pwd.txt
作用: 尝试用准备好的用户名和密码字典登录 WordPress 后台。
详细解释: WPScan 会使用
user.txt
中的每个用户名和pwd.txt
中的每个密码进行组合尝试,模拟登录过程。目的: 获取到有效的后台账户凭证。这里成功找到了
jerry
和tom
的密码。
8)登录网站后台,获取 Flag 2
作用: 进入内部系统,寻找漏洞和敏感信息。
详细解释: 使用爆破得到的
jerry
的账号密码登录 WordPress 后台。在后台中(如文章、页面、主题编辑器等地方)找到了 Flag 2。提示意义: Flag 2 的提示 “If you can't exploit WordPress, take another look” 暗示 WordPress 这条路可能无法直接获取服务器权限,需要回顾之前的信息,寻找其他突破口(比如第 1 步中发现的 SSH 服务)。
9)SSH 连接与受限 Shell (rbash)
1、nmap -A 192.168.X.X -p-
重新扫描全端口,发现ssh协议开放,使用tom用户远程连接尝试登录服务器
2、命令: ssh tom@192.168.X.X -p 7744
作用: 利用获取的凭证进行横向移动。
详细解释: 使用
tom
的密码通过 SSH 连接到靶机的 7744 端口,成功获得了一个远程 Shell。但这只是一个受限制的 Shell,很多命令(如cat
,ls
)无法使用,路径被锁定,这是系统管理员设置的一种安全措施。
3、ls
4、cat flag3.txt
命令被rbash限制了。那就想办法绕过权限。
10)绕过受限 Shell (rbash)
使用内置函数方法
1、BASH_CMDS[a]=/bin/sh;a
2、/bin/bash
3、export PATH=$PATH:/bin/
4、export PATH=$PATH:/usr/bin
方法: 使用 BASH_CMDS
变量和修改 PATH
环境变量。
作用: 提权,突破命令限制。
详细解释:
BASH_CMDS[a]=/bin/sh;a
: 为 BASH 的内置命令字典创建一个指向/bin/sh
的条目,然后执行它,从而启动一个不受限制的 Shell。export PATH=$PATH:/bin/:/usr/bin
: 将常用的命令路径(/bin
,/usr/bin
)重新添加回环境变量PATH
中,这样系统就能找到cat
,ls
等命令了。
目的: 恢复对系统的正常命令行访问权限,从而可以读取
flag3.txt
。
5、cat flag3.txt
成功提权并读取flag3
11)切换用户,获取 Flag 4
1、命令: su jerry
作用: 横向移动,利用低权限用户之间的信息差。
详细解释: 使用在 WordPress 后台找到的
jerry
的密码,通过su
命令切换到jerry
用户。在jerry
的家目录中找到了 Flag 4。提示意义: Flag 4 提示使用
git
命令,这为最终的 Root 提权指明了方向。
2、cd ..
3、ls
4、cd jerry/
5、ls
flag4.txt
6、cat flag4.txt
发现提示让我们使用git命令
12)利用 Sudo 权限进行 Root 提权
1、命令: sudo -l
作用: 检查当前用户被允许以何种权限运行哪些命令。
详细解释: 这个命令列出当前用户(
jerry
)可以使用sudo
权限执行的命令。结果显示jerry
可以以 root 身份运行git
命令,且不需要输入 root 密码。这是一个重大的配置漏洞。
2、命令: sudo git help config
后输入 !/bin/bash
作用: 权限提升至 root。
详细解释: 这是利用 Git 的一个特性。当使用
git help <command>
时,Git 会调用默认的分页器(通常是less
或more
)来显示帮助文档。在这些分页器中,输入!
后跟命令,可以直接执行 Shell 命令。因为git
命令是以 root 权限运行的,所以由此启动的/bin/bash
也就具有了 root 权限。目的: 成功获得系统的最高控制权,可以读取
/root
目录下的最终 Flag。
3、cd /root/
4、ls
final-flag.txt
5、cat final-flag.txt
这个流程完整展示了渗透测试的基本方法论:信息收集 → 漏洞分析 → 漏洞利用 → 权限提升 → 获取目标。从外部侦查开始,到攻破 Web 应用,再到内部横向移动,最后利用配置错误完成提权,每一步都环环相扣。
四、拓展
这些命令是 Linux 系统中与用户账户和密码管理相关的核心命令,通常用于系统管理,但在渗透测试中,攻击者获取 root 权限后会使用它们来巩固权限(后渗透阶段)。
1. cat /etc/passwd
作用: 显示系统上所有用户账户的基本信息。
详细解释:
这个文件是一个纯文本数据库,每一行代表一个用户账户。
格式为:
用户名:密码占位符(x):用户ID(UID):组ID(GID):描述信息:家目录:登录Shell
例如
root:x:0:0:root:/root:/bin/bash
表示:root
: 用户名x
: 密码的占位符,实际加密后的密码存储在/etc/shadow
文件中。0
: UID,0 代表 root 用户。0
: GID,主组ID。root
: 描述或全名。/root
: 用户的家目录。/bin/bash
: 用户登录后默认使用的 Shell。
在渗透测试中的意图:
攻击者查看这个文件是为了确认当前获取的 root 权限(看到 root 行)。
同时枚举系统上的所有其他用户(如 jerry, tom 等),为可能的横向移动做准备。
2. cat /etc/shadow
作用: 显示用户的加密密码哈希值以及其他与密码相关的信息。
详细解释:
这个文件是高度敏感的系统文件,只有 root 用户有读取权限。
格式为:
用户名:加密的密码哈希:最后一次修改密码的天数:密码最小有效期:密码最大有效期:警告期:密码失效宽限期:账户过期时间:保留字段
最重要的部分是第二个字段,即加密的密码哈希。如果该字段是
*
或!
,则表示该账户被锁定,不能用于密码登录。
在渗透测试中的意图:
这是极具攻击性的操作。攻击者的主要目的是获取密码哈希。
获取哈希后,可以尝试:
密码破解: 使用工具(如 John the Ripper, Hashcat)离线破解这些哈希,以获取明文字密码。如果其他系统使用了相同的密码,就可以实现横向移动。
哈希传递攻击: 在某些网络环境中,直接使用哈希值进行认证,而无需破解。
在这个例子中,命令被执行但没有输出(可能是因为截图不完整,或者
shadow
文件内容为空或不可读,但这很不寻常),正常情况下会显示所有用户的密码哈希。
3. passwd root
作用: 修改指定用户(这里是 root)的登录密码。
详细解释:
这是一个交互式命令。执行后,系统会提示输入新的密码。
因为当前会话已经是 root 权限,所以可以修改任何用户的密码,包括 root 自身,而无需输入旧密码。
在渗透测试中的意图:
巩固权限 / 创建后门! 这是攻击者成功提权后非常关键的一步。
原来的 root 密码可能攻击者不知道(可能是随机生成的强密码)。通过修改 root 密码,攻击者可以:
确保未来访问: 即使当前的漏洞被修复,攻击者仍然可以通过 SSH 等服务使用新设置的密码以 root 身份直接登录系统。
排除干扰: 如果这是一个多人演练的靶机,修改密码可以防止其他参与者“抢占”root 权限。
完全控制: 标志着对系统拥有了完全和持久的控制权。
五、总结
1、目录爆破
2、WordPress专项扫描(WPScan)
功能:
检测WordPress版本、主题和插件信息;
发现WordPress网站中可能存在的漏洞和弱点;
寻找WordPress网站管理员账号;
探测WordPress登录页面和后台管理页面的地址;
尝试使用弱口令对WordPress网站进行爆破;
收集WordPress网站的目录结构信息;
生成漏洞扫描报告等。
3、自定义字典生成(CeWL)
Cewl是一个用于生成自定义字典的开源工具,它可以从指定的目标网站或文本文件中提取出关键词,并根据这些关键词生成自定义字典,以便于密码爆破等安全测试活动中使用。Cewl使用Ruby编写,支持在Linux、macOS和Windows等操作系统上运行,并提供了丰富的命令行选项和功能。
功能:
从指定的目标网站中提取出关键词;
从指定的文本文件中提取出关键词;
根据提取出的关键词生成自定义字典;
进行字典去重、排序、大小写转换等处理;
输出生成的字典文件等。
4、HTTP登录爆破替代方案
另一种破解HTTP登录账密通用手法,方法如下(扩展)需要使用burp suite工具
hydra -L user.dic -P pwd.dic dc-2 http-post-form "/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=LogIn&testcookie=1:S=location" -vV -o result.txt
这个命令的作用是使用Hydra工具对HTTP协议进行账号密码字典爆破。具体来说,它会读取两个字典文件user.dic和pwd.dic,其中分别存储了用户名和密码的可能候选值,然后通过Burp Suite捕获的HTTP POST请求在目标网站的登录页面(/wp-login.php)上不断尝试不同的用户名和密码组合,以测试哪些组合可以成功登录到网站。
各个参数的含义如下:
-L user.dic:指定包含用户名列表的字典文件名。
-P pwd.dic:指定包含密码列表的字典文件名。
dc-2:指定目标主机的IP地址或域名。
http-post-form:指定要攻击的目标协议和请求方式。
"/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=LogIn&testcookie=1:S=location":定义目标网站的登录请求格式。其中,"^USER^"和"^PASS^"将在攻击过程中分别被替换为不同的用户名和密码,"wp-submit=LogIn"表示登录按钮的名称,"testcookie=1"表示要求服务器设置一个测试Cookie,而"S=location"表示如果攻击成功,就重定向到/target/路径下的网页。
-vV:开启详细日志模式,输出更多的结果信息。
-o result.txt:将结果保存到result.txt文本文件中。
5、rbash(受限Bash)绕过技术
rbash是restricted bash的简称,是一种受限制的shell。在Linux系统中,rbash是一种特殊的bash shell,可以作为一个用户的默认shell。与标准bash shell相比,rbash使用了一些安全措施,限制了用户对系统的访问权限。
当一个用户使用rbash作为其默认shell时,该用户将被限制只能执行一些基本的命令,例如cd、ls和echo等,并且不能使用绝大多数的shell功能,如变量赋值、重定向、管道和通配符扩展等。此外,用户还不能改变当前工作目录以外的环境变量。
通过限制用户的权限,rbash可以帮助管理员更好地保护系统的安全性。它可以用于限制某些用户的操作范围,特别是那些不需要完全的shell功能的用户,如FTP用户等。
绕过rbash限制的技巧和漏洞:
- 使用绝对路径:虽然rbash限制了用户不能使用绝大多数的shell功能,但是它允许用户执行具有绝对路径的命令。因此,如果用户知道某个文件的绝对路径,他们就可以在rbash环境中执行该文件。
- 利用符号链接:用户可以创建符号链接来绕过rbash的限制。例如,用户可以创建一个指向/bin/sh的符号链接,并使用该链接作为其默认shell。这将使用户可以在rbash环境中运行完整的bash shell。
- 利用别名:用户可以使用别名来代替原始命令。在rbash环境中,别名仍然是有效的。因此,如果用户定义一个别名来代替受限制的命令,他们就可以在rbash环境中绕过限制。
- 利用shell内置函数:虽然rbash限制了用户能够使用的大多数shell功能,但是它仍然允许用户使用一些内置函数。因此,用户可以利用内置函数来绕过rbash限制。
6、最终提权阶段
内置函数方法:
BASH_CMDS[a]=/bin/sh;a
/bin/bash
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin
这些命令的组合通常用于在内网渗透测试中实现提权,其目的是为了让攻击者能够以root权限运行命令或者程序,从而获取更高的系统访问权限。
这个命令组合的作用如下:
1. BASH_CMDS[a]=/bin/sh;a: 这个命令是使用Bash Shell特有的环境变量BASH_CMDS,将一个名为"a"的自定义命令与/bin/sh关联起来。执行这个命令时,Shell就会调用/bin/sh并执行其中的代码。
2. /bin/bash:这个命令是直接启动Bash Shell。这个步骤主要是为了确保当前的Shell进程是Bash Shell,因为后续的命令都依赖于Bash Shell。
3. export PATH=$PATH:/bin/ 和 export PATH=$PATH:/usr/bin:这两条命令分别将/bin和/usr/bin目录添加到环境变量PATH中。由于PATH环境变量指定了Shell在哪些目录中查找可执行文件,这里添加/bin和/usr/bin可以让Shell在搜索时能够找到这些目录下的程序和命令。这对于一些需要提权的攻击技术非常重要,例如通过找到setuid的可执行文件来提权等。
这个命令组合的目的是为了确保当前Shell进程是Bash Shell,并将/bin和/usr/bin目录添加到PATH环境变量中,以便在后续执行提权攻击时能够搜索到需要的文件和命令。同时,这个命令组合还使用了BASH_CMDS来创建自定义命令"a"并与/bin/sh相关联,在后续攻击中可能会用到。
7、名词解释
环境变量是一种在操作系统中用来保存配置信息、应用程序路径、文件位置、语言设置等数据的机制。可以将环境变量简单地理解为一组全局可用的变量,它们不像普通变量那样只存在于脚本或程序的执行上下文中,而是可以被整个系统和所有进程共享和访问。
例如,在一个Linux系统中,PATH环境变量用于指定Shell在哪些目录中查找可执行文件。当我们在命令行输入一个命令时,Shell会根据PATH环境变量中定义的一系列目录依次搜索,直到找到与命令同名的可执行文件并运行它。这样,我们就可以在任何地方都能够使用常用的命令,比如ls、cd、ping等。
类似的,其他环境变量也可以用来控制不同的系统行为和应用程序设置,例如LANG环境变量用于指定默认语言环境,HOME环境变量用于指定用户的主目录等等。由于环境变量是一种全局的机制,因此在系统中的任何地方都可以通过读取和修改环境变量来改变系统或应用程序的行为。
Shell是一种命令行解释器,用于接受用户输入的命令并将其传递给操作系统内核执行。它是用户与Linux操作系统之间的主要接口,并提供了许多功能,如文件操作、进程管理、环境变量设置等等。Shell脚本也可以用来编写自动化任务和管理系统配置等。在Linux系统中,常见的Shell包括Bash(Bourne-Again SHell)、zsh(Z Shell)、ksh(Korn SHell)等。其中Bash是最常用的Shell之一,也是默认的Shell。
/bin/sh通常是指向Bash(Bourne-Again SHell)或dash(Debian Almquist Shell)其中之一的符号链接。这意味着在许多情况下,/bin/sh就是Bash或dash。
Bash和dash都是shell,它们有许多相似之处,但也存在一些区别。Bash更强大且功能更丰富,支持更多的特性和命令,例如历史记录、别名、条件语句等等。而dash则专注于尽可能地减小内存占用和启动速度,并且更符合POSIX标准,因此在某些场景下可能更适合使用。
在Linux系统中,/bin/bash通常是默认的Shell,而/bin/sh是为了兼容旧的脚本或者限制资源的环境。因此,如果您编写的脚本需要使用Bash的特定功能时,应该将脚本的shebang行(#!)指向/bin/bash,以确保脚本可以正确运行。