來自i春秋作者: 野驢@i春秋社區
0x01 前言
又到周末了,野驢的心又騷動了,又想滲透測試了,可是苦于沒有目標,殊不知在這個日新月異,技術一日千里的今天,滲透測試在很多方面都已做到工程化,只是大多內部使用,但是互聯網的精神就是開放、共享,所以有了zoomeye、censys、shadan等業界搜索神器,為我們確定滲透目標提供了極大的方便,特別是zoomeye,國產自主,方便使用,最近還開放了API,簡直就是業界良心(老師,我真的不是在打廣告),今天我與大家分享的就是從zoomeyeAPI腳本的編寫一直到提權這樣一個過程。
0x02 zoomeyeAPI
什么?你還不知道什么是zoomeye?你知道嗎,你這樣容易被老虎拖走,我跟你講,看這里 https://www.zoomeye.org/about 而前期還開放了API,為了節約篇幅,直接給出DOC(點我),zoomeyeAPI流程如下

下面我們就利用python批量獲取目標。(當然,你要先注冊賬號哦) 直接上代碼,詳細說明請看注釋。
# coding: utf-8
import os
import requests
import json
access_token = ''
ip_list = []
def login():
"""
輸入用戶米密碼 進行登錄操作
:return: 訪問口令 access_token
"""
user = raw_input('[-] input : username :')
passwd = raw_input('[-] input : password :')
data = {
'username' : user,
'password' : passwd
}
data_encoded = json.dumps(data) # dumps 將 python 對象轉換成 json 字符串
try:
r = requests.post(url = 'https://api.zoomeye.org/user/login',data = data_encoded)
r_decoded = json.loads(r.text) # loads() 將 json 字符串轉換成 python 對象
global access_token
access_token = r_decoded['access_token']
except Exception,e:
print '[-] info : username or password is wrong, please try again '
exit()
def saveStrToFile(file,str):
"""
將字符串寫如文件中
:return:
"""
with open(file,'w') as output:
output.write(str)
def saveListToFile(file,list):
"""
將列表逐行寫如文件中
:return:
"""
s = '\n'.join(list)
with open(file,'w') as output:
output.write(s)
def apiTest():
"""
進行 api 使用測試
:return:
"""
page = 1
global access_token
with open('access_token.txt','r') as input:
access_token = input.read()
# 將 token 格式化并添加到 HTTP Header 中
headers = {
'Authorization' : 'JWT ' + access_token,
}
# print headers
while(True):
try:
r = requests.get(url = 'https://api.zoomeye.org/host/search?query="phpmyadmin"&facet=app,os&page=' + str(page),
headers = headers)
r_decoded = json.loads(r.text)
# print r_decoded
# print r_decoded['total']
for x in r_decoded['matches']:
print x['ip']
ip_list.append(x['ip'])
print '[-] info : count ' + str(page * 10)
except Exception,e:
# 若搜索請求超過 API 允許的最大條目限制 或者 全部搜索結束,則終止請求
if str(e.message) == 'matches':
print '[-] info : account was break, excceeding the max limitations'
break
else:
print '[-] info : ' + str(e.message)
else:
if page == 10:
break
page += 1
def main():
# 訪問口令文件不存在則進行登錄操作
if not os.path.isfile('access_token.txt'):
print '[-] info : access_token file is not exist, please login'
login()
saveStrToFile('access_token.txt',access_token)
apiTest()
saveListToFile('ip_list.txt',ip_list)
if __name__ == '__main__':
main()
這里我重點說一下第65行,因為我們進行的是主機搜索,所以請求的接口為
https://api.zoomeye.org/host/search?query="your sring"&facet=app,os&page=
如果進行web搜索,請求接口為
https://api.zoomeye.org/web/search?query="port:21"&page=
Query為要搜索的關鍵字。 好了,zoomeeyeAPI工具打造好了,我們來搜索什么目標呢?就搜索個phpmyadmin吧,說不定有弱口令呢,多說無益,行動。在65行query處,把“your string”替換為phpmyadmin。
Python zoomAPI2.py
運行后,就會不斷返回符合要求的主機地址了,搜索完畢后,會在當前目錄下生成你的access_token文件access_token.txt,方便下次調用,以及搜索結果文件ip_list.txt。媽媽再也不用擔心我沒有目標了。哪里不會搜哪里,so easy!

0x03 滲透目標
0x031 信息搜集
有了目標主機后,大家就可以盡情發揮了。這里我找到一個目標,大概是這個樣子的

大家可以看到,有很多信息。我們點backups進去看看,真是意想不到的收獲,數據庫備份

表結構、用戶名、密碼等信息應有盡有,密碼還是明文存儲。可它用在哪呢?我們再點helpdesk_central,啊哈!登錄界面出來了,可這helpdesk_central是個什么東東?問度娘
原來是控制臺,用剛才獲得的用戶名密碼嘗試登錄,成功了,幸福來得就是這么突然,還是管理員……
看到后邊有個郵箱,看看這個管理系統屬于什么組織,搞清楚對手是誰?

再看看DNS記錄,嘗試輸入域名
原來是一家南非的一家互聯網廠商

0x032 getshell
這系統轉一圈,沒發現可以getshell的地方,停下來,出去喝妹子約會,休息是為了更好的開始。回去以后繼續,看看phpinfo吧,中規中矩,win系統,有web絕對路徑,為getshell打下了基礎。
再看看phpmyadmin吧,Duang!!!竟然是空口令

查看權限,我的天哪(岳云鵬表情)!是root權限,幸福來的太突然。那還等什么?絕對路徑都有了,寫文件吧


成功getshell,發現了很多敏感資料,還發現了前輩的足跡。



0x033 提權
看看PHP是什么權限吧,DuangDuang!!竟然是system,到目前為止,形勢一片大好。

來建個用戶吧,成功了


遠程一下,可惜要證書,失敗了,也是,總不能太順利。本來想上MSF的,可沒有公網服務器,不太方便,對方還是內網,就此打住吧。有機會再單獨寫個內網滲透的。



0x04 后記
重點在zoomAPI的學習,有了它,大家可以盡情的發揮想象,比如jboss、SSH弱口令等等,后面的滲透大家可能會說,這運氣也太好了,各種高權限。我想說,“誰過年不吃頓餃子呢”,呸呸呸,是“運氣也是實力的一部分”,重要的還是要思路清晰啦。
去i春秋查看更多:http://bbs.ichunqiu.com/thread-8965-1-1.html?from=paper
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/14/
暫無評論