pwn
eeeeeeeeeeeeeeeea
这个作者很懒,什么都没留下…
展开
-
SWPUCTF_2019_login
通过这个题学到了用gdb.debug("./程序",“此处可下断点”)此题拿到是没有头绪的,看了师傅们的wp才发现,原来格式化字符串也能出的挺难。偏移为9的地方和got表中的printf很接近,我们就利用格式化字符串将此处的值换为printf_got。同时将偏移为8的地方换成printf_got+2,这是为什么呢,因为我们之后需要将printf_got替换为system,而本题不能直接用%n替换,要用%hhn和%hn。分步分析:第一步:不用解释了吧from pwn import *io =原创 2021-07-19 22:13:08 · 310 阅读 · 0 评论 -
SWPUCTF_2019_p1KkHeap
这个题是修改管理tcache的chunk的结构来达到可以任意malloc的目的。思路:这题保护全开,一看就是在hook中填shellcode,onegadget等等做法,还需要泄露libc基址,这需要控制tcache_struct,改控制tcache chunk数量大小的地方,然后在delete一个相同大小的chunk,就放到unsorted_bin中,泄露完成。收获:分步分析exp第一步:写函数from pwn import *context.update(arch='amd64', os='原创 2021-07-18 20:22:50 · 192 阅读 · 0 评论 -
zctf_2016_note2
这是一道unlink的题,非常经典。unlink是什么,顾名思义,就是把其中一个chunk块给free掉。会将堆块的地址变成存放堆块地址的地址附近。看图需要绕过的检查:1.后一个堆快的prev_size为要为unlink堆块的大小。并且pre_inuse要为0,只有这样,prev_size才有效。2.需要构造fake_fd,fake_bk。(这里不考虑large_bin的检测)fd_nextsize和bk_nextsize思路1.首先一定要泄露libc基址,这样才能向下进行攻击。那么,如原创 2021-07-03 13:01:49 · 170 阅读 · 0 评论 -
ciscn_2019_s_6
这道题好坑呜呜。远程没有doubel free检查,而本地有。所以我tmd调了一天的脚本这里我就简单说下思路吧:能做到这道题的师傅都很强1.保护全开,没有后门函数,就想到改malloc_hook或者free_hook为system函数或者onegadget,这道题的远程没有double free检查。2.我们要先泄露libc基址,需要用unsorted_bin头为main_arena+88计算。3.然后就有很多方法getshell了,如1所述。用double free来add堆块到free_ho原创 2021-06-19 00:35:43 · 377 阅读 · 0 评论 -
jarvisosoj_fm
乍一看像是一个格式化字符串漏洞,但是这种漏洞我不太明白,于是昨天晚上恶补了一下,对%n有了更确切的了解。思路:1.这题明显就是将x更改为4就可以获得shell,然后我查看到x的地址固定为0x804a02c,这个地址存放的数据为0x3。要让他变为0x4。2.%n和%s一样,都要解析地址然后输出。%s是解析地址然后输出这个地址指向的内存数据,%n是解析地址,然后向次地址中填入之前打印字符的长度。(printf最后把格式化字符串的地址放入栈中,首先会把参数从右至左压入栈若没有参数,则会将栈上的内容作为参数输出原创 2021-05-07 08:27:41 · 145 阅读 · 0 评论 -
ciscn_2019_es_2
这一题主要是利用栈迁移,这对我来说是新知识,所以花了比较长的时间来复现和看其他师傅的wp。思路:1.read0x30个字节,而s大小只有0x28,留给我们的操作空间不大呀,那我们把前边题目要写入垃圾数据的空间不填入垃圾数据,填入需要的payload,然后在ebp位置上填要返回的位置(就是填垃圾数据的地方),最后在ret位置上填leave_ret的地址(这里要注意,vul函数退出时有一个leave_ret,但是我们又构造了一个leave_ret)明天出动态调试过程,今天不想动脑嘿嘿...原创 2021-05-05 23:45:52 · 642 阅读 · 2 评论 -
ez_pz_hackover_2016
#-*- coding=UTF-8 -*-from pwn import *context(os='linux',arch='i386',log_level = 'debug')#sh = process('./ez_pz_hackover_2016')sh = remote('node3.buuoj.cn',26119)elf = ELF('./ez_pz_hackover_2016')shellcode = asm(shellcraft.sh())#gdb.attach(sh)sh.原创 2021-04-30 15:14:44 · 251 阅读 · 0 评论 -
绝对详细的babyheap_0ctf_2017题解
这是我第一次做堆题,其他师傅的wp都看了一个周左右,才把大概所有我不明白的地方搞懂。直接上其他师傅的exp,然后逐步分析叭。(希望我尽快可以自己做堆)from pwn_debug import *pdbg = pwn_debug(‘babyheap_0ctf_2017’)pdbg.remote(‘node3.buuoj.cn’,26076)p = pdbg.run(‘remote’)def allocate(size):p.recvuntil('Command: ')p.sendline(‘原创 2021-04-24 11:06:26 · 1095 阅读 · 6 评论 -
详细ciscn_2019_s_3题解
来了来了,我拖了好久,因为吧,之前做了个堆题,大概用了一周才做完,做完堆题,下一个题是栈的,我以为会很简单,但是对我来说很难诶。上才艺…(系统调用其他师傅都有写,我就不赘述啦啦啦啦啦),因为师傅们翻到我这里肯定对系统调用有了解了呀,我这么菜,只能在最下边呜呜呜。1.拖入ida,反汇编(64位),注意到函数传参与32位会不同。在函数框内发现vuln(大家应该对这种函数很熟悉了吧),还有gadgets函数,奇怪,正常的栈不会有这种东西啊,于是我就点进去看了看,看到了这两个像rax进行传参的汇编,这就为我们原创 2021-04-23 20:37:51 · 1552 阅读 · 5 评论 -
ciscn_2019_n_8
最近做题好少啊,感觉堆好难啊。废话不多说了,这是我做过的挺简单的一个题了。1.拿到文件,直接file,发现保护基本全开,心里一凉,然后拖入ida。2.发现是个很简单的栈溢出,如果var数组的第14个参数为0x11,即可调用system(’/bin/sh’)。而又有scanf函数,且第一个参数为var数组的首地址。3.expfrom pwn import *context.os=‘linux’context.arch=‘i386’context.log_level=‘debug’#sla=原创 2021-04-07 23:36:15 · 516 阅读 · 0 评论 -
2021.3.23所感
一 记ret2lib2中的构造ROP链的通用方法首先需要向栈中填充垃圾数据,覆盖子函数的最底部(父函数的ebp的值),在ret previous address内填充要调用的函数(目前我接触到的都是system或gets)。在填充函数更高地址处填充pop_ret指令的地址,因为这样可以把子函数的参数弹出栈,不会影响下一个函数的调用。假设子函数是system函数过程:进入system函数,然后在栈中向上两个单位去寻找system函数的形参,执行完system后,esp指向pop_ret,这时候原创 2021-04-05 01:11:34 · 147 阅读 · 0 评论 -
ciscn_2019_en_2
1.是64位的文件,拖入IDA分析,发现好复杂一串,我们直接在终端中运行一下,就知道其中的逻辑很简单选数字几就会进入其中的函数运行,这里我们要进入Encrypt函数,因为其中有gets函数和puts函数,我们要利用puts函数来泄露libc的地址值。2.因为是64字节,我们先用垃圾数据覆盖一下栈,然后sp到ret指令的地址时,用pop_rdi_ret来将puts_got表的内容弹到rdi中,然后再去执行puts函数,最后回到main函数,这时已经泄露了puts函数的真实地址。3.接下来,我们就应该获得l原创 2021-04-05 01:10:58 · 264 阅读 · 0 评论 -
get_started_3dsctf_2016
额,鸽了好久,因为这几天在将之前学的来做题总结和应用一下,发现学了和没学差不多,很难受就。BUUCTF get_started_3dsctf_20161.直接进入from pwn import *,然后elf = ELF(“get_started_3dsctf_2016”),直接显示是32位的,且打开了NX,表示代码数据段的执行和写入权限不能同时开启。2.拖入IDA pro,妈呀,好简单的源码,直接gets(v4),有栈溢出的漏洞啊这是。发现v4到ebp的距离为0x38.又在ida左侧的函数名中发现原创 2021-03-30 22:27:07 · 175 阅读 · 0 评论 -
BUU ciscn_2019_n_1
**BUUOJ ciscn_2019_n_1** (今天来晚了,嘿嘿,出去唱歌了,被淋成落汤鸡)1.老规矩,将其checksec和file一下,发现NX保护被打开了,且是64为的ELF文件。2.那就放入IDA64内分析,按fn+F5查看c的代码,发现一个func()的函数,双击进入cat flag直接映入眼帘,我tm直接暗喜,有后门函数了诶,那就不慌了,直接看c的代码。3.要想将后门函数覆盖到返回地址,那就必须要v2=11.28125,可是又没有v2的gets函数,我们...原创 2021-03-19 23:48:07 · 416 阅读 · 0 评论 -
buu的pwn1_sctf_2016
**(学生党太菜了)**pwn_sctf_20161.拿到文件,首先checksec并file一下。发现NX打开了,哦 糟糕.不过不慌,我们下一步打开IDA看一哈2.用32位的IDA打开他,反汇编一下。双击vuln()函数。得到这一大堆我看不懂的东西,不过我看到最后有strcpy函数,知道是一个栈溢出的问题。s的大小为0h3c,且函数中出现I和you,着重分析他俩(经过一系列的百度)。得到最后是用you代替I,这样输入20个I就可以溢出到ebp了。3.我又在全部函数中找啊找,发现...原创 2021-03-18 20:43:22 · 781 阅读 · 0 评论 -
buuctf pwn warmup_csaw_2016
buuctf pwn warmup_csaw_20161.用checksec查看一下保护,保护都在关闭状态。2.将文件拖入IDA64版本(在linux下用file命令查看是64位文件)3.按fn+F5反汇编出现c的代码,发现return gets(v5),其是栈溢出的题目。并且发现一个可疑函数sub_40060D4.双击进去看发现flag文件。5.去查看sub_40060D的地址是0x40060D。6.由于char v5时有rbp-40h,则payload=b’a’*72+p64(0x400原创 2021-03-16 19:54:41 · 236 阅读 · 3 评论