电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 2542 人浏览分享

看一名Java开发人员以红队思维五分钟审计一套代码

[复制链接]
2542 0
本帖最后由 zhaorong 于 2020-11-7 14:49 编辑

前言
代码审计往往需要开发的功底,既站在开发的角度又站在渗透者的角度。这样的角度去审视问题时
往往意味着渗透者比开发更懂业务逻辑 才能找出开发者代码中存在的问题。

概述
Java一直是渗透测试中的一块硬骨头相比其他语言算是比较难啃 下面的文章将从Java漏洞
出现的位置从审计的角度出发 深入了解JavaWeb渗透。

准备工作
众所周知 IntelliJ Idea 一直深受Java开发者的喜爱 他以丰富的扩展插件 无处不在的代码提示提高了开发
者的效率但其对于我们的渗透人员来说也是一把 利器 。打开我们事先准备好的Idea。

QQ截图20201107141055.png

由于拿公司项目演示更具有实战意义 所以将项目名称 企业名称多地打码,希望理解~

持久层审计
Java经常出现的架构模式为数据交互层 持久层业务逻辑层 接口调用层三层。各层之间负责各自事情 互不干涉
这也增加了程序的解耦性。持久层即为和数据库交互层 开发者通常将sql的编写放入在此层。

存在sql的地方就可能存在sql注入 而防御sql注入的典型技术应当是 预编译 技术。随着企业级开发的到来 框架的
产生也如约而至。目前市场主流的持久层开发框架为 mybatis 他是一个ORM映射框架 这里不再赘述它的概念这
套框架在持久层做出来防止sql注入的“手段”。

33.png

32.png

上图指出了两句sql的不同 相信你也发现了。这就是sql注入产生的地方 mybatis在入参的地方提供了
两种方式 #{}”和“${}”.他们的区别就在于我上文提到的预编译技术 #{} 采用了预编译的技术不存在
sql注入而使用 ${}  为了拼接sql 从而产生了sql注入。

因此总结持久层审计 我们直接使用idea快捷键全局搜索Ctrl+Shift+R,然后输入 “${”

31.png

直接找出所有存在sql注入的语句。

中间件审计
众所周知 在JavaWeb早期版本中 如果使用其他官方提供的jar文件需要手动将jar复制到项目lib目录下 假设使用中
间件太多的情况下 极大的增加了维护成本。后来为了解决此问题 Apache编写了Maven这个工具 减少了开发成本
也给后期项目维护轻松埋下了伏笔。

30.png

29.png

28.png

这里详细的记录着这个项目用着哪些中间件 并且他们的版本是多少。想必我说到这里老司机们都已经明白了吧。
这里需要读者经常记忆一些经常产生漏洞中间件 以便在审阅pom.xml时快速找
出漏洞 例如Java常用的shiro redis fastjson等等。

因此总结中间件漏洞 直接打开pom.xml文件翻阅其所使用的中间件 然后反手就是将名称和
版本号带入搜索引擎当中就是一顿爆找。


QQ截图20201107141844.png


后续
在我上文讲到持久层时 如果全文都仔细阅读下来的同学一定会有疑问。开文我便声明这是公司真正的项
目为了给大家带来真正的实战体验 那我既然在我的持久层找到了 “${}”,是我在给公司留后门嘛?其实
不然且听我细细道来。


预编译是解决sql注入最有效的办法 但不是唯一一种办法 虽然其他方法可能存在被绕过风险但是要承认的是
只要足够细心 就会在防御时做出效果。下面看我的骚操作

08.png

没错 springMvc提供了一套访问的执行链 在请求进入程序之前,用户可以配置过滤器,对请求参数进行过滤
拦截非法参数。这里我采用了 正则表达式 也就是sql注入的克星。在请求参数进来时我首先采用正则表达式
匹配参数 是否存在非法参数。

但是这么做,一定几率存在着被绕过的风险。但至少说明了预编译不是防止sql注入的唯一办法。

所以读者朋友就不要妄想找到我的项目,然后进行一番渗透了。我也不是好欺负的哦 哼唧~

结尾
由于文章篇幅的原因 这篇文章我只能讲到持久层和中间件的审计 但是提供给读者的快速审计方法相信能起到作用
在接下来的文章中 我会继续分享审计逻辑漏洞 业务漏洞 前端漏洞。以及源码级免杀 更多的精彩内容即将为您揭晓
希望读者能给作者一定的鼓励让一位开发走下去。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.