首页 > 编程语言 >简单的java代码审计

简单的java代码审计

时间:2022-08-31 11:24:09浏览次数:85  
标签:审计 Fastjson java admin 代码 JSON SQL 序列化

描述

很简单的代码审计

java安全——Fastjson反序列化

java安全——SQL注入

Fastjson 反序列化

首先看一下配置文件,对于Maven项目,我们首先从pom.xml文件开始审计引入的第三方组件是否存在漏洞版本,然后进一步验证该组件是否存在漏洞点,Fastjson 1.2.58版本存在反序列化漏洞。

关注两个函数:JSON.parse()和JSON.parseObject(),全局搜索两个关键字,查看项目是否存在JSON.parse()和JSON.parseObject(),并跟踪该变量

在网站中找到该漏洞的位置,通过代码中的位置 admin/product,在网站中找到了该位置,并抓包修改propertyJson的序列化数据包,对propertyJson参数值进行URL解码,发现为JSON格式字符串,将其改成恶意的代码进行出网验证。

 

 

构建poc:{"@type":"java.net.Inet4Address","val":"c0lwal.dnslog.cn"},成功触发了Fastjson漏洞。

 

SQL注入

本项目使用了Mybatis,来定义SQL。我们主要查看Myabatis中xxxMapper.xml文件中是否存在使用$拼接SQL语句的情况。使用$是直接拼接SQL语句的,未进行转义

 

进去看一下,通过 select id 进行跳转到dao层

 

 

可以看到select函数中存在orderUitl参数,我们继续逆向追踪,看看参数值从何而来。

 

从上图可以看出。getList方法中需要orderUtil参数,我们继续逆向追踪,看看orderUtil又是从何而来。首先看看谁使用了getList方法,键盘按住ctrl键后鼠标左击getList,可以看到UserController.java使用了该方法,且传入了orderUtil值,进入文件查看具体代码,如下图所示:

此时应该追踪orderBy参数是从何而来。从下图可以看到,该值通过admin/user/{index}/{count}接口传过来的。通过注释可以看出来该接口用于按条件查询用户,如下图所示:

既然接口找到了,我们可以使用BurpSuite或者Postman来构造请求,然后进一步攻击验证。拼接url进行sqlmap跑,注意因为是后台的操作所以一定要加上cookie验证,否则sqlmap跑不出来:sqlmao语句:python sqlmap.py -u "http://ipxxx/tmall/admin/reward/1/1?orderBy=1" --cookie="username=admin; username=admin; JSESSIONID=xxx"

 

 

标签:审计,Fastjson,java,admin,代码,JSON,SQL,序列化
From: https://www.cnblogs.com/mantou0/p/16625209.html

相关文章

  • Java中如何将String转化成int数组?
    publicstaticvoidStringToIntArray(){Stringstring="1,2,3,4,5,6";Stringstr[]=string.split(",");intIntArray[]=newint[str.length];for(inti=0;i<str.le......
  • 从Java 9 到 Java 17 新特性梳理
    Java9新的创建集合的方法 //[1,2,3,4] List<Integer> integers = List.of(1, 2, 3, 4); //{1,2,3} Set<Integer> integerSet = Set.of(1, 2,......
  • 代码随想录-数组篇
    上次刷没刷完整,和李哥做字节的题感觉先前刷的题白刷了,故打算从头到尾完整走一遍。二分法1-1.二分查找力扣题目链接给定一个n个元素有序的(升序)整型数组nums和一个目......
  • JavaScript Fundamentals – Part 2
    Functions(函数)functionlogger(){console.log('MynameisShubham');}//calling/running/invokingfunction(调用/运行/调用函数)logger();//Myname......
  • state 和 getters 的代码实例
    使用:<template><divclass="id"><h3>姓名:{{userStore.name}}</h3><h3>年龄:{{userStore.age}}</h3><h3>等级:{{userStore.level}}</h3>......
  • java 实体类命名
    阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义分层领域模型规约:DO(DataObject):与数据库表结构一一对应,通过DAO层向上传输数据源对象。DTO(DataTransferObjec......
  • Joinery——Java的数据处理库
    资源https://joinery.sh/v1.10/api/reference/joinery/DataFrame.htmlhttps://github.com/cardillo/joinery使用maven集成到java项目中<dependency><groupId>sh.jo......
  • Java8lambda表达式的使用
    Java8提供很多lambda表达式,能够使得开发代码更加简洁优美。本文学习lambda后总结了一些lambda表达式的使用。1、list.forEachthis.supplierQuoteByIdRespose.getQuoteIn......
  • JavaScript 中的变量
    JavaScript中的变量让我们快速看一下JavaScript中的变量?变量是任何编程语言的基础部分,因此深入了解变量对于掌握任何编程语言都是必要的。什么是变量?变量是存储数据......
  • Javascript:承诺
    Javascript:承诺JavascriptPromises为了理解javascript中的Promise,理解回调函数及其带来的挑战至关重要。您可以从我以前的博客中了解更多信息。[Javascript:回调函......