摘要:
先默认操作 ida: 唯一难点就是用write需要3个参数,然而可以找到rdi,rsi,但是找不到rdx 但是通过gdb可以看见rdx已经被赋值为0x200,因为上面调用read函数时已经赋值了 所以老套路后面都一样 接受地址时换一个接受法 addr=u64(p.recvuntil("\x7f")[ 阅读全文
摘要:
上来先默认 放到ida里看一下 这里的add结构是先创建一个chunk(girlfriend)用来存放指向最后一个创建的chunk和一个函数指针 show函数一度然我以为题目写错了 从girlfriend计算偏移,偏移+1为函数,偏移为参数 delete更是神奇 free偏移指向的地址并且free偏 阅读全文
摘要:
默认: 可以看到有格式化漏洞,看这流程把x改为4就结束了,总体和上题一样 可以看到偏移为11 得到flag exp: from pwn import *#p=process('./fm')p=remote('node3.buuoj.cn',29306)elf=ELF('./fm')x_addr=0x 阅读全文
摘要:
默认操作 可以看到printf存在格式化字符串漏洞,可以修改got表 此时看到一个后门函数 还发现一个 网上查了一下就是当栈溢出时调用这个函数 那么基本思路就是通过格式化字符串漏洞修改stack_chk_fail的got表为后门函数,然后造成栈溢出调用后门函数 然而这道题是64位,和32位格式化漏洞 阅读全文
摘要:
基本操作 看到有明显溢出,通过write函数泄露libc基址再构建payload即可 和那道babyrop一样,就随便写写了 exp: from pwn import * from LibcSearcher import *#p=process('./level3')p=remote('node3. 阅读全文
摘要:
这道题就当作一个知识大整理吧,虽然花了不少时间,但暴露出的问题还是很多的,还是挺感谢这道题的 ida看伪代码 两次读入,虽然有栈溢出,但是只能溢出道ebp和ret 通过第一次read可以得到ebp的值(即栈上的一个地址) 然后进行栈迁移(其实是第一次做这种题) 得到ebp存放的值为0xffb0af1 阅读全文
摘要:
先基本操作 这里header只是打印标题,chall函数里是主体 给s赋值,当字符串以crashme开始时进入vlun函数 要过这个判断很简单,赋值为‘crash\x00’即可(strcmp函数遇到\x停止) vlun函数就是把s赋值400字节给dest,明显的栈溢出 理论上应该时很基础的一道题,然 阅读全文
摘要:
上来直接基本操作 没啥意思 ida里看一眼 好家伙,vlun函数直接拍我脸上了 想要溢出必须绕过这个v2大小的限制 进入get_n函数看一下 就是接受a2个字符的输入,但可以注意到a2是unsigned int型,而判断的时候是有符号的 所以我们传入一个负数,即绕过v2>32的判断,在后面的get_ 阅读全文
摘要:
看了几天堆的题看疯了,做了几道题没感觉就知道今天被降智打击了,那还是整理一下简单的栈溢出题目划划水 首先file看一下 64位 没啥特殊的 再checksec一下 和没开保护差不多 ida里瞟一眼程序 好家伙这么明显,我tm直接溢出 看看有啥溢出的got表————就决定是你了read 由于是64位使 阅读全文