Java代码审计,高手就是这样“硬看”的

2023-11-15

   

前言


本文作者是360特邀讲师,每月开讲一堂代码审计课,曾在2017年中国互联网安全大会上作为白帽大咖的嘉宾身份参加并在沙龙上担当讲师。在补天众测平台上,他有一个响当当的ID:jkgh006。接下来我们来看看高手是如何通过“硬看”来进行代码安全审计的。

                                                                                           

      大多数人问我是怎么看代码并且在没有本地环境的情况下审计出来漏洞的,我一般都是两个字 “硬看”,今天我们要说的就是怎么在几百M甚至上G的程序中剥茧抽丝,审计出来我们希望的结果。

       首先查看web.xml,看看全局的配置以及路由,这个非常重要;


     这里是一个全局的filter,按照开发者的习惯来说,一般都是做一些登录验证或者授权之类的东西。继续跟进


这里可以看出来系统只接收GET和POST的请求,重点看webServiceCheck请求的内容

看到这个我们就明白了,采用的是黑白名单的形式决定是否校验登录


这几类都不会进行登录校验


通过全局的分析,有以下可以利用的两个path,分别为/login/ 和 /ycsbBjWss/


继续再分析web.xml


可以看到这个是一个webservice的请求,我们访问一下某网站看看


还是有很多接口可以利用的,看看最后一个接口


这里调用的就是auth,直接跟进分析看看



我们分析一下这个xmltobean


在解析xmlSource的时候

这里没有进行实体禁用,存在一个xxe,当然了这个不是我们这次关心的内容


重点看看这个xmlTobean,很多人看到这个的时候就放弃了,因为太复杂,跳来跳去,但是要继续往下走还必须得了解这个的逻辑,通常这里的做法是不用去读懂它干什么,可以自己写一个test,然后去跑这一段代码,前提是要删除掉web上下文的东西。


此时你就可以调试代码了,这里就不操作了,直接解释一下这段代码的逻辑,意思就是把你传递进来的xml中的内容通过xpath解析出来,然后通过BeanUtils.populate(model,var18),把var18里面对应的键值对赋给model对象的属性。

这个xml的结构可以看出来


里面分为两大部分,大家都知道java里面的变量定义是区分大小写的,所以它这里在Head里面定义的会被转化为小写,然后拼接一个H就是类的属性,例如


到时候就会在model对象里面,如果它存在abcH属性,这个值就会被赋为123,我们看看model的基类属性都有那些


其中框起来的这些比较特殊,属性本身存在大小写,根据它代码的意思,比如nsrdjNoH我们只需要写123


       头部的语法已经完全解开,剩下的就是body里面的语法,body是不做任何转换的,基本上你写什么到时候就是什么,继续跟进程序逻辑

       checkMethod 校验头部里面是否包含method, 对应到xml里面就是123

       继续往下走看看service.check(model),这里就是进行了每一个参数的校验


我们调用的是YcsbWebService,所以选择下面那个

这里面就是对xml头部的校验,缺少一项都不可以。

函数有以下几个

  1. checkCpcode()         不为空即可

  2. checkMethod()         不为空即可

  3. checkTranToken()      

  4. checkConf()            内置校验不用关心

  5. loginForm()        

  6. checkCpcodeWhitelist()  内置校验不用关心

  7. checkLegalCpcode()     内置校验不用关心


重点分析第三个和第五个

分析可以看出这个是可以绕过的,因为没有秘钥,但是这个类似于请求的token有一个超时的限制,从代码中可以看出来,肯定会有加密部分


直接都不用分析,写入test即可根据CpcodeP加密出来一个token



这里是一个登陆的验证,通过上下文分析,这里采用map映射方式查询数据库,只要这个通过即可以


这里可以看出来,没有密码的限制,其实对于这个应用来说,cpcode就是税号,天眼查是可以查到的,等于再次绕过


InnerStrategyService service = StrategyFactory.getInstance().creator(model.getMethodpre(), StrategyFtConst.YCSB.fact);


这一段代码要依赖web上下文,所以只能硬看,跟进分析一下


这里可以看出来所有的对应关系,继续往下分析

ex1 = service.execute(model);


跟我们分析的映射关系一模一样


此时所有的校验都通过,流程从一个小水管慢慢变成一片开阔地,各种各样的接口从而暴露出来,我们主要分析一下这个YcsbWbxxServiceImpl



当method为WBXX_FP_CZ_LIST的时候


看到这里进行了一次复杂的解析,通过读上下文,没有web上下依赖,直接代码调试并且我们打印出来customViewSQLStr


这里就输出来一个sql语句,其中可以进行拼接,对应的xml为


我们访问一下看看


返回的东西居然是加密的,这个不用怕,相信解密的东西也能找到

回头再看看

最终输出的时候进行了加密,zKey就是秘钥,所有代码都是写死的,所以加解密其实没有什么意义,看看有没有解密的代码


直接test调试一下


这个就是我们刚才说的那个token失效了,重新做一个,去天眼查找一个税号,例如

91**********087




然后再次请求



这时候响应的内容已经发生了变化,我们解开看看

说明整个验证过程已经通过了,分析到这里,至于怎么构造SQL造成注入就不再做分析。

本文来源:杭州敏信科技有限公司

公众号内回复“1”带你进粉丝群

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java代码审计,高手就是这样“硬看”的 的相关文章

  • window11 安装Docker Desktop错误及解决办法

    Docker Desktop Requires log out You need to log out of windows Then your docker users membership will be taken into acco
  • wlan-cloud-ucentral docker 服务器部署

    第一步 docker io安装 先卸载 sudo apt get remove docker docker engine docker io containerd runc 后安装 sudo apt install docker io 第二
  • groupdel: cannot remove the primary group of user 'lxh1'的解决办法

    故障现象 用groupdel删除test组时 报以上错误 原因为test组中有lxh1用户 lxh1的主组 解决办法 更改lxh1的主组后即可删除 1 2 3 4 5 6 7 8
  • yml配置map map<string,list>

    java Configuration PropertySource value classpath application yml encoding utf 8 ConfigurationProperties prefix mapvule
  • McCabe度量法

    概论 McCabe度量法是由 托马斯 麦克凯 提出的一种基于程序控制流的复杂性度量方法 又称环路度量 循环复杂度 Cyclomatic complexity 也称为条件复杂度或圈复杂度 是一种软件度量 它认为程序的复杂性很大程度上取决于程序
  • Eclipse上传项目到Git

    Git有和Svn类似的功能 我们想使用Eclipse上传项目到自己的GitHub上面该如何做呢 今天我成功上传了一个项目 在这里分享给大家 首先需要在eclipse上面安装一个插件 操作步骤 一 在自己的Eclipse上面安装EGit插件
  • Qt QTableWidget使用记录

    去除选中虚线框 ui gt tableWidget gt setFocusPolicy Qt NoFocus Qt QTableWidget详解https blog csdn net wzz953200463 article details
  • 深度学习入门教学——神经网络NN

    1 简介 神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器学习技术 下图为人脑中的一个生物神经元 而无数个生物神经元就组成了生物神经网络 使人具备了处理复杂信息的能力 人工神经网络也试图模仿生物神经网络的原理 让计算机具备处理复
  • 03

    03 通过你的CPU主频 我们来谈谈 性能 究竟是什么 性能 这个词 不管是在日常生活还是写程序的时候 都经常被提到 比方说 买新电脑的时候 我们会说 原来的电脑性能跟不上了 写程序的时候 我们会说 这个程序性能需要优化一下 那么 你有没有
  • stm32芯片休眠模式_STM32F103 怎样进入睡眠模式及唤醒

    Function Name PWR EnterSLEEPMode Description Enters SLEEP mode Input SysCtrl Set Select the Sleep mode entry mechanism T
  • k8s kubernetes核心组件

    文章目录 引言 一 Kubernetes的核心组件 1 Master组件 1 1 kube apiserver 1 2 Kube controller manager 1 3 kube scheduler 1 4 配置存储中心 etcd 1
  • python装饰器--原来如此简单

    python装饰器 原来如此简单 今天整理装饰器 内嵌的装饰器 让装饰器带参数等多种形式 非常复杂 让人头疼不已 但是突然间发现了装饰器的奥秘 原来如此简单 第一步 从最简单的例子开始 coding gbk 示例1 使用语法糖 来装饰函数
  • Python3安装包下载(附3.8.7、3.7.9、3.6.8版本)

    三部曲 1 到 源码 网站源码 源码下载 源码之家 站长下载 搜索 Python 并下载 搜索结果在较底部 2 到官网 https www python org downloads 对应版本的页面 如 https www python or
  • Linux实现使用定时任务执行php程序(以及定时任务url带参数)

    php程序已经写好了 位置 data html XXX redis to mysql php php安装位置为 app bin php 查找php安装位置使用 whereis php which php php v which 这条命令主要
  • 1.C#/.NET开发环境安装(Windows)

    文章目录 一 VS2022 1 下载 VS 2022 Community 2 安装 3 第一个VS项目Hello World 4 补充 二 VS2019 1 下载VS 2019 Community 2 安装 三 游戏开发引擎Unity 四
  • centos 安装mysql 5.7

    centos安装mysql 1 检查系统中是否已安装 MySQL 如果已安装 请参考此文章卸载 rpm qa grep mysql 在新版本的CentOS7中 默认的数据库已更新为了Mariadb 而非 MySQL 所以执行 yum ins
  • 转:车规芯片的AEC-Q100测试标准

    距离上一次发文章已经过去了10个月了 这10个月里 不想错过跟小孩待在一起的每一个时刻 额呸 就是因为懒 一直没有更新文章 特此最近开始逼迫自己不断的学习 重新开始进行公众号的更新 最近这小半年一直在弄跟芯片相关的一些工作 并且由于缺芯的原
  • 【华为OD机试】水仙花数Ⅰ【2023 B卷

    华为OD机试 真题 点这里 华为OD机试 真题考点分类 点这里 题目描述 所谓水仙花数 是指一个n位的正整数 其各位数字的n次方和等于该数本身 例如153是水仙花数 153是一个3位数 并且153 1 3 5 3 3 3 输入描述 第一行输
  • ScrumAlliance对Agile Coach的能力定义了五个部分

    1 Assess Discovery Diretion 评估 发现 指导 评估团队 发现问题 提出指导意见 2 Balance Coaching Consulting 平衡教练和咨询的工作 提供咨询方案 也提供教练的工作 3 Catalyz
  • 2022全国职业技能大赛-网络安全赛题解析总结①(超详细)

    2022全国职业技能大赛 网络安全赛题解析总结 自己得思路 模块A 基础设施设置与安全加固 20分 模块B 网络安全事件响应 数字取证调查和应用安全 40分 模块C CTF夺旗 攻击 20分 模块D CTF夺旗 防御 20分 有什么不懂得可

随机推荐

  • (libevent) 基础demo

    文章目录 介绍 Code 并发服务器 signal fifo END P S 简单客户端代码 介绍 官网 libevent linux中下载 apt get install libevent dev 官网的简介 The libevent A
  • JAVA多线程-锁机制

    一 synchronized 在多线程并发编程中 synchronized 一直是元老级角色 很多人都会称呼它为重量级锁 但是 随着 Java SE 1 6 对synchronized 进行了各种优化之后 有些情况下它就并不那么重 sync
  • 深度学习------用NN、CNN、RNN神经网络实现mnist数据集处理

    1 用NN神经网络完成MNIST数据集处理 用NN神经网络完成MNIST数据集处理 1 导包 import tensorflow as tf import numpy as np import matplotlib pyplot as pl
  • sqlalchemy.exc.ResourceClosedError: This result object does not return rows.

    向数据库插入数据时 报错对象没有返回 已被自动关闭 参考 http t csdn cn Ry6zS 把SQLAlchemy版本换成1 3解决
  • 数据库断连后如何重新获得数据库连接

    前提 DBPool连接池自身有数据库断连后获取重连的机制 问题 执行某条sql时连接断开 此时此条sql不会被执行 并且若不进行特殊处理 程序会继续往下执行 此时会出现数据丢失现象 解决思路 1 判断是否是因为连接被断开引起的异常 2 若是
  • 小程序的开发之使用SVG

    昨天突然提出要在小程序中使用SVG 因为我们的小程序项目是有主题色的 不同的主题色时有些图片一直是固定的 显的有些格格不入 所以打算使用SVG来实现根据主题色的颜色进行变化 什么是SVG SVG是 Scalable Vector Graph
  • JS setInterval()/setTimeout()——实现动态时间,倒计时

    一 动态时间 1 setInterval 实现 html部分 div div
  • Design Compiler (十)——其他的时序约束选项(一)

    之前讲了基本的时序路径约束 现在我们来看一下其他的约束 然后通过实战来讲解一些其他的约束 实战中也没有前面的 理论 中的约束类型 但是可以通过实战来了解其他的约束 本文的具体内容是 多时钟同步约束 门控时钟的约束 实战 正负边沿触发器的约束
  • 突破人生的瓶颈(心灵之灯)

    人生 四度 平时除了看新闻外我很少看电视 但是那天除外 那天晚上写完稿子 随意打开了一个频道 是央视三套的艺术人生 为何庆魁加油 我不喜欢主持人以煽情的方式 不停发掘主人公内心伤痛泪水的惯用风格 本想换台 考虑到剧作家何庆魁今年来家庭遇到的
  • 微服务架构跨库分页解决的四种方案

    微服务架构是一项在云中部署应用和服务的新技术 大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务 而红帽说API应该是重点 微服务可以在 自己的程序 中运行 并通过 轻量级设备与HTTP型API进行沟通 关键在于该服务可以在
  • HTTP请求的8种请求方式以及常见的HTTP状态码总结

    完整的HTTP状态码见 菜鸟教程 HTTP8种请求方式的原文 HTTP的8种请求方式的简单介绍 目录 一 HTTP请求的8种请求方式 二 什么是HTTP状态码 三 HTTP状态码的分类 一 HTTP请求的8种请求方式 序号 方法 描述 1
  • python批量检索文献_导师每天都让查文献,如何才能快速查找文献呢?

    最近在后台有很多朋友留言 导师每天都让我查文献 但现在网上收录的文献这么多 每次都要花好长的时间 我该怎么办 作为研究人员 大家很多时候对于文献检索 数据分析等问题都感到很崩溃 如果采用常规的人工搜索 软件整理 往往要花费大量的时间 明明是
  • 自定义vue组件--实现多图片上传

    一 引入 文件上传在日常的开发中是一项基本的操作 在前端中得以广泛的使用 因此将其封装成一个组件显得极为重要 本文主要是基于vue实现的自定义多图片上传组件 二 自定义vue上传组件 MultiUpload组件的封装
  • 查询Oracle当前用户下,所有数据表的总条数

    1 需求 查询Oracle当前用户下 所有数据表的总条数 2 方法 方法1 存储过程 文末有方法2 一个SQL也可轻松搞定 3 操作 方法1 存储过程 3 1 新建 右键点击Procedures 点击New 点击OK 把存储过程写进去 然后
  • 哲理故事300篇

    哲理故事300篇 1 一只火鸡和一头牛闲聊 火鸡说 我希望能飞到树顶 可我没有勇气 牛说 为什么不吃一点我的牛粪呢 他们很有营养 火鸡吃了一点牛粪 发现它确实给了它足够的力量飞到第一根树枝 第二天 火鸡又吃了更多的牛粪 飞到第二根树枝 两个
  • 2022短视频去水印小程序源码+支持批量解析

    简介 2022最新短视频去水印 外卖CPS系统微信小程序源码下载 本微信小程序含流量主支持 激励视频 插屏AD 视频AD 本小程序源码非微擎内核 且支持会员系统 支持短视频秒速级解析 批量短视频解析 图集解析 各个页面轮播图均支持后台替换
  • 测开面经总结的经常考察的知识点

    一 算法相关 1 熟悉常见的排序算法 冒泡排序 插入排序 选择排序 归并排序 堆排序 快排 希尔排序 二 计算机网络相关 1 http协议 http 超文本传输协议 是一个在客户端和服务器端之间基于请求与响应模式的 无状态的 应用层的协议
  • Spring中的定时器(定时执行任务)

    import org apache log4j Logger import org springframework beans factory annotation Autowired import org springframework
  • 【环境配置】Jupyter Notebook切换虚拟conda环境(Kernel)

    jupyter Notebook切换虚拟conda环境Kernel 0 Jupyter notebook 配置默认路径 添加子环境kernel 允许jupyter外部链接 一 jupyter notebook常见报错 anaconda自带的
  • Java代码审计,高手就是这样“硬看”的

    前言 本文作者是360特邀讲师 每月开讲一堂代码审计课 曾在2017年中国互联网安全大会上作为白帽大咖的嘉宾身份参加并在沙龙上担当讲师 在补天众测平台上 他有一个响当当的ID jkgh006 接下来我们来看看高手是如何通过 硬看 来进行代码