网站内容管理系统上传图片(最新几个版本正方教务系统的SQL注入漏洞,无需任何条件!)
优采云 发布时间: 2022-01-18 08:10网站内容管理系统上传图片(最新几个版本正方教务系统的SQL注入漏洞,无需任何条件!)
概括
正方教育系统最新版SQL注入漏洞,无条件!真正的教育杀手,拿到老师和部门用户的密码,查女生的信息不是梦!
正方教育系统提供了一系列WebService接口,但这些接口并没有经过严格的认证,任何浏览器都可以使用这些接口查询信息。发生注入是因为没有过滤用户提交的参数!
搜索发现方形教育系统的asmx文件大致如下:
[1] 文件管理界面
先看file.asmx:
checkFile(检查文件是否存在)只需要文件路径即可工作。
尝试使用soap协议请求:
UpFile2Dir(上传文件到指定目录),本以为这个接口有点用处,但是看了代码发现根本不能用。代码显示如下:
checkFilePath 函数是检查文件路径是否合法。当然,filepath并不是指文件路径,它是写在配置文件中的一系列字符串。但是,通过对多个正方教务系统的测试,发现这个字符串基本没有配置。所以不管你的filePath是什么,在调用UpFile2Dir的时候都会报错“trusted address not set”。这也从日志记录中得到证实:
[2] 各种查询接口
正方教育系统还提供各种查询接口。刚刚研究了service.asmx和service1.asmx中的几个接口,发现有很多注入。
需要注意的是,这些接口需要提供strPass和strKey参数(有的只需要提供strKey,有的需要提供strPass,有的需要两者都提供)。
反编译后发现是从数据库中查询到strPass(但悲剧的是正方教务系统大多没有wsmmb表,估计这是历史遗留的接口……):
strKey 是一个已定义的常量 (
sKey = "KKKGZ2312";
);
这里非常明显。使用sKey可以查询一些接口。
[3] 查询接口注入
例如BMCheckPassword(检查部门账号密码?):
其实只能查询strYHM和sKey这两个参数,如图(如果提供了正确的用户名,则回显结果为5,如果用户名不正确,回显结果为3) :
尝试在这里构造注入语句:
使用这个payload查询jwc01的密码:
正方教育系统最新版SQL注入漏洞,无条件!真正的教育杀手,拿到老师和部门用户的密码,查女生的信息不是梦!
正方教育系统提供了一系列WebService接口,但这些接口并没有经过严格的认证,任何浏览器都可以使用这些接口查询信息。发生注入是因为没有过滤用户提交的参数!
搜索发现方形教育系统的asmx文件大致如下:
[1] 文件管理界面
先看file.asmx:
checkFile(检查文件是否存在)只需要文件路径即可工作。
尝试使用soap协议请求:
UpFile2Dir(上传文件到指定目录),本以为这个接口有点用处,但是看了代码发现根本不能用。代码显示如下:
checkFilePath 函数是检查文件路径是否合法。当然,filepath并不是指文件路径,它是写在配置文件中的一系列字符串。但是,通过对多个正方教务系统的测试,发现这个字符串基本没有配置。所以不管你的filePath是什么,在调用UpFile2Dir的时候都会报错“trusted address not set”。这也从日志记录中得到证实:
[2] 各种查询接口
正方教育系统还提供各种查询接口。刚刚研究了service.asmx和service1.asmx中的几个接口,发现有很多注入。
需要注意的是,这些接口需要提供strPass和strKey参数(有的只需要提供strKey,有的需要提供strPass,有的需要两者都提供)。
反编译后发现是从数据库中查询到strPass(但悲剧的是正方教务系统大多没有wsmmb表,估计这是历史遗留的接口……):
strKey 是一个已定义的常量 (
sKey = "KKKGZ2312";
);
这里非常明显。使用sKey可以查询一些接口。
[3] 查询接口注入
例如BMCheckPassword(检查部门账号密码?):
其实只能查询strYHM和sKey这两个参数,如图(如果提供了正确的用户名,则回显结果为5,如果用户名不正确,回显结果为3) :
尝试在这里构造注入语句:
使用这个payload查询jwc01的密码:
jwc01' and (SELECT SUBSTR(TO_CHAR(KL),1,1) from yhb where yhm='jwc01')='a
最后jwc01的加密密码为:2jl)dssu,解密后:[emailprotected]
登录教育系统:
[4] 更粗鲁的注入
得到上述接口的注入点后,我很满意,因为新版本的正方教务系统已经去掉了BMCheckPassword的接口,所以我继续寻找。努力得到了回报,终于找到了GetStuCheckinInfo接口中存在的注入。
提供学号、学年+学期、sKey查询。但是,这种接口注入的粗暴之处在于可以使用联合查询。
学生 ID 构造了这样一个有效载荷测试:
222222' union select Null,'test',Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null,Null from yhb where 'a'='a
查询jwc01的密码:
获取加密密码:zaqtHswK 解密:1qaz2wsx。登录账号 jwc01:
[5] GetShell杀掉正方教育系统
你可能会问:你为什么对jwc01这么难?原因很简单:1、jwc01是正方教务系统的初始管理账号。基本上每个教务系统都有这个账号。在数据库中获取账户信息是不必要的。2、1中提到,jwc01是初始的具有高权限的管理账号!
1、方块的低版本
正方教育系统低版本可以直接上传教务公告中的ashx文件获取webshell。有时候教务公告没有给出这个页面的链接(当然这个页面一直存在),可以F12随意修改链接如下:
教务公告发布
然后点击标签,你会发现教务公告发布页面打开了!
上传文件后,保存到/wbwj/目录下,将生成aspx文件的ashx上传到wbwj,访问测试(当然直接上传ashx类型的webshell也是可行的):
2、方块的更高版本
如果提交的文件名中收录asp、cer、aspx、cdx、asa等关键字(只要文件名或后缀中收录这些关键字),高版本正方教育系统会拦截该请求。
审计反编译的代码,知道允许上传的后缀列表存储在fjsckzb表中:
允许上传的后缀SYFLG列标记为1。显然,除了这些后缀之外,不允许上传。
尝试上传 ashx 文件:
那么你可以给这个表添加一个后缀吗?(我对Oracle的了解不够,不知道如何通过注入点多行查询插入记录……)但是我用了另一种方法:通过注入点获取数据库(默认连接方的账号是DBA)账号密码后连接内网数据库或者使用Oracle提供的isqlplus登录:5560/isqlplus。然后将ashx后缀添加到可上传列表中,管理账号登录上传>获取webshell。(其实只要有DBA权限的账号和密码,都可以用JAVA执行命令*^_^*)