- 2024-11-18[BUUCTF] 萌新pwn
做下第一页test_your_nc直接是/bin/sh,nc上去就行rip先简单review一下函数调用栈的变化。首先记住栈是高地址向低地址增长,简单讲就是栈底在高地址,栈顶在低地址。esp保存栈顶,ebp保存栈底。32位为例,首先反向压入callee的参数:argn,....arg2,arg2,然后压入retaddr,这
- 2024-10-31攻防世界5
cgpwn2发现是32位文件打开main函数发现hello双击进入这里我们发现栈溢出了,双击name我们发现了bss发现这题的system有点问题,后门需要我们自己输入,刚好有bss我们直接用它知道system的地址exp:frompwnimport*context(os='linux',arch='i386',log_level='debug')
- 2024-10-25栈迁移原理及简单应用
栈迁移stackoverflow这个漏洞根据是栈溢出的一个延申,一般进行栈溢出攻击时,会把要返回的地址(有用的地址)溢出到ret处,然后就能控制流程甚至时getshell,但是有时候我们溢出的空间不够,够不到ret(或者栈空间不够存储参数)栈迁移的核心思想就是将栈上的ebp和esp迁移到一个输入不受长度的
- 2024-09-25CTFSHOW pwn03 WrriteUp
本文来自一个初学CTF的小白,如有任何问题请大佬们指教!题目来源CTFShowpwn-pwn03(ret2libc)https://ctf.show/challenges思路1.下载题目放到checksec先查一下2.IDA打开题目Shift+F12查看字符串发现没有system和/bin/sh,但是有libc文件。3.用gdb的cyclic查询一下溢出所
- 2024-07-22格式化字符串漏洞
printf常见格式化字符串%d整型输出(signedint)%o八进制整型输出%x十六进制整型输出%u十进制整型输出(unsignedint)%c输出一个字符%p打印参数地址%s打印参数地址指向的字符串长度控制%d4字节%hd2字节%hhd1字节%ld大于4字节另:%n%n将当前已经打印字
- 2024-07-09not_the_same_3dsctf_2016
not_the_same_3dsctf_2016查看保护就不说了IDA反编译发现为静态编译,不用找libc了这点节省不少功夫。打开main函数,发现栈溢出漏洞偏移为45,这个是根据gdb的cyclic算出来的发现后门函数get_secret,功能是把flag读取赋值给fl4g初步思路为通过栈溢出,调用get_secret,再通过write函
- 2024-06-18BUUCTF PWN
ripchecksec分析一下,发现没有开NX,PIE。栈段可执行,还有RWX的段看了一下main函数存在栈溢出,然后有一个fun函数很奇怪跟进看一下,发现是后门,很简单的ret2text,但是做64位题的时候要注意堆栈平衡frompwnimport*#io=process('./pwn1')io=remote("node5.buuoj.cn",25429)
- 2024-06-17用动态链接动态泄露system地址并利用
已知libc库的情况在动态编译的程序中,如果没有对system函数的直接调用,在plt中就不会存在system函数,也就是不能直接知道system函数的地址在解决动态编译的二进制文件之前,需要了解动态链接的基础知识,这个过程叫作lzy-binding。程序对外部函数的调用要求在生成可执行文件时将外部函
- 2024-06-16编写多个函数的ROP链
我们已经学会了编写单个和两个简单函数的ROP链,在这里我们说一下,编写ROP链多个需要注意的问题之前我们在学习两个函数的ROP时,编写了这样的payload我们当时没有考虑,参数冲突和栈溢出大小,现在我们来说一说举个例子,如果我们上次学习的两个函数的ROP中没有gets函数,而是read函数我们
- 2024-06-04[Black Watch 入群题]PWN 1
frompwnimport*fromLibcSearcherimport*#p=remote('node4.buuoj.cn',25986)p=process('./a')context(arch='i386',os='linux',log_level='debug')e=ELF('./a')level_ret_addr=0x08048511bss_add
- 2024-05-18CTFshow pwn075
CTFshowpwn075题目描述:栈空间不够怎么办?首先检查保护:32位开启NX保护,部分开启RELRO,放入ida中看有两次输入点,输入只能到返回地址,所以考虑用到栈迁移exp:frompwnimport*p=remote("pwn.challenge.ctf.show",28276)elf=ELF("./pwn75")#p=process([elf.path])#l
- 2024-05-11buuctf-pwn-ciscn_2019_es_2
checksecida我们看到在vul函数中,有两个read函数,每个都读取了0x30(48)大小的字符,并放入字符数组s中,也就是说我们能溢出的只有8个字节,刚好覆盖到ebp和返回地址所以我们需要栈迁移,使我们能溢出更多字节首先利用第一个read,输入40字节的数据,刚好覆盖到ebp,然后printf就会顺带打印
- 2024-05-08buuctf-pwn-[OGeek2019]babyrop
查看一下保护情况丢进ida里分析主函数调用了一个含有alarm的函数,这个函数会设置一个定时器,到时间自动退出程序为了方便调试,我们直接patch掉这个函数接着分析,主函数读入了一个随机数,并将其传入sub_804871F函数sub_804871F函数读取输入,并检查输入的是否和随机数相同,不相同
- 2024-03-22GOT表和PLT表
GOT表和PLT表一.引入目地操作系统通常使用动态链接的方法来提高程序运行的效率。在动态链接的情况下,程序加载的时候并不会把链接库中所有函数都一起加载进来,而是程序执行的时候按需加载,如果有函数并没有被调用,那么它就不会在程序生命中被加载进来。这样的设计就能提高程序运行
- 2024-03-07CTFshow pwn49
Pwnmprotect()函数以CTFshowpwn49为例。学习mprotect函数mprotect函数可以将内存权限进行修改为可读可写可执行。intmprotect(constvoid*start,size_tlen,intprot);mprotect()函数把自start开始的、长度为len的内存区的保护属性修改为prot指定的值。一般prot直接修
- 2024-03-04CTFshow pwn47-48
CTFshowpwn47-48ret2libc的两道简单练习。还是很不熟练。pwn47已经给出了\bin\sh的字符串,还有输出了许多函数的地址,所以很容易拿到libc。frompwnimport*fromLibcSearcherimport*context(os='linux',arch='i386',log_level='debug')io=remote("pwn.challe
- 2024-02-14迟来的HIT2024和reaworld2024体验赛WP
目录前言碎语2024.2.14中午rwctf2024体验赛vision哈工大青训营2024结营赛计算器小技巧神奇玩意gdb!再也不用苦哈哈往回翻跟踪fork赛后复现rwpwnhttp搜索字符串,github找源码具体构造GET路径穿越POST栈溢出构造ROP前言碎语2024.2.14中午过年玩也玩了,休息也休息了,终于把之前
- 2024-01-19CTF学习记录pwn篇
作为一个CTF初学者,在这里记录自己学习刷题的过程,不定期更新。此为pwn篇,有关pwn方向的题目会放在这里,目前来说,这篇会主要更新,其他方向也许会有,敬请期待。目录一、formatstring1.[HUBUCTF2022新生赛]fmt-NSSCTF2.test_format-PolarD&N二、ROP1.03ret2syscall_32-PolarD&N
- 2024-01-16xdctf2015_pwn200
xdctf2015_pwn20032位泄露了ibcmain函数中输入vuln函数中存在溢出漏洞非常常规的泄露libc,直接上代码frompwnimport*elf=ELF('./bof')Lib=ELF('/lib/i386-linux-gnu/libc.so.6')io=process('./bof')padding=b'A'*112payload1=padding+
- 2023-12-31ciscn_2019_es_2
ciscn_2019_es_2栈迁移read()存在溢出,但是只有0x30个位置不能拿到shell,所以考虑栈迁移通过泄露参数s在栈上的位置,将payload写入栈上迁移栈到参数s的位置,运行写入的payload拿到shellleaved=>movesp,ebppopebp#清除栈帧,初始化到执行前的样子ret=>popeipj
- 2023-12-30铁人三项(第五赛区)_2018_rop
铁人三项(第五赛区)_2018_rop函数参数劫持32位泄露libcfrompwnimport*context.log_level='debug'#io=gdb.debug('./2018_rop','break*0x8048474')io=process('./2018_rop')elf=ELF('./2018_rop')Lib=ELF('
- 2023-12-30PicoCTF_2018_rop_chain
PicoCTF_2018_rop_chain函数参数劫持整数型绕过\x00绕过len()函数vuln中存在栈溢出flag是后门函数,只要满足win1&&win2和a1=0xDEADBAAD就可以得到flag3.win1&win2存在于.bss段上,但是可以利用win_function1&win_function2两个函数构造win1win2fro
- 2023-12-30pwn2_sctf_2016
pwn2_sctf_2016lib地址泄露vuln()程序对输入的v2做了限制首先要利用整数绕过if(v2>32)的限制程序中没有现成的shell所以要通过printf泄露lib手动构造shellfrompwnimport*context.log_level='debug'io=process('./pwn2_sctf_2016')#io=gdb.debug('./
- 2023-12-30jarvisoj_level3
jarvisoj_level3函数参数劫持32位泄露libc32位程序的传参是栈的后四位开始,要注意的是,32位下write,put的ret位置是紧跟函数后面的payload1=b'A'*(0x88+0x4)+p32(elf.plt['write'])+p32(elf.sym['main'])+p32(1)+p32(elf.got['write'])+p32(4)这段代码中的p32(elf.sy
- 2023-11-27BUU get_started_3dsctf_2016
先checksec一下32位程序,没开PIE,再观察一下主函数gets函数有可能是栈溢出,再观察一下后门函数方法一:考虑栈溢出后直接跳转到if判断后面的语句,进而跳过if条件判断frompwnimport*#p=process('/home/miyu/Desktop/PWN/111/get_started_3dsctf_2016')#context.log_level