![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pwn
文章平均质量分 58
XYYR-c
一只菜菜的pwn手,欢迎和我交流。
展开
-
orange_cat
另:其实不用add那么多次,一次直接改就行,只不过是边打边学的house of orange,刚开始没想明白,后来懒得删上面的了,因为会有些微的地址的差距,懒得再改了。将这个块free掉,修改它的fd指针为伪造的fast_chunk,然后用fastbin attack 打malloc_hook。创建一个0x60大小的块,从unsoterd bin中分割出来,再打印这个块,打印出对应的libc地址。top_chunk 的后三位+size(不包括符号位,符号位要为1),&FFF为0。原创 2024-05-20 21:31:08 · 327 阅读 · 1 评论 -
NKCTF--pwn--Maimai查分器
怀疑可能远程的内部程序偏移不同,用-1到-8,+1到+8试,结果到+4的时候,欸?(后来发现是第二个payload里的4个A给输进去了,不知道为什么我本地不会这么输进去,远程却会()不过当时确实应该好好看看打印出来的东西,确实多了4个A)转换思路:栈溢出后自行用一个read,设置特别大的字节,由于想用orw嘛,就泄露了栈的地址,同时也可以作为这个read的地址。(不知道是不是修复了还是我的问题)没加是因为我本地之前正常不用+,然后本地调完忘了改,现在突然发现。好吧好吧,总算是做出来一个,没被零封()()原创 2024-03-25 19:53:12 · 357 阅读 · 1 评论 -
尝试一下unsorebin-attack
看着都说这个只能改大小没啥用,但是处于务实精神,还是要自己手动试一试的,找了一个存在堆溢出+uaf的来改着试试看看。原创 2024-03-14 22:32:43 · 359 阅读 · 0 评论 -
buu - babyheap(详细版)
补上这个释放的块,然后把4释放掉,再填入fake_fast_chunk的地址,把calloc_hook的地址覆盖为one_gadet。正在回顾以前学过的堆和学习新的堆,看到了wiki的overlapping这一块,突然发觉这不就跟之前学fastbin attack的时候的babyheap一样嘛。漏洞点:堆溢出+overlapping修改fastbin上的指针,实现双重指针指向一处,也就是达成uaf的效果。free和show部分就是正常的释放,指针置0以及正常的打印,就不多看了。然后把原本的块3的大小恢复。原创 2024-03-13 20:28:41 · 368 阅读 · 0 评论 -
堆溢出off-by-one (asis-ctf-2016 b00ks)
这个写着最大32,但是无妨,可以更大,需要注意的是,这里输入的size必须是十进制数。(以前做的题往往喜欢输入成0x20,0x30等等)(看了看以前做的题,都是用atoi转了,所以可以那么输入。author name 输入为32,也就是这里的a2=32,经历了32次++a1后,a1[32]=0,而这是第33位。不知道为什么泄露出来的book_2_name的地址(也就是那个0x7f的)与libc_base的基地址偏移每次不同。泄露出book1的0x30大小的指挥块位置(这里指向的是id)原创 2024-03-12 17:21:22 · 893 阅读 · 0 评论 -
2016 ZCTF note2--unlink
其中 i 是 unsigned 类型,lenth 为 int 类型,所以两者在 for 循环相比较的时候,lenth -1 的结果会被视为 unsigned 类型。unlink需要伪造堆块,保证fd->bk == p == bk->fd,同时,要保证下一个块的prev_size与伪造的堆块大小相符。长知识:chunk0伪造的块,中间有chunk1,释放chunk2,也可以与chunk0去合并。从管理的index_of_chunk来看,1被free掉后重新创建占据了3的位置。主要是为了复健,就不多描述了。原创 2024-02-29 22:42:00 · 397 阅读 · 1 评论 -
一道基础的uaf的两种食用方法double free
然后把它填上,free一个fastbin大小的块,修改fd指针为打hook的地址,创建两个块,第二个块就覆盖到打hook的地址那里了。以前看double free,总以为很难很难的样子,实际上动手调一调看看,也就是基本的uaf罢了。长度自定,可以堆溢出,但是这两种做法没有用到,以后考虑用它试着unlink啥的。先创建0x80的块,free掉,从unsorted bin 里打印泄露出libc。甚至不用改名字,出题人都给把名字叫好了(爱了爱了),这样子调试的时候很舒服。连接情况2->3->2。原创 2024-02-28 11:47:33 · 477 阅读 · 1 评论 -
buuctf-ciscn_2019_s_3(ret2csu)
为了直接利用到0x40058d的call [r12+rbx*8],所以把rbx置为0,[r12]会是我们要call调用的地方,也就是r12寄存器保存的地址指向的位置。(但是真的好晕好绕,本来搜着想看看别人的用这种做的简单方法,结果没有搜到有用这种做的,就分享一下。call执行之后,可以发现原本的下一步被压入栈中,需要把它pop掉才能正常执行我们想要的操作,这也是这里写入pop_rdi的原因。发现打csu的没有直接去利用call[r12+rbx*8],都是通过更改判定,二次执行后半段,再ret到需要的地址。原创 2024-02-26 18:01:16 · 349 阅读 · 0 评论 -
栈上orw关于使用libc以及mprotect+shellcode的用法
有什么疑问的可以直接提出。原创 2024-01-11 12:01:10 · 412 阅读 · 0 评论 -
GuestBooK--pwn
然后需要利用strcpy输入两次,第一次把最后一位不对的canary以及后门函数地址输入进去,第二次把canary最后一位改为‘00’先利用read与puts,填充掉canary的最后一位,把canary打印出来,用这种不一样的字符方便接收和检验。当时没做出来,忘记了这种基础的泄露canary的方式了。原创 2023-11-02 19:04:19 · 68 阅读 · 1 评论 -
NewStatCTF--week3-pwn srop
至于为什么要给rsp设置一个可读的地址,看下图,需要将地址为rsp+8位置存的数据赋给r9,如果不可读的话,就会访问错误。然后输入就相当于在bss里输入了,但为什么不用额外找leave ret呢。也就刚好是pop_rdi,然后进行srop打execve。存在syscall函数,没有适当的可以改rdx的。–因为main函数最后又有一次leave ret。主函数只有一个输出,一个输入,存在栈溢出。所以用srop(而且题目就叫srop)先改了rbp,然后跳转到主函数的这里。跳转回到了bss_addr+8的位置。原创 2023-10-31 23:19:10 · 59 阅读 · 3 评论 -
New-Star-Week 3-pwn stack migration revenge
这里稍微解释一下吧:bss+0x100是上一次打入rbp的地址,输入地址是rbp-0x50,由于我在脚本中叫“main”的函数的最后有个leave ,所以会跳转到bss+0x100,这里刚好被写入了我输入的倒数第二个数据,使得rbp这里还有一个伪装的rbp,leave完毕后rbp变成我写的这个bss_addr+0x100-0x50,然后ret到leave_ret,将rsp挪到假rbp位置,然后pop rbp,由于rbp我不用再管了,干脆给了个0,然后继续往下执行system。直接跳转到这里,不要让你。原创 2023-10-31 17:01:55 · 66 阅读 · 1 评论 -
NEWSTAR 的栈迁移
最后看了官方WP,发现栈迁移一次就行了,libc是可以被带出来的。(不过也就当复健了一下两次的栈迁移。总之,就是栈迁移啊栈迁移,还得迁移两次,还得用ret2libc。只开了NX,题目里给了栈的地址。原创 2023-10-25 21:22:01 · 57 阅读 · 1 评论 -
secert number--NEWCTF
伪随机数时间戳以及格式化字符串。原创 2023-10-25 21:03:51 · 134 阅读 · 1 评论 -
buuctf -picoctf_2018_rop chain
很明显,已经将flag打开并输入到了s里,而想要输出就需要让win1==1、win2==1,以及a1=0xdeadbaad。显然a1是可以由我们自行传入的参数(即a1可控)如此来看,逻辑就很清晰了,从vuln栈溢出跳转到win1,返回到vuln,跳转到win2并携带参数a1,返回到vuln,跳转到flag函数并携带参数a1(这个与上一个不同)win2这里也有一些要求,即要求win1==1、a1=0xbaaaaaad,这样可以使得win2置1.看flag函数的逻辑顺序。简单明了,win1=1。原创 2023-09-16 21:32:14 · 106 阅读 · 1 评论 -
2023羊城杯--pwn-heap复现
可以看到,配合new(0x62)或(0x68)以后,delete(这里仅仅是为了达成能够往下修改的效果),然后连续创建两个(0x58),可以覆盖0x60,然后刚好达到第二堆块的index_chunk区域,从而修改指针。另外:这里被free掉的堆块也不会被再次使用,能够正确覆写的原因就是这个堆管理的表(也就是用了第一个堆来存储用到的堆的数据域的地址)可能发现用它的过程:从strtok的调用中,si进入发现got表跳转的第一个函数是它,然后用libc找到相应的位置,进行更改。原创 2023-09-26 11:38:09 · 258 阅读 · 3 评论 -
orw--libc
栈上的orw,十分易学,适合刚刚接触orw的小伙伴·原创 2023-07-08 14:00:55 · 256 阅读 · 1 评论