分享

代码审计入门之java

 zZ华 2022-08-29 发布于广东

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,常量为正在表达式对象,匹配模式只匹配大小写字母数字等几种字符,特殊字符都不会匹配成功,当出现命令注入时匹配到特殊字符后返回值为空,方法执行返回失败提示。

 

1632564364_614ef48c024b49f329185.png!small?1632564363932

4.RCE命令执行

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多