1.6k1 分钟

# 1. 查看程序 32 位程序,开启了 NX ida 反汇编: vul函数 :可以看到只能溢出两个字,也就只能覆盖 ebp 和 ret,这种一般都需要栈迁移 hack函数 :只提供了 system 函数,无法获得 flag,所以不能直接用这个地址覆盖 ret # 2. 漏洞分析 由于可以溢出的字节数太小,所以就需要进行栈迁移,这里要考虑迁移的地址,首先 bss 段上没有很大的空间,并且没有备份去写入内容到 bss,所以就只能考虑栈上,那么就需要我们泄露栈上的地址,这里就可以利用 printf 来打印出 mian 函数的 ebp 地址再利用偏移就能计算出我们输入的字符串的地址:
9461 分钟

# 1. 查看程序 64 位程序,保护全开 ida 反汇编查看: 从上面看到会将一个字符串复制到 V5,然后有一个 check 的函数: fake_flag: check 函数会将复制过去的 v5 与系统保存的字符串逐个进行对比,直到对比时两个字符串相等时返回 1 ,就可以 getshell # 2. 漏洞分析 由于一开始复制给 v5 的字符串在栈上,而后面有个 get 函数也是往栈上写内容,并且地址更低也就可以覆盖 v5 的内容来满足后面的判断 # exp nfrom pwn import *from LibcSearcher import *#context.log_level
9251 分钟

# 1. 查看程序 32 位程序,开启了 NX IDA32 查看 main: vuln: 后门 win: # 2. 漏洞分析 有 gets 函数可以导致任意字节的溢出,然后有个后门,溢出到这里传参满足条件就行 # 3.exp nfrom pwn import *from LibcSearcher import *#context.log_level = 'debug'context(os='linux', arch='i386', log_level='debug')p=r
1.2k1 分钟

# 1. 查看程序 32 位程序,开启了 nx ida32 查看 main: vulnerable: (可以溢出 12 个字节,也就是 32 位的 3 个字) 后门 shell ,可以发现并不是 '/bin/sh',被用来进行干扰了 # 2. 漏洞分析 一开始想着用栈迁移 因为后门有执行 system 函数,尽管无法 getshell,但是却提供了 call system, 限制了溢出的字节数,所以无法利用 system_plt 的地址 (因为需要返回地址,这样字节数不够),【而 call system 会直接将下一个命令压入栈中】,也就避免了在
11k10 分钟

为防止题目难度跨度太大,135-140 为演示题目阶段 # pwn135 # 题目 题目描述: 如何申请堆? Arch: amd64-64-little RELRO: Full RELRO Stack: Canary found NX: NX enabled PIE: PIE enabled 演示了 malloc 、 calloc 、 realloc 函数 区别: 函数 malloc 不能初始化所分配的内存空间,而函数 calloc 能 函数 calloc () 会将所分配的内存空间中的每一位都初始化为零 realloc 可以对给定的指针所指的空
20k18 分钟

# 有收获的题目 pwn69(沙盒机制) pwn76(逻辑分析题,栈迁移但是只覆盖了 ebp) pwn79(ret2reg, 利用 call /jmp 跳转到保存 shellcode 的地址的寄存器来执行) pwn80(还差最后几步,盲打还是没怎么见过) # pwn69(沙盒机制) # 题目 题目描述: 可以尝试用ORW读flag flag文件位置为/ctfshow_flag Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PI
4.6k4 分钟

# 收获的题目 # pwn81(开启 pie,利用 libc 的 system 地址得到 libc 基地址) dlopen 函数是打开一个动态共享库 dlsym 函数是在打开的动态库中查找符号的值,返回该符号(函数 / 变量)的地址 # 题目: 题目描述: ROP变种 Arch: amd64-64-little RELRO: Full RELRO Stack: No canary found NX: NX enabled PIE: PIE enabled main: cint __cdecl main(int argc, const cha
1.8k2 分钟

# 1.vmmap 有时没有显示正常的执行权限 ctfshow (pwn60) ubuntu22.04pwndbg 和 ida 显示 bss 没有执行权限,而再 ubuntu18.03 则可以看到 bss 段有执行权限 # 2.leave 指令对栈有影响 ctfshow(pwn61) leave 指令相当于 mov rsp rbp; pop rbp 将栈顶拉下来和栈顶指向同一位置( 地址 ),那么相当于栈被重置了(栈空间被重置了),这样导致我们在栈空间写入的 有效数据 会被清空(例如 shellcode), padding 一般没有影响,所以要避开这个栈空间内部写入 有效数据 可以通过栈溢
21k19 分钟

# 有所收获的题目: pwn66 (shellcode 开头为 \x00 ) pwn67 (32 位 nop sled ->shellcode) # pwn58(shellcode) # 题目 题目描述: 32位 无限制 32 位程序,开启保护: Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) RWX: Has RWX segments 有可执行段 main(反编译未成功)