摘要:
基本啥保护都没开,也没有sys和binsh,第一个考虑写入shellcode 溢出的不是很多,如果自己生成的shellcode会超过溢出字数,自己写的倒可以控制长度 shellcode """ xor eax, eax ; 清零eax mov al, 0x0b ; execve系统调用号(11) x 阅读全文
摘要:
看到shell函数,可以直接找sh字符 ROPgadget --binary wustctf2020_getshell_2 --string "sh" 算一下可以发现只溢出返回地址的后一个 exp from pwn import * context.log_level='debug' io = re 阅读全文
摘要:
先检查一下保护,32位的 分析一下代码,发现buf距离ebp为0x18(24),但是read只溢出0x20(32),也就是只溢出8个字节,刚好覆盖到ret。 第一个read读取0x200到s(.bss段) 两个write会打印m1和m2,点击m1,m2查看 因为溢出不够,这时候我们可以考虑栈迁移,因 阅读全文
摘要:
打开ida查看,可以看到是静态编译,所以无法常规用ret2libc 此时可以用最简单的方法系统调用 首先ida上面的偏移量是错误的,我们手动用gdb算一下距离ebp为0x1c 因为要实现execve("/bin/sh",0,0) 找int 0x80,eax,ebx,ecx,edx 因为程序里面没有b 阅读全文
摘要:
保护只打开了NX,ida打开发现左边有很多函数,是静态编译,无法泄露libc 看一下main函数,挺简单的,只有个栈溢出 这题可以使用ROPgadget工具,终端上输入 ROPgadget --binary rop --ropchain 可以直接生成rop链 不懂的话可以问一下ai是什么意思 这段代 阅读全文
摘要:
查看保护,开启了pie,没开NX保护,可以往栈上写shellcode 打开ida反汇编发现不行 那就直接看汇编,栈的大小是410,read只读入了400,无法造成栈溢出 不过也没关系,读入了0x400,已经可以读入shellcode了。直接往栈上写就行 exp from pwn import * p 阅读全文
摘要:
首先检查一下保护,发现没有开启NX保护,说明可以往栈上写shellcode 首先要确定距离ebp的偏移,还有shellcode的地址(将ret覆盖到shellcode的地址上) 确定离ebp偏移的代码 from pwn import * io=process("./ez_pz_hackover_20 阅读全文
摘要:
一个整数溢出,注意get_n函数把a2转换为了unsigned int类型,但在vuln函数里面比较的是int类型 输入-1即可绕过 这里的libc是不是太老了都打不通 exp from pwn import * from LibcSearcher import * io = remote('nod 阅读全文
摘要:
main里面有个gets溢出函数,再点开flag函数看 可以看到传入了一个a1参数,如果win1和win2都是1且a1为-559039827时会输出flag的值 用十六进制比较,该数的十六进制可以直接再ida里面看到 看到win1函数设置了win1为1,win2函数需要再传入一个参数为-116322 阅读全文
摘要:
一个normal的栈溢出,没有system和binsh,为ret2libc 这里也没有常见的write和puts,所以我们用read泄露libc基址,并使用printf打印read的地址 这里注意printf的第一个参数必须是格式字符串,即Welcome to the Pwn World again 阅读全文