JFinalCms是开源免费的JAVA企业网站开发建设管理系统,极速开发,动态添加字段,自定义标签,动态创建数据库表并crud数据,数据库备份、还原,动态添加站点(多站点功能),一键天生模板代码。
环境部署:IDEA打开项目,等待maven加载好。
使用phpstudy集成的mysql5.7数据库即可,导入JFinalCMS.sql数据库。
修改pom文件:
[img=720,313.06980656013457]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507540.png[/img]
使用local9.0.90TOMCAT,JDK环境1.8。
[img=720,259.3]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507541.png[/img]
运行TOMCAT,打开后台:
http://localhost:8081/cms_war_exploded/
反射xss:
搜刮/admin/login定位到代码块:
[img=720,473.7371854613234]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507542.png[/img]
由上可见,通过getPara获取账号密码后再通过render渲染到前端页面:
[img=720,134.3765281173594]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507543.png[/img]
再分析前端代码构造xss进行闭合:
[img=720,298.9108129439621]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507544.png[/img]
存储xss:
前台存在留言功能,留言会被管理员审核:
[img=720,402.336227308603]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507545.png[/img]
登录后台,点击扩展管理,留言信息:
[img=720,376.7640094711918]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507546.png[/img]
原理同上。
【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】
① 网安学习成长路径头脑导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权势巨子CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)
Sql注入漏洞(1):
该CMS存在许多处sql注入漏洞,大多数都是以+直接拼接sql注入语句造成,可以全局搜刮+号寻找注入点。
[img=720,331.06239460370995]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507547.png[/img]
找到以上代码块,可以直接看到title参数通过+直接拼接进入sql语句实行,于是我们继续找前端是调用的什么接口,并看看是否在接受参数时进行了过滤。
搜刮findPage参数:
[img=720,507.22592945662535]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507548.png[/img]
可以看到Contentcontroller层中存在title参数,点进去,定位到具体代码块:
[img=720,323.56626506024094]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507549.png[/img]
可以看到调用了getPara方法获取传入的title参数,继续跟进getPara方法:
[img=720,315.388]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507551.png[/img]
并未重写该方法,只是简朴获取参数,未进行任何过滤,回到原来的controller层,向上翻,找到接口调用,数据包如下:- POST /cms_war/admin/content/data HTTP/1.1
-
- Host: localhost:8081
-
- User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0)
- Gecko/20100101 Firefox/130.0
-
- Accept: text/html, \*/\*; q=0.01
-
- Accept-Language:
- zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
-
- Accept-Encoding: gzip, deflate, br
-
- Content-Type: application/x-www-form-urlencoded; charset=UTF-8
-
- X-Requested-With: XMLHttpRequest
-
- Content-Length: 47
-
- Origin: http://localhost:8081
-
- Connection: keep-alive
-
- Referer: http://localhost:8081/cms_war/admin/content
-
- Cookie: JSESSIONID=EF8BB53892173B8A4577EFC32D0215BA;
- listQuery=categoryId%3D&title%3D&sorts%3D&pageNumber%3D1
-
- Sec-Fetch-Dest: empty
-
- Sec-Fetch-Mode: cors
-
- Sec-Fetch-Site: same-origin
-
- Priority: u=0
-
- categoryId=&title=%E7%BD%91&sorts=&pageNumber=1
复制代码 将localhost替换为物理机IP放入sqlmap:
[img=720,172.75453827940015]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507552.png[/img]
证实存在sql注入漏洞,其对应前端功能如下:
[img=720,325.9305993690852]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507553.png[/img]
Sql注入漏洞(2):
前台搜刮框处也存在sql注入漏洞,只不过此处的调用过程较难找到。
[img=720,343.4985968194574]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507554.png[/img]
如上图搜刮关键字search定位到代码块:
[img=720,385.96810933940776]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507555.png[/img]
仔细分析如上代码,我无法追踪keyword的具体调用。
以上代码是通过setAttr方法直接存储到当前哀求的属性当中。我对keyword处打断点调试也未理清楚它后续是怎样调用的。
于是再换一种思绪,直接全局搜刮keyword:
[img=720,412.84601557819053]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507556.png[/img]
定位到具体代码,但无法确定是否是调用的此处findPage代码来构造sql。
搜刮findPage也没有明白思绪。
于是改变思绪,由于keyword关键字终极是通过模板template渲染调用。
[img=720,464.29258902791145]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507557.png[/img]
于是在template处挨个点进去找雷同功能代码:
终极定位到代码块:
[img=720,504.7879616963064]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507559.png[/img]
根据表明明白此处代码是根据不同关键词进行搜刮,包罗关键词keyword,继续查看keyword调用链:
[img=720,388.3095975232198]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507560.png[/img]
确定是通过调用findPage,传入keyword参数来调用数据:
[img=720,448.29329962073325]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507561.png[/img]
用sqlmap验证keyword参数:
[img=720,187.7917808219178]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507562.png[/img]
任意文件读取:
翻找controller层代码,找到文件下载代码块:
[img=720,338.57851239669424]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507563.png[/img]
可见未对传入的fileKey参数进行过滤,直接拼接进行文件读取。
(且我在翻找filter过滤器后,发现好像 并未对该路径进行权限校验,可进行未授权调用接口)
[img=720,172.78276481149013]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410141507564.png[/img]
更多网安技能的在线实操练习,请点击这里>>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |