Devguru1靶机练习
Devguru:1靶机练习
文章首发于云众可信:Devguru:1靶机渗透-SecIN (sec-in.com)
网络结构:
环境搭建平台为VMware15,网络为nat模式,网段192.168.1.0/24
网络由攻击机kali、靶机组成
靶机ip:192.168.1.143
kali linux ip:192.168.1.137
信息收集:
主机发现:
1 |
|
如下图,图中192.168.1.1为VMnet8网卡地址,1.3为网关地址,1.137为kali地址,因此判断目标靶机地址为192.168.1.143
端口服务扫描:
1 |
|
如下图,除开启22端口ssh服务以及80端口外,还另外开放了8585端口
目录爆破:
dirb:
1 |
|
dirsearch:
1 |
|
如下图,除与dirb扫描结果类似的目录外,还看到了一个./git目录
访问一下爆破出的目录:
共发现两个比较有价值的页面,一个80端口后台管理登录页面,80端口是个October框架的网站
http://192.168.1.143/backend/backend/auth/signin
8585端口也有个登录页面,是个gitea搭建的项目托管网站
漏洞挖掘:
之前在使用dirsearch爆破目录时,看到一个.git/目录,这里我们可以用另外一个工具githack将其下载下来,GitHacker是一个多线程工具,可以检测站点是否存在git源码泄漏,并能够将网站源代码下载到本地。
工具获取连接:https://github.com/lijiejie/GitHack
1 |
|
成功拿到git源码
经百度,得知October的数据库信息存储在database.php文件中,在config目录下找到此文件,查看文件内容,成功找到数据库用户名密码 october,SQ66EBYx4GT3byXH
登录之后来到网站的后台管理页面,,可以看到CMS选项下有一个添加页面的功能
我们可以利用这个,新建个新页面来制作反弹shell
1 |
|
点击save保存,kali端监听端口
然后点击preview,反弹成功
同样方式创建一个一句话木马,用蚁剑连接,上传一个本地漏洞搜集脚本linEnum,这是一个基本shell脚本,从内核信息到定位可能的升级点(包括可能有用的SUID / GUID文件以及Sudo / rhost错误配置等等)进行扫描,以查找可能存在的提权漏洞,下载链接https://github.com/rebootuser/LinEnum
1 |
|
执行这个脚本,然而并没有看到什么有用的提权信息,说明www用户的权限被设置的很低,我们需要从其他用户入手,从脚本提供的信息来看,passwd文件是可读的
打开看一下,可以看到里面有一个用户frank,之前我们查看数据库的时候就遇见他了,老熟人了
但October的shell我们已经获取过了,只能是www用户,所以我们需要从其他的方面入手,比如说之前扫目录的时候看见的8585端口的gitea网站
暂时没在主机上找到有关gitea数据库相关的用户名密码,但之前用LinEnum搜集信息中,有一个app.ini.bak备份文件,在里面找到了gitea数据库的用户名密码
再回之前的那个数据库登录页面,这次我们登gitea数据库
登录进去之后可以看到一个user表,里面有一个用户frank,但密码被加密了
这里我们不知道加密方式,没法直接解,但gitea的框架是开源的,我们可以在github上直接找到项目源码
https://github.com/go-gitea/gitea/blob/master/models/user.go
在这里我们可以找到密码的加密代码,使用一个我们自己设定的新口令,加密后替换到数据库中
最终得到代码
1 |
|
代码为go语言编写,没有环境的话,可以在这个链接运行
运行后得到加密结果
将其替换至数据库中
保存修改,在登录界面登录测试,登录成功
我们找到frank用户的git代码仓库
gitea支持githook,我们可以自定义这些hook,在我们进行例如更新git源码这种重要动作时,这些我们事先定义好的名为hook的脚本便会起作用,执行一些例如发送邮件、核查代码等工作,同样的,我们也可以利用这些hook,来帮助我们进行渗透,例如反弹一个shell
在settings选项下我们就可以找到编辑githook的位置
这里我们选择pre-receive,pre-receive会在push前检查我们编写的规则,即只要我们提交保存代码,这个钩子就会执行,在里面写上我们自己的python反弹shell代码
1 |
|
保存修改,然后监听设置的4443端口
随便找一个文件修改一下,README.md也可以
提交修改,反弹成功,是我们预想的frank用户
权限提升:
拿到shell之后,再运行linEnum收集一次信息,因为我们使用的这个shell显示信息不是很方便,这里找一个有写权限的目录,将收集结果写入一个文件中
进到/tmp目录下,将这个文件用scp挪到外面来
1 |
|
再查看枚举结果,可以看到存在sqlite3漏洞
搜索这个漏洞,用到一个网站https://gtfobins.github.io/,这个网站还有一个在线的漏洞搜索工具,有兴趣的可以下载一下https://github.com/GTFOBins/GTFOBins.github.io
言归正题,搜索到漏洞之后,这里给出了sqlite3的漏洞利用代码
我们正常输入利用代码,试图获取shell之后,如果想要使用sudo以root身份执行,依旧会提示输入密码,不可行,但我们之前收集系统信息的时候还可以看到sudo版本
1.8.21,在1.8.28版本之前的sudo存在一个cve漏洞,cve-2019-14287,这个漏洞使得,如果sudo配置为允许用户通过Runas规范中定义的ALL关键字来以任意用户身份运行命令的话,我们可以通过指定用户ID -1或4294967295来以root权限执行恶意命令。
总结一下,这里涉及到了sqlite3和低版本sudo的两个漏洞,关于sqilte3,存在一个返回shell命令行的漏洞,但想要以root身份返回一个shell,需要使用到sudo命令,sudo策略开放了我们可以无密码以任意非root身份使用sqlite3数据库,此时如果我们直接使用sudo,还是需要密码,但实际上虽然它指定了我们不能以root权限使用,却由于我们可以指定用户id-1来绕过限制,从而实现无密码使用sqilte,达到提权效果
这里我们利用这个cve-2019-14287,成功提权
1 |
|
来到/root目录下,查看flag
作者:C0mpactDisk,本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!