freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

java代码审计java-sec-code 命令注入漏洞
2024-04-01 21:02:57

借用Java Sec Code官方的话:对于学习Java漏洞代码来说,Java Sec Code是一个非常强大且友好的项目

1.环境配置:

官方提供了多种搭建环境的方式,既然是代码审计,为了看代码方便本文选择IDEA的搭建方式

git clone https://github.com/JoyChou93/java-sec-code.git克隆项目到本地。

直接在idea中打开项目,Maven可以与各种流行的Java集成开发环境(如Eclipse、IntelliJ IDEA等无缝集成。所以直接打开就行。如果IDEA没有自动下载Maven:推荐一篇文章:https://www.cnblogs.com/ly-lyy/articles/18024833

配置数据库:

建议下载phpstudy:(非小皮面板版)

启动:

1711971884_660a9e2ce73d2b525bfc3.png!small?1711971885319

创建 java_sec_code

1711972002_660a9ea228f5799ee8f9d.png!small?1711972002518

还原数据库 java_sec_code点击导入

点击其他选项菜单,打开mysql命令行

输入密码:

改下密码:


1711972269_660a9faddf3b3b92cad5d.png!small?1711972270948

打开靶场localhost:8080/login

输入账号密码,在在数据库里面,也可以在create_db.sql中查看

2.命令注入漏洞

在CommandInject.java中1711972898_660aa222a0cdac4176826.png!small?1711972899880

这个类中有三个方法:一个一个解释

2.1:codeInject方法:

由于我们的系统上Windows的,把cmdList换成Windows的命令。

1711973132_660aa30c72dfdfacc5b23.png!small?1711973132931

下面我们一点点解释下这个代码:

filepath是作为参数传入dir命令的目录路径可见没有过任何的过滤。

ProcessBuilder是Java中用于创建和启动进程的工具类。创建进程builder

builder.redirectErrorStream(true)进程的错误输出流和标准输出流合并

start()动了进程.

return WebUtils.convertStreamToString(process.getInputStream())命令执行的结果转换为字符串,并将结果返回

把&ipconfig传给filepath可以得到靶机的IP地址


@GetMapping("/codeinject")是一个Spring MVC中的注解,用于定义一个处理HTTP GET请求的方法。具体来说,它标识了一个处理器方法,该方法将处理访问"/codeinject"路径的GET请求。

所以如图:

1711974432_660aa820ce9fed7bb5a07.png!small?1711974434116

2.2 codeInjectHost

1711974646_660aa8f6a66c827616b73.png!small?1711974647362

很明显代码中的漏洞点发生了变化,其他和codeInject一样。

request.getHeader("host")方法获取HTTP请求头中的"Host"字段

抓包:

1711975655_660aace7a5d10f35a6f4d.png!small?1711975659172

2.3 codeInjectSec

1711975950_660aae0ec2d26a997788e.png!small?1711975951637

这里看到红框是不一样的部分,很明显cmdFilter()是对传入的参数进行处理:看一下cmdFilter方法:

1711976002_660aae427881cdddc2db0.png!small?1711976002866

FILTER_PATTERN是一个预定义的Pattern对象,用于匹配允许的输入格式。matcher(input)方法创建了一个Matcher对象,并将input参数传入,然后使用matches()方法来检查input是否与模式匹配。如果input不符合预定义的格式,则返回null,表示输入不合法。

我们看一下这个正则表达式过滤了什么:


1711976124_660aaebc9fff1444b2ef9.png!small?1711976125012

匹配一个由大小写字母、数字、下划线、斜杠、点和连字符组成的字符串,且整个字符串应该是从开始到结束的完整匹配。!取反。可以看到当我们输入命令的时候会出现:Bad boy. I got u.这样的提示

1711976448_660ab0003999b4b1c5525.png!small?1711976448599

# 漏洞 # 网络安全 # web安全 # 网络安全技术 # Java代码审计
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录