终于来到了传说中的堆,这是攻防世界里面的堆第一次,刚遇到的时候有点懵逼,看了wp也看不懂,后来才知道是堆题。。。
嗯,我回来了,哈哈哈哈,首先详细了分析了一波题目,先把重要的函数例举出来
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DTDhbGV4-1637663558086)(heap_1(攻防世界time_formatter).assets/image-20211123173241460.png)]](https://img-blog.csdnimg.cn/b7926b60561c461a947d49b54ab2f477.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rmW5Y2X6buE5pmv55Gc,size_20,color_FFFFFF,t_70,g_se,x_16)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h6UsMhjE-1637663558088)(heap_1(攻防世界time_formatter).assets/image-20211123173518277.png)]](https://img-blog.csdnimg.cn/7cfff94840074ebc9bfcf28c574c9d09.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rmW5Y2X6buE5pmv55Gc,size_20,color_FFFFFF,t_70,g_se,x_16)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLk8ujyb-1637663558089)(heap_1(攻防世界time_formatter).assets/image-20211123173504967.png)]](https://img-blog.csdnimg.cn/ba3bb32ddc364743bb7c5d1b375883ac.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rmW5Y2X6buE5pmv55Gc,size_20,color_FFFFFF,t_70,g_se,x_16)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bLXtRYUX-1637663558091)(heap_1(攻防世界time_formatter).assets/image-20211123173538184.png)]](https://img-blog.csdnimg.cn/668de5ca5378464783d6506b22456063.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rmW5Y2X6buE5pmv55Gc,size_20,color_FFFFFF,t_70,g_se,x_16)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jwjIoNLE-1637663558093)(heap_1(攻防世界time_formatter).assets/image-20211123173628629.png)]](https://img-blog.csdnimg.cn/60d2b7da5a154c5baa8ced9be938bf12.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rmW5Y2X6buE5pmv55Gc,size_20,color_FFFFFF,t_70,g_se,x_16)
纵观全局在我菜鸟看来就只有个system(“asdadasd;/bin/sh;as21sad12e”);这个漏洞,因为system的参数由我们控制,所以就有无限可能,这里有两个全局变量,第一个被格式化为整型了,另一个是字符串类型,那么就是构造";/bin/sh;"的最好容器,嗯,如图:可以看到ida列出来对ptr的操作只有3个
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YqbisJXG-1637663558094)(heap_1(攻防世界time_formatter).assets/image-20211123174049015.png)]](https://img-blog.csdnimg.cn/d2ba88078bbe4c90937d753022c4f4a1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rmW5Y2X6buE5pmv55Gc,size_20,color_FFFFFF,t_70,g_se,x_16)
分别是一个malloc后的赋值、free释放和现在的system参数,但是呢通过malloc赋值那里有格式字符的限制输入不了";",然后再看程序总共可供我们输入的有分别是1、2、3这3个接收分别对应3个全局变量,前面说了dword_602120会直接变为整型用不了,那么就只有对value赋值这个函数有操作空间了。
通过学习malloc函数定义知识知道,malloc开辟内存后需要free释放并且对返回的指针置空,如果不释放会造成内存泄漏,指针不置空则会造成内存空间复用(glibc内存重新分配),因为这里没有在释放内存对指针进行初始化处理,就可以利用堆重新分配规则使我们输入的值指向上一个free chunk的地址
嗯,看demo
首先输入1开辟一块内存进行赋值操作然后输入AAAAAAAA,就可看到通过malloc(函数中strdup就是(strcpy + malloc)的结合)我们的chunk再看看它的数据
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-txGVSPIN-1637663558096)(heap_1(攻防世界time_formatter).assets/image-20211123180513995.png)]](https://img-blog.csdnimg.cn/fef1a6c202da49c2b2ecece674b38c8e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rmW5Y2X6buE5pmv55Gc,size_20,color_FFFFFF,t_70,g_se,x_16)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Keys8xgn-1637663558097)(heap_1(攻防世界time_formatter).assets/image-20211123180914398.png)]](https://img-blog.csdnimg.cn/8ec5714ac20c466a9ab2028a5cb80ad0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rmW5Y2X6buE5pmv55Gc,size_20,color_FFFFFF,t_70,g_se,x_16)
然后再看看全局变量ptr的值

![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H3DitIn1-1637663558099)(heap_1(攻防世界time_formatter).assets/image-20211123181015972.png)]](https://img-blog.csdnimg.cn/70d8544ae3ea4ad39bcfa2e691499b69.png)
然后再对它进行释放,这样我们再申请同样大小的内存就会让这块chunk进行重新分配了
这里再选5、输入n保证程序不退出进行free chunk,此时的chunk数据为:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1dldJuQ1-1637663558102)(heap_1(攻防世界time_formatter).assets/image-20211123181539595.png)]](https://img-blog.csdnimg.cn/1dd504d01b3742ec8d685fd1e1d19209.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rmW5Y2X6buE5pmv55Gc,size_20,color_FFFFFF,t_70,g_se,x_16)
那么这时再通过malloc申请一样大小的内存、我们选择3、再输入我们的’;/bin/sh’再看看heap信息是否如期所致如图:可以看到之前free 的chunk已经被重新复用了,并且地址还是指向之前的位置,上面parseheap的status显示freed有点问题,时不时会这样显示不对,但看内存数据就可以了,因为没有fd和bk所以它是使用中的chunk
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bflcs215-1637663558103)(heap_1(攻防世界time_formatter).assets/image-20211123181827620.png)]](https://img-blog.csdnimg.cn/d406fab044a94426ab22856d0083f36c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5rmW5Y2X6buE5pmv55Gc,size_20,color_FFFFFF,t_70,g_se,x_16)
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BZsjcAJO-1637663558105)(heap_1(攻防世界time_formatter).assets/image-20211123182021768.png)]](https://img-blog.csdnimg.cn/5cf24ef07cca42fc94a09672b14cf0d4.png)
最后的exp:
sla = lambda delim, data: p.sendlineafter(delim, data)
sla('> ','1')
sla('Format: ','%s')
sla('> ','5')
sla('?','n')
sla('> ','3')
sla('Time zone: ',"\';/bin/sh\'")
sla('> ','4')
p.interactive()