分类: 二进制安全

23 篇文章

thumbnail
CISCN 2023 西南分区赛 over WriteUp
安全措施 程序分析 首先是初始化程序,将 puts 放在了 bss 段 0x4088 的位置,具体查看汇编发现是直接把 puts 的函数地址放进去了。 主程序先接受一个 name 存在 0x4068 位置,然后执行 4 个选项的菜单循环。 选项 1、2、3 分别能够通过 +、-、^ 操作 0x40a0 之前的内存;选项 4 调用 0x4088 位置…
thumbnail
libc.so.6 背后的含义
Linux 有一套规则来命名系统中的每一个共享库,它规定共享库的文件命名规则如下:libname.so.x.y.z,即前缀"lib"+库名称+后缀".so"+三个数字组成的版本号,其中,x 表示主版本号,y 表示次版本号,z 表示发布版本号。SO-NAME 命名机制,就是把共享库的文件名去掉次版本号和发布版本号,只保留主版本号。在 Linux 系统中,系统会为每个共享库在它所在的目录创建一个跟它的 ”SO-NAME” 一样的软链接指向它。
thumbnail
DASCTF 十月赛 1!5! WriteUp
思路 列出可用集,根据可用集逐步构造出全指令集 根据可用集逐步编码shellcode 看了别的师傅有很巧妙的做法:不直接调shell,而是先手写调read,然后输入真正的shellcode,绕过检测。 我这里主要借机学习一下shellcode编码,就按官方思路复现了。 指令集扩展 shellcode字符集 编写一个基础的shellcode: mov…
thumbnail
shellcode编码
shellcode原理 系统调用execve("/bin/sh", 0, 0) 具体可以参考系统调用表、64位linux中断向量表 64位 寄存器: rax = 0x3b rdi = "/bin/sh" rsi = 0 rdx = 0 一段简单的 shellcode: mov rax, 0x68732f6e6…
切割堆块
在glibc源码中搜索split可以找到堆块切割相关源码 在malloc.c的_int_malloc函数中发生堆块切割的情形如下: 遍历unsorted chunks时 请求满足small request last remainder 堆块是唯一堆块,且切割后剩下的仍然满足最小堆块大小 从largebin中找到最小的满足要求的堆块 切割后剩余堆块的…
thumbnail
Pwn安全措施
NX: No Exection gcc -z execstack Canary: defeat bof, 在 return 前做 canary check - security_init() => fs:0x28 (stack guard) - canary end with \x00 gcc -fno-stack-protector: no…
函数调用约定
为了能够调用函数,需要有一种公认的方式来传递参数。 如果程序是完全独立的二进制文件,编译器可以自由决定调用约定。 然而在现实中,会使用共享库(例如 libc)以便公共代码可以只存储一次并动态链接到需要它的程序,从而减少程序大小。 在 Linux 二进制文件中,实际上只有两种常用的调用约定:cdecl 用于 32 位,SysV 用于 64 位。 cd…
thumbnail
DASCTF X CBCTF 2022 九月挑战赛 Appetizer WriteUp
我的第一道沙盒题(竟然不能get shell!!!),主要考察栈帧分配(构造rop链)。顺便学了下pwntools rop的接口,还是挺香的。 我喜欢轮子,exp里会用比较多的轮子,建议看最终exp。 分析过程 栈帧复用 func里面写入的栈帧在check里面复用,通过检测。 io.sendafter(b'identity', …