本文主要是介绍vulnhub吧唧——THE PLANETS: EARTH,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
下载地址:The Planets: Earth ~ VulnHub
1.配置环境
kali:NAT
THE PLANETS: EARTH:NAT
2.主机发现
我们通过扫描kali的网段粗略的发现了192.168.139.140为我们吧唧的Ip地址
我们通过比较详细的扫描得到了吧唧开启了22ssh服务,80http服务,还有一个443,一般443端口都是https服务(更安全的http服务),由此可以看见我们的80和443端口的服务都是python3.9编写的
3.访问服务
没事我们还可以扫描一下目录
我直接就是一个死……男神GGBond惊掉了我的那个上……下巴
首先遇到了这种非常规的状况我非常的开心(bushi),因为我又可以学习新的东西了,所以我们开始沉淀
扫描不仅扫出来了端口,还扫出来了他使用了DNS服务,我们用管理员权限开启一个记事本,然后打开本机的hosts文件添加进192.168.139.140 terratest.earth.local和192.168.139.140 earth.local两条记录
为什么是两条记录呢,我们仔细看看这两个域名,单看单词,我们不难发现terratest.earth.local包含了earth.local,说明后者是前者的子域名,两个不同的域名虽然说是解析成同一个ip,但是因为域名不一样所以他们的目录也不一样,这里我们可以理解成…/earth.local/terratest/和…/earth.local两个目录来存储的
保存
刷新dns缓存后,我们再次访问http服务,这次访问域名
成功访问到我们的http服务,我很怀疑下面那一串数字啊,他通过消息和消息密钥进行怎样怎嘛用的操作比如异或比如加密得到了加密后的密文,但是我经过一系列尝试暂时没有发现什么可以用到的东西我们就先放在那里
然后进行端口扫描,接下来我们就挨个儿进行访问
访问到了登录目录,猜测我们可以通过种种方式拿到密码,但是我把这个网站翻了个底朝天都没有什么收获,这是earth.local域名,接下来terratest.earth.local域名
主页是一样的,我们扫描一下目录
大差不差,我在两个大大的网站目录下挖呀挖呀挖,并没有看到什么关键的东东,我决定进行一番沉淀
开始我以为是我的扫描工具dirsearch有问题(错怪它了),然后我去下了很多个扫描工具,御剑、webdirscan、dirmap等等等等,学会了一个东东,平时我们下载的很多工具有他依赖的环境,如果我们频繁的更改全局环境容易造成一些难以预估的错误且环境不易配置,我们直接就是使用Python的虚拟环境,就相当于在房子旁边新建了一个自己的小房间,我们在里面进行实验并不会干扰原来的环境,干净又卫生啊家银们(扫描工具参考:八大web目录扫描工具(附下载链接) | CN-SEC 中文网)
言归正传,我们仔细看看这个图,上文我们提到,不仅开启了我们熟悉的22ssh和80http,还开启了443https……https!不仅仅是两个子域名,还有两个协议我们要分别进行访问和扫描
终于,我们在https://terratest.earth.local中扫描到了robots协议,取得了突破性的进展,关于robots协议,他是网站跟爬虫之间的协议,其中User-Agent指的是搜索引擎执行以下协议,Disallow表示禁止抓取,反之Allow即为允许抓取(robots协议参考:https://blog.csdn.net/keizhige/article/details/128285572?opsrequestmisc=%257B%2522request%255Fid%2522%253A%2522169028246416782427465888%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&requestid=169028246416782427465888&bizid=0&utmmedium=distribute.pcsearchresult.none-task-blog-2~all~topclick~default-2-128285572-null-null.142^v91^insertT0,239^v3^insertchatgpt&utmterm=robots%E5%8D%8F%E8%AE%AE&spm=1018.2226.3001.4449)
从我们的robots协议来看,我们可以知道所有搜索引擎都要遵守该协议,禁止爬取所有.asp等等之类的协议,当然我们肯定就是不听他的话,凭借一个weber敏锐的嗅觉,最后一个明显有问题,英语翻译过来是测试记录的意思,猜测他为txt文件
成功进行访问,我们可以得到了一些信息:加密算法为异或加密,有一个文件testdata.txt用于测试加密,terra为管理员的用户名
感谢他为我们科普关于地球的知识,因为异或加密是一种对称加密算法,我们大胆的猜测这个是加密的原文,之前首页的数字是密钥,我们知道原文,知道密钥,知道加密算法,我们便可以解出一个东东,理论存在,实验开始
这里我们使用异或进行解密,解密得到我们的十六进制字符串(这里的密钥使用的是240开头的那个,其他两个我试过,解出来有一部分是乱码 )
我们使用在线工具 解密我们的十六进制字符串,得到了一堆东东,密密麻麻的我看不清,依稀从字里行间看到几个字母——earthclimatechangebad4humans(在线工具参考:16进制转换,16进制转换文本字符串,在线16进制转换 | 在线工具)
当我使用terra:earthclimatechangebad4humans成功进行登录并开启了新的页面
我直接就是亚麻呆住了,这居然是一个命令执行窗口,她真的我真的哭死,当前用户为apeach,我们在大大的环境里面挖呀挖呀挖,这里我们成功拿到我们第一个flag
flag{userflag3353b67d6437f07ba7d34afd7d2fc27d}
我本来是想因为有22ssh服务嘛,我不知道密码我就想ssh免密登录,生成秘钥的时候我发现我只能输入一次命令,那么我生成秘钥的时候就无法按三个回车,这条路仿佛行不通,然后我就突发奇想的想ping一下kali,发现他禁止使用远程连接,但是我ping百度的时候他会报网关超时,我们合理猜测百度他是ping通了的,只是他屏蔽了ip地址的形式,经过一番沉淀后我知道了ip可以表示成十进制、八进制、十六进制,且不影响使用!!!
可以看到我们成功进行解析,那么就说明十进制八进制十六进制的ip是可以正常进行解析使用的,那么是不是意味着我可以开启本地监听端口,然后弹到本地来?
元芳你怎么看?我躺着看站着看趴着看,我只能说牛波一,学到了,这条命令的意思是用bash启动一个bash shell,-i表示启动的交互式shell,>&是重定向文件描述符,/dev/tcp是一个虚拟文件夹,可用于打开TCP连接,这里就表示为将shell的标准输出和标准错误重定向到kali的716端口,最后的0>&1是重定向文件描述符的语法,0表示标准输入文件描述符,1表示标准输出文件描述符,这里的意思就是将标准输入重定向到标准输出,用于建立吧唧和kali的双向通道,使得我们可以通过该链接向吧唧发送命令,接收吧唧返回的输出,所以说我们最后在nc上看到的结果多打印了一次我们输入的命令(这里的0>&1中间不能有空格)
4.提权开始
我们进行一番信息搜集,初步想法就是suid提权
我们使用find命令查找当前目录下所有者具有setuid权限的所有文件,并屏蔽错误信息,这样看来reset_root非常的可疑,我们想办法利用他
可以看到他是一个64位可执行文件,但是我们好像并不可以执行他,他在执行的时候检查复位触发器是否存在,因为没有检查到任何一个触发器所以重置失败了。触发器是一种特殊机制,用于在特定的事件或者条件发生的时候自动执行的一些操作, 比如在数据库中一张表关联了一个触发器,这个触发器的作用就是在更新这张表的时候同时更新与这张表关联的另一张表,这样就可以保证两张表的数据一致性
这个nc传文件,我进行了一番探索的哈。nc传文件的原理是,发送端将文件重定向的指定主机的指定端口,所以接收端需要监听指定端口收到的内容重定向到指定文件,至此实现nc传文件。开始我是kali和吧唧互相传,kali写的是nc -l 721 > resetroot,然后吧唧报错连接被拒绝,所以kali的resetroot是空的,这里的-l是进入监听模式等待其他计算机的连接。我们应该加上-p参数指定对应的端口号
哥几个直接就是被戏耍,前面我们知道这个reset_root是一个64位的可执行文件,是骡子是马拉出来溜溜就知道啦,拖进ida64里面看看
一眼丁真啊家人们,思路马上明确了,我们需要成功运行这个程序然后更改root的密码登录进root
这里我们可以看出来他干了个什么玩意儿++了三次v16[3]
让我来看看你怎么个事儿,经过一番分析,可以看到他是一个经典的异或加密函数,加密的是a1,加密的密钥是a2,加密结果是a3,明显a4是指定的长度,a5也是指定的长度,不难看出a5是密钥的长度
我们直接根据ida里面看到的代码,直接就是改一下数据类型跑一遍看看,经过简单的审计,他分别执行了四次解密函数,第一次就是生成秘钥,然后依次进行解密出三个东东,挨个儿使用access函数进行判断是否存在对应文件或目录再++,现在我们先输出这三个文件名看看怎么个事儿
这里我们可以看到那个秘钥长得有点丑,第一个第二个文件名看着像那么回事儿,但第三个文件名看着有点丑,关于这个解密函数,我只能说因为是异或加密方式,众所周知a^b^a=b,所以我开始解密的时候想的很简单,原来他解密了一遍,我再解密一遍就可以看到原来的东东,然后再解密一遍就不影响原来的流程,所以我解密了三遍,后来得到了高人的指点,简直就是一语惊醒梦中人——读的是地址,密文和密钥根本没有进行改变,所以解密一遍就行了
经过我长时间的审计(bushi)我实在是只得得到这个东东了,保守估计是数据类型的问题,得,我又得沉淀一番
经过一番沉淀,学到了一个新命令——strace,这个命令我愿称之为马中赤兔人中吕布debug中的gdb,直接就是通过跟踪系统调用看出来了我缺少这三个文件(strace命令参考:Linux神器strace的使用方法及实践 - 知乎)
我直接就是跑到我的吧唧里面看他是否存在,怪说不得说我RESET FAILED, ALL TRIGGERS ARE NOT PRESENT.(重置失败,所有触发器都不存在。)
我们使用touch命令创建这三个文件,虽然是空的但是有
再次运行可见他成功更改密码为Earth
可以执行命令了也不吱一声,好在我们成功拿到了root(开始我想的是ssh用root登录,后面发现并不行,切换成root之后我看了一下ssh的配置文件他并配置让root登)
成功拿到了我们的flag
flag{rootflagb0da9554d29db2117b02aa8b66ec492e}
总结:nmap扫描的时候要检查是否存在域名,当存在多个服务协议(如http和https)的时候要遍历每个服务,这里我们使用异或加密解出了密码,当我们可以执行命令的时候要想到弹一个shll到本地方便使用,学习了ip地址使用十进制八进制十六进制也可以正常进行访问,nc基于重定向的文件传输命令,strace命令跟踪系统调用方便我们观察程序的运行过程,最后还是有点遗憾那个C程序因为种种我不知道的原因没有跑出正确的文件名
新手上路,请多指教
这篇关于vulnhub吧唧——THE PLANETS: EARTH的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!