栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

代码审计入门之java-sec-code

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

代码审计入门之java-sec-code

1.介绍

对于学习JAVA代码审计的同学来说,java-sec-code是一个不可多得的学习靶场,根据作者的介绍每个漏洞类型代码默认存在安全漏洞(除非本身不存在漏洞),相关修复代码在注释里,具体可查看每个漏洞代码和注释。

2.安装

项目地址https://github.com/JoyChou93/java-sec-code/

java-sec-code是由java开发,使用的框架为springboot,下载到本地后直接使用IDEA导入项目。

 

选择maven工程选项。

 

导入项目后需要在本地数据库能建立名为java_sec_code的数据库(项目使用的数据库为mysql,本人使用的版本为5.5.6),数据库建立成功后使用项目文件夹resources下create_db.sql脚本文件建立表和导入数据。

 

修改resources下的application.properties配置文件,将连接数据库需要的参数配置为本地实际参数。

 

在IDEA中直接启动项目,访问http://localhost:8080/login成功看到登录界面,默认用户名和密码为admin/admin123 。

 

 

因为项目作者选择的工作环境为linux操作系统,而我本人选择的工作环境为windows操作系统,所以为了部分功能运行成功需要修改几处源码,首先修改CommandInject.java文件下的源码,将sh执行命令替换为cmd命令,还有修改源码中一些其它的linux操作系统上独有的命令。

 

其次为修改index.html下的几处默认链接,链接指向改为在D盘下的测试文件。

 

3.命令注入漏洞

查看CommandInject.java源码,存在3个方法codeInject、codeInjectHost、codeInjectSec,其中codeInjectSec为安全方法,其它两个存在漏洞。

首先分析codeInject方法源码,很容易发现参数filepath并未做任何的过滤,直接就拼接入命令执行数组中,建立ProcessBuilder对象执行新的进程,并将执行结果返回前端,在windows操作系统下使用&符号拼接cmd命令,由于是web服务应用,需要将&符号进行url编码,可以使用payload:http://localhost:8080/codeinject?filepath=.%26ipconfig,可以看到ipconfig命令成功执行。

 

 

查看codeInjectHost方法源码,注入参数为http请求头中的host参数,将host参数修改为payload:localhost&ipconfig,成功执行命令,一定要将端口号消去要不curl命令执行中会报错。

 

 

codeInjectSec方法中明显加入了参数过滤方法,点击打开cmdFilter方法进一步跟踪,找到在安全方法中声明的静态常量FILTER_PATTERN,常量为正在表达式对象,匹配模式只匹配大小写字母数字等几种字符,特殊字符都不会匹配成功,当出现命令注入时匹配到特殊字符后返回值为空,方法执行返回失败提示。

 

 

 

4.RCE命令执行

分析源码可以很直观的看到cmd未进过任何过滤直接有runtime.exec执行,执行结果推送回前端显示,这个演示应该是项目作者为大家演示下命令执行的过程。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/322585.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号