且听风吟

白昼之光,岂知夜色之深

栈溢出基础浅记(3)

控制rdx的方法 从上一篇文章可以发现,鲜有类似pop rdx;ret这样的指令。 wiki中介绍了一个方法,就是会找到strcmp函数,在执行该函数时,rdx会被设置为要被比较的字符串的长度,所以可以通过找到strcmp函数,从而控制rdx。 关于HCTF2016 的出题人失踪了的发现 本来想着先用常规的方法做这道题,看看会不会出问题结果发现最后在执行payload = b'a' ...

栈溢出基础浅记(2)

中级rop(ret2csu)

这部分的内容主要是针对x64的栈溢出ROP,首先回顾一下x86和x64的函数调用区别。 x86 函数参数在函数返回地址的上方 x64 System V AMD64 ABI (Linux、FreeBSD、macOS 等采用) 中前六个整型或指针参数依次保存在 RDI, RSI, RDX, RCX, R8 和 R9 寄存器中...

栈溢出基础浅记(1)

关键注意事项: 栈的结构是什么样的(rsp rbp 高->低) 函数调用的方式(x64 x32 参数存哪儿 返回地址在哪儿 call ret leave干了什么) 可能的gadget存在的方式和地址(直接shellcode,系统调用,libc) 危险函数 输入 gets,直接读取一行,忽略’\x00’ ...

ctf-wiki中题目ret2shellcode的问题

原题目如下: 基本 ROP - CTF Wiki (ctf-wiki.org) 按照叙述,通过vmmap查看该文件的bss段应该是可执行的。 但是,实际上情况如下 可以看到,无论是gdb中查看还是readelf查看,bss段都是不可执行的。 最后找到原因如下(linux内核版本5.8之后有激进的内存保护) basic-rop存在不适用的情况。ret2shellcode在u...

pie类型二进制文件的断点调试

问题描述 当我对使用gcc 11.4.0直接编译的linux程序进行分析时,执行readelf结果如下: $ readelf -h a.out ELF Header: Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 Class: ELF64 Data: ...

二进制分析实战第八章

自定义反汇编

第8章 自定义反汇编 本章主要介绍了如何用Capstone来实现一个自定义反汇编器。 在一般的反汇编工具中,不会提供调用反汇编过程本身的选项,因此,针对进行了代码混淆的二进制程序(例如指令重叠)或者是包含了手动汇编、高度优化的代码,一般的反汇编工具就会出现问题。 编写自定义反汇编器用于需要完全控制反汇编过程的所有情况 。除了处理混淆程序外,有时你可能会想从反汇编中省略一些代码路径。如当...

二进制分析实战第七章

第七章 简单的ELF代码注入技术 本章主要介绍了几种ELF文件注入技术,包括了使用LD_PRELOAD劫持和直接修改文件,大部分示例都是使用了elfinject工具注入代码节,然后使用hexedit修改调用点(包括修改将注入节作为入口点,劫持构造和析构函数,劫持GOT条目,劫持PLT条目等) (没啥总结的了,等之后把练习题写在下面)

二进制分析实战第六章

第六章 反汇编与二进制分析基础 反汇编一般分为静态反汇编和动态反汇编(前者不执行,后者执行) 静态反汇编 加载二进制文件——>找出所有的机器指令——>反汇编指令为可读形式。 一般有线性反汇编和动态反汇编两种方法。 线性反汇编:它以二进制的形式遍历所有的代码段,连续解码所有的字节,并将其解析为指令列表。 并非所有的字节都是指令 内联...

二进制分析实战第五章(5)

第五章 Linux二进制分析 分析lvl5文件 $ file lvl5 lvl5: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=1c4...

二进制分析实战第五章(4)

第五章 Linux二进制分析 第四题:分析lvl4文件 $ file lvl4 lvl4: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1...