- 博客(6)
- 收藏
- 关注
原创 MRCTF 2021 8bit adventure
MRCTF 2021 8bit adventure程序大概的意思是只能用一个字节的汇编语句进行orw要注意的是程序中使用了close(0),使用使用open系统调用时返回的文件描述符应该是0懂汇编就会做from pwn import *context(os='linux', arch='x86',log_level='debug')io=process("adventure")# ebx,ecx,edx# open 利用自加和自减控制寄存器的值,利用push和pop 还有修改esp 在栈上
2021-04-14 13:50:51
342
原创 IO FILE 学习和利用(一)
IO FILE 学习和利用(一)libc2.23版本的利用IO_FILE_plus结构体中包含了两个部分,一个是_IO_FILE结构体,一个是指向_IO_jump_t 结构体的指针在这个版本下的利用多为伪造IO_FILE_plus结构体32位下的利用方法:(1)关闭流的时候,在_IO_FINISH(fp)的执行过程中getshell(2)调用fclose函数关于_flags_flags & 0x2000为0就会直接调用 IO_FINSH(fp)_flags & 0x2000
2021-03-26 10:34:58
217
原创 如何在做pwn题的过程中使用gdb测试
如何在做pwn题的过程中使用gdb测试前言本人也是刚入门久,以前苦于在写exp时怎么利用gdb进行调试分析,总不能一个一个字节的在gdb写入调试吧,哈哈哈,那样太傻了。献丑了,大佬们笑笑就好方法本人了解的方法有两种上代码def debug(): #该方法会在程序未结束时打开gdb对程序进行调试,在debug后就进入了交互模式 gdb.attach(io) io.interactive() def debug_pause(): #该方法会在程序未结束时打开gdb对程序进行调试,而且会逐一
2021-03-07 16:59:43
685
原创 BUUCTF qwb2018_opm
参考了这位师傅的writeup基础知识:(1)首先要知道用gets()读取数据时,是读不到换行符,读取的换行符会被转换为null值。(2)程序系统函数的地址的高位字节是一样的,只有低位不同查看保护:查看保护 发现可以修改got表漏洞add函数中的gets函数存在栈溢出。add函数中有两个gets函数,都可以用来修改存储在栈上的结构体指针。细节如下:(1)(此时还不能修改存储在栈上的指向结构体的堆指针)add函数先为结构体申请堆地址,然后在结构体里写入了输出函数的地址(2)调用gets函数
2021-03-07 16:45:47
337
原创 BUUCTF qwb2018_slient2
BUUCTF qwb2018_slient21、该题在BUUCTF上的环境是2.27版本,所以相对来说更加的容易了2、只需要利用double free 使用tcache attach攻击free函数的got表的地址3、然后在free的got表中写入sysytem函数的plt表地址4、再free掉一个写入/bin/sh的chunk即可from pwn import *context(os='linux', arch='amd64',log_level='debug')io=remote("nod
2021-03-06 19:11:25
215
原创 2017湖湘杯 pwn300
2017湖湘杯 pwn300该题为简单栈溢出,利用方法如下:(1)覆盖返回地址为read函数读入shellcode(2)执行mprotect让bss段的地址变的可执行(3)跳转shellcode执行即可from pwn import *context(os='linux',arch='x86',log_level='debug')io=remote("node3.buuoj.cn",29028)#io=process("pwn300")elf=ELF('pwn300')def add
2021-02-28 11:09:15
162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人