stack_migration--NewStarCTF(WEEK2) stack_migration–NewStarCTF(WEEK2) 只开了NX,题目里给了栈的地址 总之,就是栈迁移啊栈迁移,还得迁移两次,还得用ret2libc。 最后看了官方WP,发现栈迁移一次就行了,libc是可以被带出来的。(不过也就当复健了一下两次的栈迁移。) exp: 12345678910111213141516171819202122232425262728293031323334 2024-10-23 pwn #pwn
利用I/O进行libc的泄露 利用I/O进行libc的泄露moe最后一题,无free,堆,存在索引的溢出,可以更改i/o的结构。 先从gdb看一下FILE的基本结构 1指令:p/x *(FILE*)&_IO_2_1_stdout_ _flags 的基础值一般为0xfbad0000(问就是规定的) 它被定义为MAGIC 1234#define _IO_MAGIC 0xFBAD0000#defi 2024-10-23 pwn #pwn
New-Star-Week 3-pwn stack migration revenge New-Star-Week 3-pwn stack migration revenge开了NX和full relro 只溢出了8个字节,典型的栈迁移,这次迁移到bss段上。(以前做过的都是栈上的,特此记录。) 只要认真计算,可以不使用pop_rbp就完成条件。 首先要栈迁移到bss段上,所以要想办法对让read往bss段里输入,这时候要直到,read对buf的确定是rbp-0x50,也就是 2024-10-23 pwn #pwn
NewStatCTF--week3-pwn srop NewStatCTF–week3-pwn srop主函数只有一个输出,一个输入,存在栈溢出 存在syscall函数,没有适当的可以改rdx的别提ret2csu,太麻烦了 所以用srop(而且题目就叫srop) 先改了rbp,然后跳转到主函数的这里 1payload = b'A'*(0x30)+p64(bss_addr)+p64(main_addr) 可以往下不可以 2024-10-23 pwn #pwn
GuestBooK--pwn GuestBooK–pwn 先利用read与puts,填充掉canary的最后一位,把canary打印出来,用这种不一样的字符方便接收和检验 1payload = b"A"*(0x20-0x8-1)+b"B"+b'C' 然后需要利用strcpy输入两次,第一次把最后一位不对的canary以及后门函数地址输入进去,第二次把canary最 2024-10-23 pwn #pwn
ctfshow元旦水友赛-badboy ctfshow元旦水友赛-badboy好久没打了,有人提到了,就看一看。 开了canary和nx保护,原本想着泄露canary,结果找不到泄露的方向。 kl点进去可以看到是6 可以循环两次,第一次泄露6个字节,第二次泄露3个字节。第一次泄露libc,第二次泄露栈。 地址分别相差0x18(24)和0x38(56),fd8-eb0=0x128(296) libc.sym查询不到__lib 2024-10-23 pwn #pwn
一道基础的uaf的两种食用方法~double free 一道基础的uaf的两种食用方法~double free 前情提要:libc-2.23,无teache。 甚至不用改名字,出题人都给把名字叫好了(爱了爱了),这样子调试的时候很舒服 欸,保护连pie都没开,或许还能用它学学别的做法。 长度自定,可以堆溢出,但是这两种做法没有用到,以后考虑用它试着unlink啥的。 创建函数的时候会有输入 delete这里没有指针置0,存在uaf 打印函数 2024-10-23 pwn #pwn
2016 ZCTF note2--unlink 2016 ZCTF note2–unlink很久没打unlink了,上一次打unlink还是将近一年前,如此怠惰 温习了一下重命名,重新指定类型啥的ida操作(重新指定类型没用上:{) 溢出点: 其中 i 是 unsigned 类型,lenth 为 int 类型,所以两者在 for 循环相比较的时候,lenth -1 的结果会被视为 unsigned 类型 输入0也可以符合这个判断 unlin 2024-10-23 pwn #pwn
堆溢出off-by-one (asis-ctf-2016 b00ks) 堆溢出off-by-one (asis-ctf-2016 b00ks) libc-2.23 漏洞点: author name 输入为32,也就是这里的a2=32,经历了32次++a1后,a1[32]=0,而这是第33位。 其他地方对于这个scanf_s的调用正常,因为都是输入的size-1 创建堆块: 这个写着最大32,但是无妨,可以更大,需要注意的是,这里 2024-10-23 pwn #pwn
堆溢出off-by-one (asis-ctf-2016 b00ks) 一个出题人特地设计的怪怪的堆利用点:出题人特地设置了可定义的跳转,并且给了后门函数 先进入这里,看init_User 每次创建一个0x98大小的堆块来记录头信息,参数是0x98,由于堆管理机制,会创建0xa0大小(存在标记位,所以看着是0xa1) 然后看add_User的malloc_lenth的参数是我们输入的长度 点进去malloc_lenth发现,还把原来的长度乘了2 以0x 2024-10-23 pwn #pwn