babyprintf_var2 先看一下保护措施,由于有FORTIFY,而且libc的版本是2.27,所以不能使用格式化字符串的思路,而且出题人故意给栈上填充了很多数据,所以不能使用格式化字符串的思路来leak地址或者修改内存。 所以这题目和the_end一样,考察对_IO_FILE的利用 在main()函数中,现将stdout的虚表指针取出来,后面判断,如果不...
buuoj-pwn-hctf2018_the_end总结lb = ELF(...)使用 重温了一遍攻击exit指针,还有如何找__libc_atexit虽然改不了反弹shell重定向 详细看这个 exec 1>&0_luooofan的博客-CSDN博客_exec1 除此之外,还有以下重定向:sh 1>&0 sh>&0 /bin/sh>&0 ...
pwn-the_end readme.md View all files Repository files navigation README HCTF 2018 (part) 这是我第二次参与HCTF的出题和策划,这次一共出了4道题,如下。 详细见文件,下面是简要思路解释。 Pwn - the end (46 solves) 这题本意是作为签到题,看下来效果也的确不错。 程序给你5次任意地址写1byte的机...
2018 HCTF the_end 第一次学习,简单记录一下思路 程序流程 程序会让你先输入一个地址,在往这个地址里面输入值 看了wiki上面说,exit执行时,会遍历_IO_list_all,然后调用_IO_2_1_stdout_下的vtable中_setbuf函数 所以我们可以hook _setbuf这个函数 不过在wiki看到了这个公式,这里的off_set_3其实意思是自己设置...
<buffer>: 0x0000000000000000 0x0000000000000000 然后此时在续表附近寻找一个fake_vtable,需满足以下条件:fake_vtable_addr + 0x58 = libc_base + off_set_3 其中0x58根据下表查处是set_buf在虚表的偏移void * funcs[] = { 1 NULL, // "extra word" 2 NULL, // DUMMY 3 exit, // finish 4 ...
因为glibc是2.23的,没有vtable的检查,因此修改函数表不会引起程序的错误。 查看exit函数的源码,exit中存在一条函数调用链,exit->__run_exit_handlers->_IO_cleanup->_IO_flush_all_lockp。看到最后这个_IO_flush_all_lockp就感觉应该可以利用这一点拿shell。这个函数里关键的源码是: ...
the_end 程序本身的功能为5次任意地址(用户输入)的1字节写随后调用exit()函数,且提供了sleep@libc的地址。通过单步跟踪exit()函数可以发现,程序在_dl_fini()函数中会 callQWORDPTR[rip+0x216414]# 0x7ffff7ffdf48 <_rtld_global+3848> 因此,只要将0x7ffff7ffdf48 <_rtld_global+3848>处修改为one_gadget的...
sendline('RVZhvB2OtdydtHAaHxdEeRcFzZlKIC9U') #p = process('./the_end') #p.interactive() pwn(p) babyprintf_ver2from pwn import * context.log_level = 'debug' context.aslr = False def pwn(p): p.recvuntil('So I change the buffer location to ') program_base = int(p.recvuntil('...
the end 解题思路 void __fastcall __noreturn main(__int64 a1, char **a2, char **a3) { signed int i; // [rsp+4h] [rbp-Ch] void *buf; // [rsp+8h] [rbp-8h] sleep(0); printf("here is a gift %p, good luck ;)\n", &sleep); ...
the end 这题本意是作为签到题,看下来效果也的确不错。 程序给你5次任意地址写1byte的机会,然后马上exit。那么问题很明显,肯定是要怼exit了。 因为程序是FULL RELRO的,所以打linkmap的方法就无法生效了(hack.lu ctf slot_machine) 仔细跟踪exit,能够控制程序流的地方有两处,一处是tls,一处是IO_FILE。 tls处...