自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 pwn--realloc [CISCN 2019东南]PWN5

其中,ptr是指向之前分配的内存块的指针,size是要分配的新内存块的大小(以字节为单位)。当需要增加内存空间时,realloc会分配一个新的更大的内存块,然后将原内存块的内容复制到新块中,并释放原内存块;当需要减少内存空间时,realloc会尝试将内存块的大小减少到新的大小,并返回调整后的内存块地址。但通过gdb调试发现,堆块大小为0x20,也就是说malloc(0),malloc(8)和malloc(0x10)效果其实是一样的,由于fd指针和bk指针,一个chunk的大小至少是0x20。

2024-04-25 13:23:49 247

原创 [巅峰极客 2022]smallcontainer

第二点,当你释放被覆盖的chunk是,它会去向后检查能否合并,后面一个chunk的地址是当前chunk的地址加上size,但是你的size域减少了0x10,程序就找不到下一个chunk的pre_size和size域,所以要edit一下,布置一下下一个chunk的头部。很明显off-by-null漏洞,可以将前一个chunk分配为0xf8,然后将0xf8都填满,后一个chunk若size域为0x211,由于小端序,最低位为'\x11',就是17,会被覆盖成'\x00'。这题我认为是比较有思考意义的。

2024-04-24 20:20:43 230

原创 largebin结构探究&&堆分配机制

在许多文章上看到若在fastbin和smallbin中找不到相应大小的堆块,会将fastbin进行合并。但经过我的测试,fastbin貌似并不会合并,根据做题经验fastbin也不会合并,不然这么uaf。所以我认为堆的分配顺序应该是:1.在fastbin和smallbin中寻找有没有大小正好的,若有则直接分配,若没有,进入2.2.在unsortedbin中寻找,从尾部开始,遍历过的堆块放入smallbin和largebin中,0x400为分界,直到找到大小正好的,分配,若没找到,进入3.

2024-04-22 14:30:24 433

原创 以[GKCTF 2020]domo为例来看off-by-null

首先,由于是off-by-null,所以你被off的chunk的大小必须是0x100,0x200这样,因为一字节会直接覆盖十六进制的低2位,你如果是0x80,会直接变成0x00,会出现错误。这是还要注意一点,合并之前一定要先释放掉要合并的最底下的chunk,让它的fd和bk域有相应的地址,因为合并的时候会进行unlink,如果bk和fd区域是乱七八糟的东西肯定会报错。这是off-by-null之后,变成了0x100,当这个chunk被free的时候就会认为前面有个0x130的空闲chunk,会进行合并。

2024-04-18 19:19:42 650 1

原创 [羊城杯 2023 决赛]arrary_index_bank

有用的函数就是查询和更改,且index

2024-04-15 13:22:46 457 1

原创 pwn 周记

一般套路就是uaf,释放unsortedbin后,show(),获取libc的基址。然后获取free_hook或malloc_hook的地址,通过tcachebin或fastbin的伪造堆块,实现地址任意写。存在明显堆溢出漏洞时,可以通过unlink实现地址任意写。注意观察堆块的结构,多用gdb调试,查看unsortedbin与malloc_hook的距离,一般是0x60左右,在malloc_hook周围找到 0x7f的字段作为fake fastbin的size域。

2024-04-14 13:02:53 265 1

原创 pwn --堆

libc 2.26开始引入tcache,不过对tcache的doublefree与伪造没有任何限制,可以很轻松拿到信息。libc 2.29开始引入 tcache的doublefree检测,检查 bin->bk 指针是否是tcache_struct,可以通过堆溢出或uaf绕过。ubuntu16默认用的是libc 2.23,没有tcachebin;ubuntu18是2.27,有tcachebin,但没有任何检测,更加轻松;ubuntu20用的是2.31。

2024-04-12 13:18:26 364

原创 [GKCTF 2021]Checkin

首先肯定要泄露基址,但是s1第一个0x8是'admin\x00\x00\x00',所以可用的实际只有0x18。第二次读入输入'admin\x00\x00\x00'*3+one_gadget+(buf)就可以了。s1和buf都以‘admin\x00'开头就可以了,buf最多只能覆盖rbp,此函数执行完之后就是。此题我本来使用的是之前一题的libc.so.6,一直打不通,后来用了题目提供的才成功。这个0x4018B5就刚刚好,能直接执行puts,再重新执行一遍读入的函数。s1能写一些exp,一眼迁移到s1。

2024-04-11 11:26:50 878

原创 蓝桥杯训练--旅行家的预算

思路:在一个站点往后找可以触及的站点中油价最便宜的。如果最便宜的比现在的站点便宜,那就买正好能到那个站点的油。如果比现在的站点贵,那就把油买满,然后去那个站点。这是题目描述,标签是贪心。

2024-04-08 19:05:22 238 1

原创 pwn--攻防世界 pwn1

canary一般是以'\x00'结尾,但是由于小端序存储,我们会先遇到'\x00',这里使用sendline自动添加的'\n'掩盖'\x00'。思路形成:先读出canary,再读出main函数的返回地址,计算出libc的基址,因为只能填入一个地址,所以就想到one_gadget。观察保护和源码,有canary保护,并且只能溢出8字节,也就是一个地址。我使用的是python3,可能由于python版本问题,我运行的时候要将。然后是读取main函数的返回地址,与这个类似,就不赘述。一个非常便捷的工具。

2024-04-04 21:12:24 404 1

原创 pwn 攻防世界 stack2

当时我检查了脚本很久,确认无误,gdb调试也确实修改了返回地址,但检查汇编代码发现,最后有 lea 指令改变了esp的值。查看源码,发现对修改数组没有做限制,很自然想到一个字节一个字节修改返回地址。要修改system的参数,幸好题目不算太坏,可以找到'sh\x00'字符串。2.做不出题目的时候,可以多看看汇编指令,可能有发现。在这道题耗了很多时间,有很多陷阱,记录一下。这是esp最后的地址,相差了0x10。即使你修改了,也会像这样打不通。这是一开始记录的ebp的地址。所以修改脚本,并且打通本地。

2024-04-04 02:31:43 427 1

原创 XYCTF --PWN

这是学pwn以来遇到的第一个题目较多的线上比赛,记录一下pwn各题wp。

2024-04-02 16:42:49 698 5

原创 pwn刷题周记

read函数并不会自动在字符串末尾添加'\x00',而puts和printf函数只有遇到'\x00'才会停止打印。你可以输入足够长的字符串来泄露canary或一些关键信息。如果遇到这样的报错,不是因为你libc的库不全,而是你的payload有问题,可以print(io.recv())看看。当没有思路的时候,可以关注汇编代码,可能把一些关键地址存入了寄存器中。未完待续........

2024-03-28 16:25:19 319 1

原创 pwn:堆方面的领悟

在64位的情况下,若malloc类似于0x18,0x28的区域,多出的0x8为下一个chunk的presize区域,在进行堆溢出的时候,要注意这一点,测算好溢出的字节。

2024-03-25 15:23:27 294 2

原创 CTF ---web题思路总结

面对一道web题时,先注意题目名字或者提示。如'eazy_sql'则大概率为sql注入题目。若含有'flask''tornado'等词,可以考虑去搜索这些服务器的历史漏洞。

2024-03-08 16:56:47 1076 1

原创 [NISACTF 2022]popchains

2.构造pop链,_invoke()函数是当此类被作为函数错误使用时触发,所以去寻找将对象作为函数使用的位置,注意到Make_a_change的_get()方法将自身的effort属性作为函数使用,_get()方法是在调用自身不存在的属性时出发。但同时,直接将对象作为字符串拼接,或将其作为一些字符串函数的参数也会触发,观察到Road_is_long类中_wakeup方法将自身page作为preg_match函数的参数,若page为对象,则会触发tostring方法。自此,pop链构造完成。

2024-02-18 11:05:21 604 3

原创 蓝桥杯 蜗牛

所以,从第i-1根杆到第i根杆,需要考虑前一次所用的方式,以及这一次所用的方式。不妨设置三维数组 dp[i][j][k],代表到第i根杆所需的最短时间,j为1,则上一次选择穿越,k为1,则这一次选择穿越。若从最低点走,则需考虑前一次的方式,若前一次也是最低点走,则可以直接走,若前一次选择穿越,则先要从杆子上爬下来。题中可知,从一根竹竿到另一根,可以从最低点走过去,或穿越过去。此为该题题干,提及数组,最少,则考虑使用动态规划。选择穿越也如此考虑。

2024-02-02 22:10:00 512

原创 python 选择客栈 思考与改进

为了算出减少的数量,需要算出在连续中断数,即在连续多少家同色调客栈之间没有可用餐的客栈。若连续5家客栈之间,则减少5*4/2=10家。我设置了near变量,记录最近的可用餐客栈的下标,设置dp二维数组。我首先的想法是先算出所有的可能数,例如如果有10家同色调客栈,那么所有可能数就10*9/2=45种可能。如上代码,当上一个同色调客栈比near记录的下边近时,说明之间中断,中断数加一。这是我在备赛蓝桥杯是在官网上看到的题目,标签是动态规划。以上是全部python代码,若有不理解,可私信我。

2024-01-31 01:49:31 390

原创 ctfshow repaireman 解题流程与思考

我选择把cmd参数设置为这个,将一句话木马写入1.php文件,注意,后缀不能是txt。最后发包,然后用蚁剑连接即可,在config.php中找到flag。通过阅读,发现,就是让request中的cookie的secret的值等于md5('admin'.$config['secret']).要注意的是exec()好像只能执行linux命令行代码,不能直接执行php代码,我在这研究了好久为什么我的php代码没被执行。我对php不太了解,选择用文心一言分析了源代码,大致了解了意思。这是代码的核心板块。

2024-01-24 16:55:59 468

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除