Sandboxing
观看pwn.college中sandboxing模块的讲解视频所做的笔记 Modern Technologies about SandboxingSeccomp通过设置系统调用的禁用和允许规则来达到目的 Namespace创建一个类似于docker的独立命名空间unshare命令:Run a program with some namespaces unshared from the parent其创建了一个新的命名空间,其与父进程独立。(注:fork系统调用为完全共享,clone系统调用可以指定共享内容) unshare后创建的新进程仍然可以访问原本的目录(如/),因为还没有mount和unmount。(附:使用mount将根目录下的目录,例如/bin等重新mount到新进程下,就可以在新进程下看到,这就是docker container使用的技巧。注意,在外部系统中是看不到mount的目录的,因为unshare不共享mount...
CTF常用工具汇总
记录了ctf的常用工具,随缘更新~ PWNpwntools最基础的工具之一,python库 1234apt-get updateapt-get install python3 python3-pip python3-dev git libssl-dev libffi-dev build-essentialpython3 -m pip install --upgrade pippython3 -m pip install --upgrade pwntools pwndbg最基础的工具之一,调试神器 https://blog.csdn.net/whbing1471/article/details/112410599 checksec1sudo apt-get install checksec ROPgadgethttps://github.com/JonathanSalwan/ROPgadget.git 123sudo apt install python3-pipsudo -H python3 -m pip install ROPgadgetROPgadget...
Bochspwn学习
目的qiling为单线程的模拟,无法模拟并检测到内核中多线程由于条件竞争导致的内核漏洞。因此学习Bochspwn工具的使用,查看能否用于检测内核的多线程条件竞争的内核漏洞。 贡献简介Bochspwn是一个系统范围的工具,旨在记录操作系统内核执行的内存访问,并检查它们,以搜索提示存在某些漏洞的模式,比如“double fetch”。有关内存引用的信息是通过在Bochs IA-32仿真器中运行目标操作系统,在Windows内核中发现了超过50个竞争条件类的漏洞。
【ciscn_2019_es_2】WriteUp
checksec一下,发现只有NX防护。 123456[*] '/home/bronya/Documents/CTF/pwn11/ciscn_2019_es_2' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000) 使用ida打开,发现s存在溢出漏洞,但是只能溢出8字节,无法调用write等函数进行RetLibc。因此考虑栈迁移。 12345678910int vul(){ char s[40]; // [esp+0h] [ebp-28h] BYREF memset(s, 0, 0x20u); read(0, s, 0x30u); printf("Hello, %s\n", s); read(0, s, 0x30u); return printf("Hello,...
【ez_pz_hackover_2016】WriteUp
checksec发现NX保护未开启,因此可以考虑Ret2Shellcode。 12345678[*] '/home/bronya/Documents/CTF/pwn17/ez_pz_hackover_2016' Arch: i386-32-little RELRO: Full RELRO Stack: No canary found NX: NX unknown - GNU_STACK missing PIE: No PIE (0x8048000) Stack: Executable RWX: Has RWX segments ida查看,发现存在栈溢出漏洞,其中n=0x400,因此可以尝试向dest中写入shellcode。 123456void *__cdecl vuln(int src, size_t n){ char dest[50]; // [esp+6h] [ebp-32h] BYREF return...
【babyheap_0ctf_2017】WriteUp
checksec查看,保护全开,可以查看是否有堆的漏洞 123456[*] '/home/bronya/Documents/CTF/pwn18/babyheap_0ctf_2017' Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled ida查看: main函数提供了菜单以及选择功能 1234567891011121314151617181920212223242526272829__int64 __fastcall main(__int64 a1, char **a2, char **a3){ char *v4; // [rsp+8h] [rbp-8h] v4 = sub_B70(); while ( 1 ) { sub_CF4(); switch ( sub_138C() ) { ...
Kernel Pwn 学习之路(一)
参考链接:Kernel Pwn 学习之路(一) 1. 前言本文主要介绍Kernel的相关知识以及栈溢出在Kernel中的利用。 2. Kernel简介本部分全文引用了CTF-Wiki的相关内容。 2.1 什么是Kernelkernel也是一个程序,用来管理软件发出的数据I/O请求,讲这些要求转译为指令,交给CPU和计算机中的其他组件处理,kernel是现代操作系统最基本的部分。 Kernel最主要的功能有以下两点: 控制并与硬件进行交互 提供application能运行的环境 包括I/O,权限控制,系统调用,进程管理,内存管理等多项功能都可以归结到上边两点中。需要注意的是:kernel的crash通常会引起重启 2.2 Ring 模型intel CPU 将CPU的特权级别分为4个级别:Ring 0, Ring1,… ,Ring3。 Ring0只给OS使用,Ring3所有程序都可以使用,内层Ring可以随便使用外层Ring的资源。提升系统安全性 大多数操作系统只使用了Ring0,Ring3。 2.3 状态切换User space to kernel...
DSE论文笔记
简介通过建立一个比较简单的语法简单中间语言(A simple intermediate language,SIMPIL)。对Dynamic taint analysis和forward symbolic execution进行了讲解。 SIMPIL 动态污点分析动态污点分析:跟踪源头与sink点的信息流。任何由污染源推导的值都是污点(T),其他值看作未污染。 两种错误: overtainted:假阳性 undertainting:假阴性 动态污点分析策略Taint Introduction将用户输入作为污染源 Taint PropagationTaint Checking查看是否污染 前向符号执行前向符号性可以通过建立逻辑表达式分析程序在不同输入下的行为。属于静态分析。
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...