vulnhub吧唧——THE PLANETS: EARTH

下载地址:The Planets: Earth ~ VulnHub

1.配置环境

aca6252951ea4eeb8ccab215679a688e.png

kali:NAT

THE PLANETS: EARTH:NAT

2.主机发现

16d8126a53e1438882663bacda1544af.png

 我们通过扫描kali的网段粗略的发现了192.168.139.140为我们吧唧的Ip地址

4a1a778ed7b94253842765adfbea49f4.png

我们通过比较详细的扫描得到了吧唧开启了22ssh服务,80http服务,还有一个443,一般443端口都是https服务(更安全的http服务),由此可以看见我们的80和443端口的服务都是python3.9编写的

3.访问服务

0e62403825554171a72698c5c0292de3.png

 没事我们还可以扫描一下目录

739a90d7674c4ba9823552dbabda063f.png

我直接就是一个死……男神GGBond惊掉了我的那个上……下巴

3bd3731f2b724bebb748364210f6b92d.png

 首先遇到了这种非常规的状况我非常的开心(bushi),因为我又可以学习新的东西了,所以我们开始沉淀

74f318bc37b24e84b954185a47eeea26.png

扫描不仅扫出来了端口,还扫出来了他使用了DNS服务,我们用管理员权限开启一个记事本,然后打开本机的hosts文件添加进192.168.139.140 terratest.earth.local和192.168.139.140 earth.local两条记录

98929aa1ee274555a0190a72e619d769.png

为什么是两条记录呢,我们仔细看看这两个域名,单看单词,我们不难发现terratest.earth.local包含了earth.local,说明后者是前者的子域名,两个不同的域名虽然说是解析成同一个ip,但是因为域名不一样所以他们的目录也不一样,这里我们可以理解成…/earth.local/terratest/和…/earth.local两个目录来存储的

16e1c7f20c6a4905a6e97769f11fd627.png

 保存

46455d7a9b75475199f1b93caba5c0e2.png

 刷新dns缓存后,我们再次访问http服务,这次访问域名

3154a6205d3949399782fd15db0b598a.png

 成功访问到我们的http服务,我很怀疑下面那一串数字啊,他通过消息和消息密钥进行怎样怎嘛用的操作比如异或比如加密得到了加密后的密文,但是我经过一系列尝试暂时没有发现什么可以用到的东西我们就先放在那里

5b47662f156f46b1be9dd42cac5db460.png

然后进行端口扫描,接下来我们就挨个儿进行访问

786812bff36e4957bbd0e03e62cff778.png

访问到了登录目录,猜测我们可以通过种种方式拿到密码,但是我把这个网站翻了个底朝天都没有什么收获,这是earth.local域名,接下来terratest.earth.local域名

b838014fe6e04e91a4a2a6e758936f87.png

 主页是一样的,我们扫描一下目录

68ae1d5e67874c019a756793f3f8b336.png

 大差不差,我在两个大大的网站目录下挖呀挖呀挖,并没有看到什么关键的东东,我决定进行一番沉淀

dcf3b71a5ddc4ac6a466d8c16a74f2cc.png

 开始我以为是我的扫描工具dirsearch有问题(错怪它了),然后我去下了很多个扫描工具,御剑、webdirscan、dirmap等等等等,学会了一个东东,平时我们下载的很多工具有他依赖的环境,如果我们频繁的更改全局环境容易造成一些难以预估的错误且环境不易配置,我们直接就是使用Python的虚拟环境,就相当于在房子旁边新建了一个自己的小房间,我们在里面进行实验并不会干扰原来的环境,干净又卫生啊家银们(扫描工具参考:八大web目录扫描工具(附下载链接) | CN-SEC 中文网

3d5ab586a63e40fd812e8762d1d652f2.png

 言归正传,我们仔细看看这个图,上文我们提到,不仅开启了我们熟悉的22ssh和80http,还开启了443https……https!不仅仅是两个子域名,还有两个协议我们要分别进行访问和扫描

60613e79cdde428a8fd92f9de24a5340.png

 终于,我们在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)​​​​​​​

83ad375fc9ac45b9a8e7094220d5ff11.png

从我们的robots协议来看,我们可以知道所有搜索引擎都要遵守该协议,禁止爬取所有.asp等等之类的协议,当然我们肯定就是不听他的话,凭借一个weber敏锐的嗅觉,最后一个明显有问题,英语翻译过来是测试记录的意思,猜测他为txt文件

27664d8fcdca4c96a1c73e12afd6e3c8.png

 成功进行访问,我们可以得到了一些信息:加密算法为异或加密,有一个文件testdata.txt用于测试加密,terra为管理员的用户名

44133a5367794cd383d97c2a2fcd328c.png

感谢他为我们科普关于地球的知识,因为异或加密是一种对称加密算法,我们大胆的猜测这个是加密的原文,之前首页的数字是密钥,我们知道原文,知道密钥,知道加密算法,我们便可以解出一个东东,理论存在,实验开始

63925411d5634e20bec9e12c7832da9b.png

 这里我们使用异或进行解密,解密得到我们的十六进制字符串(这里的密钥使用的是240开头的那个,其他两个我试过,解出来有一部分是乱码 )

ba57d97d3344484f98de85a9a6006dd2.png

我们使用在线工具 解密我们的十六进制字符串,得到了一堆东东,密密麻麻的我看不清,依稀从字里行间看到几个字母——earthclimatechangebad4humans(在线工具参考:16进制转换,16进制转换文本字符串,在线16进制转换 | 在线工具

5b391459f33d47e9a858978966c5f4d7.png

 当我使用terra:earthclimatechangebad4humans成功进行登录并开启了新的页面

4892b2e771344baa8dfcacac110addc4.png

我直接就是亚麻呆住了,这居然是一个命令执行窗口,她真的我真的哭死,当前用户为apeach,我们在大大的环境里面挖呀挖呀挖,这里我们成功拿到我们第一个flag

flag{userflag3353b67d6437f07ba7d34afd7d2fc27d}

880b3f0db07e4375b3a0465b9bf9d950.png​​​​​​​

我本来是想因为有22ssh服务嘛,我不知道密码我就想ssh免密登录,生成秘钥的时候我发现我只能输入一次命令,那么我生成秘钥的时候就无法按三个回车,这条路仿佛行不通,然后我就突发奇想的想ping一下kali,发现他禁止使用远程连接,但是我ping百度的时候他会报网关超时,我们合理猜测百度他是ping通了的,只是他屏蔽了ip地址的形式,经过一番沉淀后我知道了ip可以表示成十进制、八进制、十六进制,且不影响使用!!!

4520c91ed6fe49ce8edfc3006496f6af.png

 可以看到我们成功进行解析,那么就说明十进制八进制十六进制的ip是可以正常进行解析使用的,那么是不是意味着我可以开启本地监听端口,然后弹到本地来?

914a1f012e5440bcba4cfca3e0681f34.png

 元芳你怎么看?我躺着看站着看趴着看,我只能说牛波一,学到了,这条命令的意思是用bash启动一个bash shell,-i表示启动的交互式shell,>&是重定向文件描述符,/dev/tcp是一个虚拟文件夹,可用于打开TCP连接,这里就表示为将shell的标准输出和标准错误重定向到kali的716端口,最后的0>&1是重定向文件描述符的语法,0表示标准输入文件描述符,1表示标准输出文件描述符,这里的意思就是将标准输入重定向到标准输出,用于建立吧唧和kali的双向通道,使得我们可以通过该链接向吧唧发送命令,接收吧唧返回的输出,所以说我们最后在nc上看到的结果多打印了一次我们输入的命令(这里的0>&1中间不能有空格)

4.提权开始

019f2cbd3ecc4d92a9a30ef727f5ebc2.png

 我们进行一番信息搜集,初步想法就是suid提权

885a7447cd7646de86db2091befb29bc.png

 我们使用find命令查找当前目录下所有者具有setuid权限的所有文件,并屏蔽错误信息,这样看来reset_root非常的可疑,我们想办法利用他

b5d320e1f2ca413f9e9c7eaece178d17.png

 可以看到他是一个64位可执行文件,但是我们好像并不可以执行他,他在执行的时候检查复位触发器是否存在,因为没有检查到任何一个触发器所以重置失败了。触发器是一种特殊机制,用于在特定的事件或者条件发生的时候自动执行的一些操作, 比如在数据库中一张表关联了一个触发器,这个触发器的作用就是在更新这张表的时候同时更新与这张表关联的另一张表,这样就可以保证两张表的数据一致性

6e743486f52447c68816593f2939c3b2.png

 这个nc传文件,我进行了一番探索的哈。nc传文件的原理是,发送端将文件重定向的指定主机的指定端口,所以接收端需要监听指定端口收到的内容重定向到指定文件,至此实现nc传文件。开始我是kali和吧唧互相传,kali写的是nc -l 721 > resetroot,然后吧唧报错连接被拒绝,所以kali的resetroot是空的,这里的-l是进入监听模式等待其他计算机的连接。我们应该加上-p参数指定对应的端口号

6ceecd6bf0c2444289fa84f440a0c417.png

 哥几个直接就是被戏耍,前面我们知道这个reset_root是一个64位的可执行文件,是骡子是马拉出来溜溜就知道啦,拖进ida64里面看看

8b45cd7b5e98478f9089543f694baced.png

 一眼丁真啊家人们,思路马上明确了,我们需要成功运行这个程序然后更改root的密码登录进root

b3f5cb6bd4da44debd0dc4c86b144a5e.png

 这里我们可以看出来他干了个什么玩意儿++了三次v16[3]

4e0eeea90ef5442fa04531cf527b2d8b.png

 让我来看看你怎么个事儿,经过一番分析,可以看到他是一个经典的异或加密函数,加密的是a1,加密的密钥是a2,加密结果是a3,明显a4是指定的长度,a5也是指定的长度,不难看出a5是密钥的长度

ead265f256074240b6d98313420e1055.png

 我们直接根据ida里面看到的代码,直接就是改一下数据类型跑一遍看看,经过简单的审计,他分别执行了四次解密函数,第一次就是生成秘钥,然后依次进行解密出三个东东,挨个儿使用access函数进行判断是否存在对应文件或目录再++,现在我们先输出这三个文件名看看怎么个事儿

39a7e36fee7049fd8ef14f7d79f099c7.png

 这里我们可以看到那个秘钥长得有点丑,第一个第二个文件名看着像那么回事儿,但第三个文件名看着有点丑,关于这个解密函数,我只能说因为是异或加密方式,众所周知a^b^a=b,所以我开始解密的时候想的很简单,原来他解密了一遍,我再解密一遍就可以看到原来的东东,然后再解密一遍就不影响原来的流程,所以我解密了三遍,后来得到了高人的指点,简直就是一语惊醒梦中人——读的是地址,密文和密钥根本没有进行改变,所以解密一遍就行了

65ed51bab236454187d7e5ce416711ee.png

 经过我长时间的审计(bushi)我实在是只得得到这个东东了,保守估计是数据类型的问题,得,我又得沉淀一番

a882f6003ec448938aaf981a28db2854.png

 经过一番沉淀,学到了一个新命令——strace,这个命令我愿称之为马中赤兔人中吕布debug中的gdb,直接就是通过跟踪系统调用看出来了我缺少这三个文件(strace命令参考:Linux神器strace的使用方法及实践 - 知乎

449db3ba863249e3bfc1d40fe715a0fc.png

 我直接就是跑到我的吧唧里面看他是否存在,怪说不得说我RESET FAILED, ALL TRIGGERS ARE NOT PRESENT.(重置失败,所有触发器都不存在。)

ec69f0d7cc30445bb6e086b8f33c8406.png

 我们使用touch命令创建这三个文件,虽然是空的但是有

1357b4f4cfa54b02978552a7f05c173d.png

 再次运行可见他成功更改密码为Earth

813d7bf0452142f494229e5ff893a3db.png

 可以执行命令了也不吱一声,好在我们成功拿到了root(开始我想的是ssh用root登录,后面发现并不行,切换成root之后我看了一下ssh的配置文件他并配置让root登)

bb9972526e0e4f478307a949088d9b76.png

 成功拿到了我们的flag

flag{rootflagb0da9554d29db2117b02aa8b66ec492e}

总结:nmap扫描的时候要检查是否存在域名,当存在多个服务协议(如http和https)的时候要遍历每个服务,这里我们使用异或加密解出了密码,当我们可以执行命令的时候要想到弹一个shll到本地方便使用,学习了ip地址使用十进制八进制十六进制也可以正常进行访问,nc基于重定向的文件传输命令,strace命令跟踪系统调用方便我们观察程序的运行过程,最后还是有点遗憾那个C程序因为种种我不知道的原因没有跑出正确的文件名

新手上路,请多指教

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值