Java静态分析&gadgetinspector改造扫描sb

看了大哥写的java字节码静态分析审计工具,有点想法,做一个直接分析字节码的静态审计工具,而不需要像codeql那样需要编译。

文中这个思路完全仿照cobra,从sink到source,根据callee或者assign来回溯,没有用到cfg,完全的数据流分析。
我感觉他这么做有两个问题:

  1. 比如https://xz.aliyun.com/t/7979,用了@Valid,他的控制流是跳来跳去的,如果只是看callee或者assign stmt,跟到一半必然断,造成漏报。
  2. 这种很简陋的污点分析最大的问题应该是误报严重。

LFYLangCompiler报告

1. 编译器整体架构设计及总体情况

目前LLVM比较火,因此就直接用了LLVM,还能顺便学一波LLVM Pass

前端

整体采用go语言实现,前端使用lex+goyacc,生成ast,然后手工将ast翻译成LLVM IR。

后端

后端直接使用LLVM套件llc将LLVM IR编译为机器码。

论文阅读-Security Charm of WASM

Security Charm of WASM

slide

  1. WASM基础概念介绍
    • 功能
    • 线性内存模型
    • 函数表
  2. Emscripten介绍和安全问题
    • Emscripten介绍
    • 对WASM做的加固
    • 还有可能出现的安全问题
  3. WASM新的利用方式(emscripten.h)
    • buffer flow -> XSS
    • indirect function calls -> XSS & RCE
      • 更骚的姿势(syscall, 内联eval)
  4. 结论
    • To 开发团队
    • To 开发者
    • 未来方向
      • 逆向堆实现
      • 测信道姿势?
      • 条件竞争有无?

LLVM IR优化笔记

基本概念

  • 基本块&CFG:用label和jmp分割代码,形成一个basicblock,以jmp结尾的basicblock向以目标label开头的basicblock连一条边,就形成了CFG
  • 局部代码优化:单个基本块内的优化
    • 删除局部公共子表达式
    • 删除无用代码(复制传播实现)
    • 常量合并(编译时计算常量值)
    • 代码移动(将循环中不变的表达式移到循环外)
    • 强度削弱(加代替乘)
  • 全局代码优化:多个之间的优化,从CFG入手

CodeQL笔记

看了一点点CodeQL,真的感觉懵懵懂懂的,需要对ast有一定的了解才能写出复杂的codeql。还是得多写啊!

个人理解

CodeQL这个东西,个人感觉想学的深还是得理解AST,理解他对代码构造的CFG。
比如,from Expr e 是创建了一个表达式节点,写过编译器的应该能理解一个Expr代表着什么,因此你就能在合适的地方使用合适的类型,找到合适的节点来处理它。先这样学着语法吧,熟能生巧。

ApereoCAS PaddingOracle漏洞分析 && XXE漏洞利用

PaddingOracle这个漏洞开始实际上是我和@Passer6y挖的一个0day,后来SCTF给撞了…吐了
XXE是之后和@threedream挖的一个0day,目前还经常在用

Padding Oracle

Padding Oracle复习

  1. padding

分组密码Block Cipher需要在加载前确保每个每组的长度都是分组长度的整数倍。一般情况下,明文的最后一个分组很有可能会出现长度不足分组的长度。这个时候,普遍的做法是在最后一个分组后填充一个固定的值,这个值的大小为填充的字节总数。即假如最后还差3个字符,则填充0×03。这种Padding原则遵循的是常见的PKCS5标准

Jenkins&XStream漏洞调试

Jenkins

Orange打法

懒得写了,总结起来就是,Jenkins有个buildDispatch方法,会在dispatch中加入各种方法解析规则,比如调用getXX(),doXX()等。 而在处理路由的时候,比如传入.com/aa/bb/cc/dd,则会链式调用jenkins.model.Jenkins类的getAA方法,再调用返回的类/对象的getBB方法一直递归下去,而这个调用是调用的继承树中的方法,即可以调用整个继承树中符合规则的方法。

libcpwn漏洞利用-入门

ROP

ret2syscall

通过ROPgadget跳来跳去给eax-edx赋值,最后跳到int 0x80上来触发execve

ret2libc

这个感觉有点意思,首先需要通过write或者puts来泄漏__libc_start_main的地址,然后通过LibcSearcher找到system的偏移,再ret到system。下面详细解析一下exp

Proudly powered by Hexo and Theme by Hacker
© 2020 LFY