ctf_susctf2022_rain
SUSCTF-Rain
分析
checksec;
$ checksec rain [*] '/home/klose/ctf/pwn/file/adworld/susctf2022/rain/rain' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000)
IDA64分析
看一下题目给的libc.so.6用的libc版本;
在glibc-all-in-one中download,使用patchelf进行libc和ld的更换;
替换完成后,分析执行文件;
main函数
void __fastcall __noreturn main(__int64 a1, char **a2, char **a3){ int choice; // [rsp+14h] [rbp-Ch] rain *rain; // [rsp+18h] [rbp-8h] ini ...
static_program_analysis_04_data_flow_analysis_foundations
Data Flow Analysis – Foundations
Contents
Iterative Algorithm, another view
Partial Order
Upper and Lower Bounds
Lattice, Semilattice, Complete and Product Lattice
Data Flow Analysis Framework via Lattice
Monotonicity and Fixed Point Theorem
Relate Iterative Algorithm to Fixed Point Theorem
May/Must Analysis, A Lattice View
Distributivity and MOP
Constant Propagation
Worklist Algorithm
涉及到:数学理论和证明,内容概念抽象而繁杂。
Iterative algorithm
This general iterative algorithm produces a ...
router_vuln_D-link-Dir815
D-LInk DIR-815路由器多次溢出漏洞分析
漏洞简介
从exploit-db所公布的POC和漏洞公告中,可以知道漏洞存在于名为"hedwig.cgi"的CGI脚本那种,未认证攻击者通过调用这个CGI脚本传递一个超长的Cookie,使得程序堆栈溢出,从而获得路由器远程控制权限;
可能影响的路由器有:D-Link DIR-815、DIR-300、DIR-600、DIR-645;
分析
固件下载:
固件提取
binwalk -e --preserve-symlinks DIR-815A1_FW101SSB03.bin
这里之所以与书上不同(–preserve-symlinks),是因为没有这个选项的话,解压出的固件文件夹里的文件会处于安全考虑链接到/dev/null,置空,会严重影响后面的调试,如图。
可以找到处于_DIR-815A1_FW101SSB03.bin.extracted/squashfs-root/htdocs/web/文件夹中的hedwig.cgi,其指向了_DIR-815A1_FW101SSB03.bin.extracted/squashfs- ...
router_vuln_analysis
漏洞分析
在代码中迅速定位漏洞,了解供给与案例,准确估计潜在漏洞利用方式和风险等级。
漏洞分析方法
动态调试
IDA动态调试 -> 跟踪指令执行流程 -> 追踪输入数据在程序中的处理过程
静态分析
了解底阿妈结构 -> 获得高质量的MIPS反汇编代码 -> 辅助调试
POC: Proof of COncep
Link:exploit-db
router_vuln_file_system
路由器文件系统提取
路由器文件系统
更新路由器 -> 更新固件(操作系统内核、文件系统), 固化在只读存储器中。
路由器固件
固件下载地址
检索文件系统的magic标签
cramfs文件系统头部特征字符为"0x28cd3d45"
squashfs文件系统头部特征较多,有一些是标准的,例如sqsh, hsqs, qshs, shsq等等;
检查是否为cramfs
由于不知道大小端序,所以需要判断两次;
$ strings dir645_FW_103.bin | grep `python -c 'print "\x28\xcd\x3d\x45"'`$ strings dir645_FW_103.bin | grep `python -c 'print "\x45\x3d\c3d\x28"'`
没有任何输出,说明不是该类型的文件系统;
检查是否为squashfs
$ strings dir645_FW_103.bin | grep "hsqs"hsqs ...
router_vuln_shellcode
基于MIPS的Shellcode开发
MIPS Linux系统调用
Mips中采用了syscall指令进行系统调用。
调用方法
在进行syscall调用前:
需要使用$v0来保存需要执行的系统调用号;
按照调用规则构造系统调用参数,伪代码为syscall($v0, $a0, $a1, $a2);
例如,如下代码调用了exit系统调用:
li $a0, 0li $v0, 4001syscall
一般而言,在mips的/include/asm/unistd.h中,可以找到对应的系统调用号,例如如上所示的4001号调用exit,就可以在其中找到。
例子
write
可以看到进行write系统调用需要三个参数,$a0指定了文件描述符,$a1指定了输出缓冲区的地址,也可以理解为指向要输出的信息的地址指针,$a2指定了输出的字符数量;
在C语言中,可以这样调用write进行输出;
int main(){ char *str = "ABC\n"; write(1, str, 5);}
生成汇编文件
$ /home/klose/mips/cross-co ...
static_program_analysis_03-data_flow_analysis
Data Flow Analysis
Overview of Data Flow Analysis
What is Data Flow Analysis
May Analysis: Abstraction, Over-approximation is for most static analysis, outpus information that may be true
Must Analysis: Abstraction, Under-approximation is for specific static analysis, outputs information that mast be true
Safe-approximaiton
may analysis - over-approximation
must nanlysis - under-approximaiton
How application-specific Data Flows through the Nodes(BBs/statements) and Edges(control flows) of CFG? ...
talk
扯嘴皮子
push项目到github
github新建仓库,最好和本地项目一致,复制一下仓库地址,一般就是https://github.com/xxx/xxx.git。
选定项目文件夹,使用git clone来克隆仓库到本地;
做完工作后,输入
git add .git commit -m "first commit" // 自定义git push -u origin master
可能会需要账号密码,2021/8/13后需要用个人的token来访问仓库。
可以用下面的命令来避免每次都要输入token
git remote set-url origin https://<your_token>@github.com/<USERNAME>/<REPO>.git
其他一些git指令:
$ git init #把当前目录变成git可以管理的仓库$ git add readme.txt #添加一个文件,也可以添加文件夹$ git add -A #添加全部文件$ git commit -m "som ...
static_program_analysis_02_intermediate-representation
Intermediate Representation
Compilers & Static Analyzers
静态分析和编译器的关系?
如上图;
Source Code通过Scanner生成了Tokens,Scanner完成了词法分析,根据正则表达式(Regular Expression)对不合法的词语进行处理,最后将每个合法的词生成一个tokens;
Paser进行语法分析,也可以称句法分析,根据上下文无关文法(Context-Free Grammar)将无法识别的词句进行处理,生成了AST(抽象语法树);这里不用上下文敏感文法而言,因为是上下文无关文法用来表述程序语法已经足够,否则将会导致分析编程语言时效率十分低下;
Type Checker进行语义分析,例如上图中的Apples eat you,编译器进行简单的语义分析,例如类型检查的错误,根据Attribute Grammar的规则来进行处理,最后生成装饰后的抽象语法树(Decorated AST),其中包含检查过的类型信息等;
前面步骤都通过后,如果编译器需要对程序进行后期优化,还需要使用转换器(Transla ...
static_program_analysis_01_introduction
Introduction
Links
official link
PL & Static Analysis
What is Program Languages
Theory - 理论
Language Design - 语言设计
Type System - 类型系统
Semantics and Logics - 语义和逻辑
…
Environment - 环境
Compilers - 编译器
Runtime System - 运行时系统
…
Application - 应用
Program Analysis - 程序分析
Program Verification - 程序验证
Program synthesis - 程序合成
…
Background
过去几十年,语言的核心没有变化,但是语言应用的环境,即语言写的程序和环境变得越来越复杂。
Challenge
如何保证复杂程序的可靠性、安全性和其他性能?
Why we learn static analysis?
Application
Program Reliability
Null pointer d ...