端口扫描
这里注意修改一下host文件,要不然解析不到1.1.1.131。
这里看到python3.9就应该想到可能是django
web探测
80端口处存在admin页面
443和80分别开放了不同的服务
这里在443处可以通过robots发现一个文件,但是没有给我们后缀。
这里可以用现有工具跑一下存在这样一个文件
testingnotes.txt
这里提供了几个信息,第一采用异或加密,第二有testdata.txt这个文件去用来做加密测试,第三 terra用作admin的账户名。
加密内容:
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.
那么这里很容易应该想到是和80端口我们最初的下面三个信息做异或,怎么做呢,我们可以通过测试发现最后输出结果都是16进制的组合
奇数为减的绝对值,偶数相加。 这个规律其实也没什么用。。。。。。。。。。。
根据异或加密原理,a xor b = c,那么c xor b = a 相当于按位取反再取反。
到这里我卡了一段时间,一是忘了python很多东西写不出异或代码,二没找到现成工具
import binascii
entry_str = '2402111b1a0705070a41000a431a000a0e0a0f04104601164d050f070c0f15540d1018000000000c0c06410f0901420e105c0d074d04181a01041c170d4f4c2c0c13000d430e0e1c0a0006410b420d074d55404645031b18040a03074d181104111b410f000a4c41335d1c1d040f4e070d04521201111f1d4d031d090f010e00471c07001647481a0b412b1217151a531b4304001e151b171a4441020e030741054418100c130b1745081c541c0b0949020211040d1b410f090142030153091b4d150153040714110b174c2c0c13000d441b410f13080d12145c0d0708410f1d014101011a050d0a084d540906090507090242150b141c1d08411e010a0d1b120d110d1d040e1a450c0e410f090407130b5601164d00001749411e151c061e454d0011170c0a080d470a1006055a010600124053360e1f1148040906010e130c00090d4e02130b05015a0b104d0800170c0213000d104c1d050000450f01070b47080318445c090308410f010c12171a48021f49080006091a48001d47514c50445601190108011d451817151a104c080a0e5a'
pass_txt = "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."
#将pass_txt转换成16进制
pass_txt_16 = binascii.b2a_hex(pass_txt.encode(encoding="utf-8")).decode('utf-8').replace("b'",'')
#进行xor运算
result = hex(int(entry_str,16)^int(pass_txt_16,16)).replace('0x','')
#将运算结果转换成字符串
datatext = binascii.unhexlify(result).decode('utf-8')
print(datatext)
这里经过测试发现第二个是正确的密码
解密内容
earthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimatechangebad4humansearthclimat
猜测可能是earthclimatechangebad4humans
通过之前得到的账号在80admin处可以登录
命令执行
很显然这里是执行系统命令的地方但是可以发现对ip地址做出了限制
这里就涉及到一个绕过ip限制,可以通过16进制编码绕过,也可以通过
对要执行的命令先base64编码再解码,从而绕过ip检查
可以看到已经成功反弹shell。
suid提权
find / -user root -perm /4000 2>/dev/null
可以找到/usr/bin/reset_root这样一条指令,但是运行时候会报错,做到这自己就没有思路了。无奈只能去看别人的wp
这里可以看到文件源码中出现了改变密码为Earth的字样。
这里也是简单学到了strace这个工具,一个调试器,告诉你程序哪个地方运行出现了问题。
首先把这个文件下载下来用strace去运行,然后会提示缺少三个文件。
/dev/shm/kHgTFI5G
/dev/shm/Zw7bV9U5
/tmp/kcM0Wewe
再去运行发现密码已经被重置为Earth
总结
整体难度不大,但是遇到考察的东西可能会比较多,如果不借助别的工具自己写xor脚本还有最后提权的调试。对我来说这个靶机算中等难度。遇见了很多自己接触比较少的东西。