VulnHub-OSCP靶机
前言:由于这台机器过于简单,所以我会尽量细化和介绍每个步骤以及涉及到的知识点,让正在打入门机器的你不在迷茫和硬化的操作,理解并熟悉每条命令以及参数的含义,以及把前期带给我们的信息进行快速筛选,有利于新手构建完整的学习思路以及渗透测试架构,这也是对自身实力的分析的过程以及对自身是否真正掌握基础的考量。
主机发现
sudo arp-scan -l
以临时管理员身份扫描并列出本地活动ip
靶机ip:192.168.94.99
主机ip:192.168.94.230
信息收集
nmap扫描
-sT:扫描tcp端口
使用sT会与目标主机的端口完成完整的TCP三次握手,缺点是隐蔽性低 ,会被记录日志风险高(目标系统的防火墙或者服务日志可能会记录这次扫描),特点是扫描结果更加完整和准确,因为是完整的链接,某些设备严格过滤SYN包,可能只允许完整握手,如果你没有root权限的情况下,这个参数会是很好的选择。
nmap -sT 192.168.94.99
-sS:SYN半开放扫描
在扫描中 第一次发送SYN包到目标端口,如果目标返回SYN/ACK(第二次握手),说明端口开放,nmap立即发送RST终止连接(不完成第三次握手),如果目标返回RST说明端口关闭,如果无响应,可能被防火墙过滤(filtered)。
特性 说明 隐蔽性高 不建立完整连接,日志记录较少(比 -sT
更隐蔽)。速度快 比 -sT
更快,适用于大规模扫描。需要 root 权限 因为需要构造原始 TCP 包(Raw Socket)。 绕过简单防火墙 某些防火墙不会记录未完成的连接。 不适用于 Windows 目标 Windows 系统可能会异常响应,建议对 Windows 使用 -sT
。SYN包是什么?
SYN 包是一个 TCP 报文,其关键字段如下:
字段 说明 Source Port(源端口) 客户端的随机端口(如 54321)。 Destination Port(目标端口) 要连接的服务端口(如 80、443、22)。 Sequence Number(序列号) 客户端生成的随机初始序列号(ISN),用于后续数据包排序。 Acknowledgment Number(确认号) SYN 包中为 0(因为尚未收到对方的序列号)。 TCP Flags(控制标志位) SYN=1(表示这是 SYN 包),ACK=0(尚未建立连接)。 Window Size(窗口大小) 客户端声明的接收缓冲区大小(影响传输速率)。 Options(可选字段) 如 MSS
(最大报文段长度)、Window Scaling
(窗口缩放因子)等。TCP三次握手:在对目标进行第一次TCP链接发送SYN包
Client → SYN → Server(客户端发送 SYN 包)
Client ← SYN/ACK ← Server(服务端返回 SYN+ACK)
Client → ACK → Server(客户端确认,连接建立)
-
-sS
是 Nmap 最常用的扫描方式,速度快、隐蔽性高,但需要 root 权限。 -
-sT
适用于无 root 权限或 Windows 目标,但较慢且易被记录。 -
渗透测试优先使用
-sS
,日常探测可用-sT
。
-O:扫描探测操作系统的版本
nmap -O 192.168.94.99
-A:扫描各个服务,操作系统,以及默认脚本扫描。
nmap -A 192.168.94.99
-O和-A参数区别总结
选项 功能覆盖范围 扫描深度 输出信息量 -O
仅操作系统检测 浅(仅OS) 少 -A
OS + 服务版本 + 脚本 + Traceroute 深(全面扫描) 多 -A -O
同 -A
(冗余)同 -A
同 -A
快速OS识别 → 用 -O。
全面信息收集 → 用
-A
(无需再加-O
)。避免冗余:
-A -O
是多余的,因为-A
已包含-O
。-O仅限于识别操作系统,对于识别到的信息有限,相对于-O,-A的功能就很全面,根据需求的不同,日常的信息收集中使用-A就够了。
-p-:扫描全部端口(0~65535)
nmap -p- 192.168.94.99
信息收集分析
访问80端口
翻译:
嘿!欢迎参加狩猎要参与抽奖活动,您必须获得位于/root/中的根标志。一旦你获得了旗帜,请向TryHarder 机器人发送命令!flag<插入标志>,它随后会验证该标志以进行核实。如果验证结果不正确,它会告知您。如果验证结果是正确的,您将在服务器上获得一个新的角色,在此角色下您可以在私聊频道中与其他用户交流。一旦你得到了这个角色,你就进入了抽奖活动!您必须是服务器的成员才能使用上面的命令。对于那些在以后从 vulnhub 下载这个盒子的人,上面的命令将不再可用。哦是的!差点忘了这个盒子上唯一的用户是“oscp”。非常感谢进攻安全提供的代金券。狩猎愉快
是一个介绍页面根据提示信息,获得了一个用户名oscp,它可能是我们登录ssh的用户名,目前也 没有其他可用信息,现在我们做一次全面的扫描。
sudo nmap -sS -A -p- 192.168.94.99
robots.txt是位于网站根目录下的纯文本文件,会导致敏感信息泄露,所以这是一个很重要的提示信息,提示目录下面有一个secret.txt文件,我们访问一下,发现是一大串加密信息,这很像或者很可能就是base64加密后的密钥,既然上面给了我们用户名,那么现在发现的这个密钥也很可能就是登录ssh的密钥。
信息中robots.txt文件提示disallowed entry (禁止访问)/secret.txt
但是为什么我仍然能够访问这个文件,因为:robots.txt的作用对象是爬虫,限制爬取敏感信息,但不限于普通用户手动访问,以及curl或者nmap等渗透测试工具。
robots.txt
≠ 访问权限控制
-
robots.txt
只是告诉爬虫“不要索引”,但不会阻止访问。 -
真正的访问控制 应该由以下方式实现:
-
HTTP 认证(如 401 Unauthorized)
-
服务器权限(如 Apache/Nginx 的
Deny from all
) -
防火墙规则(如 IP 白名单)
-
错误认知:
“
Disallow: /secret.txt
表示这个文件被保护,无法访问。”
正确认知:
“Disallow: /secret.txt
只是告诉搜索引擎不要索引它,但文件仍可被直接访问。”
base64加密特征
-
大写字母:
A-Z
-
小写字母:
a-z
-
数字:
0-9
-
两个符号:
+
和/
-
填充符:
=
(用于末尾补位)
判断base64最快速的方法就是查看末尾是否有==,虽然很大可能是的,但也不保证不会是其他的加密。
echo输出这个密钥 管道符 | 隔开并以base64 -d 解码 > 重定向输出到id_rsa文件中,这个文件是我随便起名的,也是空的,即便没有这个文件,也可以在使用时同时创建。
查看一下解码后的内容
将它赋予仅所有者可读写,其他用户无权限。
chmod 600 id_rsa
拿到系统立足点
sudo ssh oscp@192.168.94.99 -i id_rsa
此时,你需要输入一些命令,来手工枚举一些用户的信息,这是渗透测试中必不可少的关键操作,比如whoami我是谁,oscp用户,id的用户,主组,属组以及附加组等等,pwd查看所处位置,以及一些系统信息等等,ls -al 查看并列出所有以及隐藏的文件。
suid提权
寻找根目录下是拥有特殊权限的文件,有很多提权的方式,我们目前就拿最常见的一个使用。
find / -perm -u=s -type f 2>/dev/null
部分 | 作用 |
---|---|
find / | 从根目录 / 开始递归搜索。 |
-perm -u=s | 查找 SUID 位被设置 的文件。 |
-type f | 仅搜索普通文件(排除目录、设备文件等)。 |
2>/dev/null | 忽略所有错误信息(如权限不足)。 |
/usr/bin/bash -p #用户与系统交互的shell环境
提权原理
suid机制:若/usr/bin/bash 的所有者是root且设置了suid位(-rwsr-xr-x),普通用户运行它时会临时获得权限
-p:告诉bash保留当前用户的权限,不重置为实际用户,当bash被设置为suid程序是,使用-p可以继承该权限。(默认情况下,bash会丢弃suid权限,但-p参数会强制保留权限,从而维持root身份)
flag.txt(个人习惯,加密成base64)
ZDczYjA0YjBlNjk2YjA5NDUyODNkZWZhM2VlZTQ1MzgK
总结:这个靶机虽然简单,但是也让我们深刻理解信息收集的重要性,在前期关键点还是在于如何正确的使用工具进行信息收集,以及后期拿到系统立足点后进行提权,都需要掌握细节上的处理,我就是学到了什么讲什么,或许讲的不够全面,但是以及尽量的去做好和优化了,最后,希望你看完这篇文章,能有所收获,加强自己的能力和提升自己的思维方式。