Linux内核模块-交叉编译器
GCCGNC C Compiler —> GNU Compiler Collection 包括编译器、链接器、binutils、glibc、头文件 支持多种语言(C、C++、Java、Go)和多种硬件平台(X86、ARM、MIPS、RISC-V) Clang编译器的构成 Frontend:源码分析、语法检查,输出中间代码 Optimizer:对中间代码进行优化、使其运行更高效 Backend:将中间代码转换为某一个平台的机器代码 编译器的实现 GCC:前端和后端分离,支持多种语言、多个平台。但缺点:前后端耦合高,代码可重用性低。 LLVM(Low Level Virtual Machine)框架:模块化设计,代码可重用性高;中间语言LLVM IR,类C表达,可扩展各种前端、后端;支持C/C++/Java等语言 使用LLVM框架的编译器: LLVM GCC:前端使用GCC(Apple) Clang:LLVM+Clang前端(使用C/C++)(Apple,Android) 方舟编译器:编译优化(Java虚拟机,效率提高),鸿蒙系统
LKM编程
Chapter 1. Introduction1.1. What Is A Kernel Module?Linux系统内核:宏内核(与微内核相对),使用内核模块实现动态模块的加载运行。 简介 优点 缺点 宏内核 将进程调度核心功能,驱动程序,网络协议、文件系统都放入内核态 效率高 一个出错就崩溃 微内核 只将核心功能放在内核态,其他放在用户态以进程形式运行 驱动程序出错不影响内核运行 效率低 LKM:用于扩展内核的功能,运行在内核态,为ELF二进制文件,如果不使用内核模块,会导致需要给内核添加功能时只能重新编译整个内核,不是很方便。 1.2. How Do Modules Get Into The Kernel?使用lsmod命令查看已经加载到内核的模块(/proc/modules)。 使用modprobe命令加载指定模块到内核(自动查询模块的依赖关系进行加载/lib/modules/version/kernel/*/*.ko) 使用insmod命令加载模块到内核,不会查询依赖关系(modprobe调用该命令) 12345insmod...
模糊测试分类
根据程序执行反馈的获取情况,可以将模糊测试分为白盒、黑盒和灰盒三类 一、白盒测试白盒测试通过分析被测程序的内部机制和执行被测程序时收集的信息来生成测试用例,白盒测试通常会对程序进行动态污点分析或符号执行以获取精确的程序分析和状态信息。 二、黑盒测试黑盒测试将测试对象当作黑盒,按照指定的规范随机生成测试用例。不提前分析程序内部机制也不接受反馈信息来更新测试用例。 三、灰盒测试灰盒测试的典型特点就是可以使用目标的执行反馈来指导测试用例的生成。
【SeedLab】Magic Padding Oracle实验报告
1. OverviewPadding Oracle:一些系统在解密密文时,会先验证其填充是否合法,如果不合法则会抛出异常。针对此行为的攻击即为padding oracle攻击 2. Lab Environment Seed虚拟机 Labsetup.zip 使用dcbuild和dcup命令启动docker环境 3. Task1:Getting Familiar with PaddingPadding:分组加密算法要求明文长度需要为分组长度的整数倍。因此需要padding填充末尾使长度满足要求 使用echo -n创建文件P,长度为5。-n参数表示结尾不带换行符 1echo -n "12345" > P 使用openssl命令对文件进行加密,并且对加密文件解密查看padding 12345# 加密openssl enc -aes-128-cbc -e -in P -out C# 解密openssl enc -aes-128-cbc -d -nopad -in C -out...
【网络攻防大作业】Return_to_libc实验报告
1.环境搭建 修改flag为学号 构建docker镜像(运行sudo ./build.sh,注意chmod +x修改权限),连接不稳定,可能需要多次尝试 开启docker,禁用ASLR。 使用netstat -antp查看ssh服务状态 登录容器ssh 0.0.0.0 -p 49153 -l seed 2. 漏洞利用运行镜像中vuln程序,vuln有setuid权限,因此可以尝试通过此来获取root shell。 查看vuln源代码: 12345678910111213141516171819202122232425262728293031323334353637383940#include <stdlib.h>#include <stdio.h>#include <string.h>#ifndef BUF_SIZE#define BUF_SIZE 12#endifint bof(char *str){ char buffer[BUF_SIZE]; unsigned int *framep; ...
Fuzzware论文笔记
摘要实现了模拟器Fuzzware,特点:减少了fuzz的input开销,节省了时间。 解决问题针对当前几种对固件模拟fuzz的方法的局限性进行了分析 high-level模拟:通过挂钩完全绕过MMIO的模拟。局限:过于high-level,无法发现外设驱动代码的漏洞。 pattern-based...
linux虚拟机设置github加速
最近在使用vmware虚拟机跑项目复现,需要频繁使用github,因此在此记录下github加速的简单方法 https://zhuanlan.zhihu.com/p/432414619
Fudge论文笔记
摘要google针对c与c++库提出了新的fuzz driver自动化生成方式。 解决问题对C/C++库代码片段的slice_based_fuzz。 主要贡献基于google海量代码库进行测试,完成了Fudge可以有效的处理海量的代码。发现其中的安全漏洞 尚存不足fuzz基于源代码,可以考虑在编译源代码为可执行文件后加入动态符号执行等技术。(也在其Future Work中体现(还提到了Machine Learning)) Fudge具体过程Slicing...
Fuzzware复现
项目链接:https://github.com/fuzzware-fuzzer/fuzzware 1. 环境Ubuntu22.04 docker 具体过程比较简单,可以直接看github readme 2. 复现1./run_docker.sh examples fuzzware pipeline --skip-afl-cpufreq pw-recovery/ARCH_PRO 由图可以看到刚开始运行时发现新的MMIO寄存器模型,由于MMIO Access Model中并不存在,因此会将其定义为新的模型,然后继续向下运行 建模完毕后,开始进行正常的fuzzing阶段。 一轮fuzzing结束后,根据反馈调整输入,开始下一阶段fuzzing。
Winnie论文笔记
解决问题对当下Windows系统软件的fuzz没有合适的方法。提出了Winnie对Windows闭源软件进行fuzzing。 主要贡献 提出了Winnie,可以对Windows闭源软件进行模糊测试 实现了windows系统的fork方法,使得可以不用每次执行都得从头开始,提高了fuzzing效率,其中fork新进程的速度达到310次/s显著高于windows自带CreateProcess91.9次/s,与WSL的fork速度相近。 尚存不足 由于闭源特性,无法全自动,需要人工参与fuzzer代码的生成 具体细节 生成fuzz代码 Target Identification:确认二进制程序中可以用于fuzz的输入点(读取用户输入的api或函数) Call-seq Recovery:恢复目标程序中函数体内对各个相关targetfunction调用的顺序(类似于fudge) Argument...