**4.2** 另一种 Fastbin attack 的手法就是`the Malloc Maleficarum`系列中的 The house of spirit。差不多就是以一种逆向思维去思考:我们不是想着从 fastbin 中拿到想要的 chunk,而是在外面我们能够控制的一段内存 chunk 中,修改它的数据,伪造出一个符合、或者足以绕过 fastbin 检测的 fake chunk,把它塞进 fastbin 中。
那么我们要修改的要素是什么(我们要 bypass 什么)?网上的资料有列出来,但是没有总结原因。但我是不喜欢背公式的,基本是因为 __free 这个函数的限制,可以看看它对应的源代码。这里记录一些自己的理解:
1. IS_MMAP bit must not be set: 这个很好理解,一块 chunk 上面的 AMP 三个bit位标示着它的状态,当然在 M 位上不能为“1”。哪怕篡改的 size 足够小符合 fastbin,但是如果 M=1 那这块 chunk 也不会被塞到 fastbin,而是通过 sbrk 被保留成 small chunk 了。
2. The fake chunk must be aligned properly: 这个也没啥好说的,每块 chunk 在64位系统里都要16字节对齐(32位8字节),通过 MALLOC_ALIGN_MASK 的检测。
3. The fake chunk's size must be within the fastbin range: 这不废话吗,太大了还怎么塞进 fastbin (当然也可以想想办法万一绕过了这个限制会发生什么有意思的事情)。
4. The fake chunk's next chunk size must not be too small or too large: 这个是需要注意的。next chunk 的大小不能小于 2 * SIZE_SZ,同时也不能大于 av->system_mem。因为在分配或者释放我们这个 fake chunk 的时候,堆管理器都会检查一下相邻的这块 chunk 是否正常——检查它的大小。而 2 * SIZE_SZ 到 av->system_mem 这个范围是 non-mmaped chunk 的大小范围。
5. The fake chunk's fastbin must not cause a double-free situation: 我们构造的这块 fake chunk 对应的 fastbin 链表头部不能是该 fake chunk,其实就是在构造的时候检查下不要和当前 fastbin 中 head 上面这块 free chunk 指向的地址一样。一旦 double free 就直接抛异常。
具体如何构造一块 fake chunk,在 how2heap 上面有详细的 C 代码,这里就不复制过来了,用一张自己画的图来概括这个流程(图1)。
在图1中,我认为值得注意的有两点:
1. fake_chunk[1] = 0x40,这里开始会想为什么是 0x40 不是 0x41,如果不指示前面的 chunk in use 的话,会不会触发 unlink?查了一下证明我想多了,“fastbin mechanism doesn't care about the in-use bit of the chunk being freed; it only uses the size to decide which fastbin to put the chunk into”。所以这里无论最后的bit位无论是 0 或者 1 都无所谓。
2. fake_chunks[9] = 0x1234,这里指示 fake chunk 临近下一块 chunk 的大小,4在二进制中是100,这里最后一个bit位是0,岂不是不符合 fastbin 的设置?因为如果 fake chunk 被释放到 fastbin,这个位置应该是 1 才对。事实证明也是我想多了,主要在于这只是代码中一个数组 fake_chunk[10] ,并不是真正的 chunk,我们只需要设置给这个值一个合理的大小,通过校验就可以,不用考虑最后bit位的问题。
那么我们要修改的要素是什么(我们要 bypass 什么)?网上的资料有列出来,但是没有总结原因。但我是不喜欢背公式的,基本是因为 __free 这个函数的限制,可以看看它对应的源代码。这里记录一些自己的理解:
1. IS_MMAP bit must not be set: 这个很好理解,一块 chunk 上面的 AMP 三个bit位标示着它的状态,当然在 M 位上不能为“1”。哪怕篡改的 size 足够小符合 fastbin,但是如果 M=1 那这块 chunk 也不会被塞到 fastbin,而是通过 sbrk 被保留成 small chunk 了。
2. The fake chunk must be aligned properly: 这个也没啥好说的,每块 chunk 在64位系统里都要16字节对齐(32位8字节),通过 MALLOC_ALIGN_MASK 的检测。
3. The fake chunk's size must be within the fastbin range: 这不废话吗,太大了还怎么塞进 fastbin (当然也可以想想办法万一绕过了这个限制会发生什么有意思的事情)。
4. The fake chunk's next chunk size must not be too small or too large: 这个是需要注意的。next chunk 的大小不能小于 2 * SIZE_SZ,同时也不能大于 av->system_mem。因为在分配或者释放我们这个 fake chunk 的时候,堆管理器都会检查一下相邻的这块 chunk 是否正常——检查它的大小。而 2 * SIZE_SZ 到 av->system_mem 这个范围是 non-mmaped chunk 的大小范围。
5. The fake chunk's fastbin must not cause a double-free situation: 我们构造的这块 fake chunk 对应的 fastbin 链表头部不能是该 fake chunk,其实就是在构造的时候检查下不要和当前 fastbin 中 head 上面这块 free chunk 指向的地址一样。一旦 double free 就直接抛异常。
具体如何构造一块 fake chunk,在 how2heap 上面有详细的 C 代码,这里就不复制过来了,用一张自己画的图来概括这个流程(图1)。
在图1中,我认为值得注意的有两点:
1. fake_chunk[1] = 0x40,这里开始会想为什么是 0x40 不是 0x41,如果不指示前面的 chunk in use 的话,会不会触发 unlink?查了一下证明我想多了,“fastbin mechanism doesn't care about the in-use bit of the chunk being freed; it only uses the size to decide which fastbin to put the chunk into”。所以这里无论最后的bit位无论是 0 或者 1 都无所谓。
2. fake_chunks[9] = 0x1234,这里指示 fake chunk 临近下一块 chunk 的大小,4在二进制中是100,这里最后一个bit位是0,岂不是不符合 fastbin 的设置?因为如果 fake chunk 被释放到 fastbin,这个位置应该是 1 才对。事实证明也是我想多了,主要在于这只是代码中一个数组 fake_chunk[10] ,并不是真正的 chunk,我们只需要设置给这个值一个合理的大小,通过校验就可以,不用考虑最后bit位的问题。
《岑笙季烛》-岑笙季烛(最新章节无弹窗完本)全文阅读岑笙主角[月亮][鄙视]PQ^)=mEm
‼阅读岑笙季烛全文请到蚣/众/呺【岁月书摘】发送一个6648即可!
书名:《岑笙季烛》
主角:岑笙,季烛
以下非文章原文:“岑笙,你现在真有钱的话,不如先去医院挂个脑科或者精神科好吗?”我扭头就走,懒得和她废话。 “纪辛瑜,你直到现在依然不把我放在眼里是吧?”岑笙有些恼怒地拦住了我。 我视若无睹,拨开她便继续往前走。 岑笙拽我的手,我拎着的礼盒被她扯落在地上,发出一声闷响。 岑笙还想上前抓我的手,我抬手挡了一下,她竟然直接跌坐在地上,仿佛我用了极大的力气一样。 陶叶急忙去扶岑笙,然后指责我,“纪辛瑜你有病吧?你推她干什么!” 我蹲下身子把礼盒捡起来,起身时却看到季烛正站在不远处看着我。 “抱歉,我不是故意的。” 当我们的动静引来了别人的关注,岑笙一改刚才的气急败坏,反而是开口道歉。 我起身,不免有些好笑,“岑笙,你不知道这种地方四处都有监控吗?装什么无辜呢? 一听到监控,岑笙不自然地看了一眼四周,最后视线落在了季烛身上。 季烛却只是看着我,我略有心虚。 昨天的事我都还没太敢仔细去想,本来打算这段时间疏远一点,大家都清醒一下。 没想到今天又在这里碰上了,真是有毒,干脆就假装没看到? 我心一横,拎着礼盒转身便走,准备去找何远之,把贺礼带到以后就离开这里,毕竟同时遇到了岑笙和季烛,证明此地不宜久留。 “纪辛瑜!”季烛的声音不算高,却清晰地传入我的耳中,他三两步跟上了我的步伐,与我并肩。子而後厌然,掩其不善,而著其善。人之视己,如见其肺肝然,则何益矣?此谓诚於中,形於外。故君子必慎其独也。曾子曰:“十目所视,十手所指,其严乎!”富润屋,德润身,心广体胖,故君子必诚其意。诗云:“瞻彼淇澳(音郁),菉(绿)竹猗猗。有斐君子,如切如磋,如琢如磨。瑟兮僩兮!赫兮喧兮!有斐君子,终不可諠兮。”如切如磋者,道学也。如琢如磨者,自修也。瑟兮僩兮者,恂慄也。赫兮喧兮者,威仪也。有斐君子,终不可諠兮者,道盛德至善,民之不能忘也。诗云:“於戏(呜呼)!前王不忘。”君子贤其贤而亲其亲,小人乐其乐而利其利,此以没世不忘也。
‼阅读岑笙季烛全文请到蚣/众/呺【岁月书摘】发送一个6648即可!
书名:《岑笙季烛》
主角:岑笙,季烛
以下非文章原文:“岑笙,你现在真有钱的话,不如先去医院挂个脑科或者精神科好吗?”我扭头就走,懒得和她废话。 “纪辛瑜,你直到现在依然不把我放在眼里是吧?”岑笙有些恼怒地拦住了我。 我视若无睹,拨开她便继续往前走。 岑笙拽我的手,我拎着的礼盒被她扯落在地上,发出一声闷响。 岑笙还想上前抓我的手,我抬手挡了一下,她竟然直接跌坐在地上,仿佛我用了极大的力气一样。 陶叶急忙去扶岑笙,然后指责我,“纪辛瑜你有病吧?你推她干什么!” 我蹲下身子把礼盒捡起来,起身时却看到季烛正站在不远处看着我。 “抱歉,我不是故意的。” 当我们的动静引来了别人的关注,岑笙一改刚才的气急败坏,反而是开口道歉。 我起身,不免有些好笑,“岑笙,你不知道这种地方四处都有监控吗?装什么无辜呢? 一听到监控,岑笙不自然地看了一眼四周,最后视线落在了季烛身上。 季烛却只是看着我,我略有心虚。 昨天的事我都还没太敢仔细去想,本来打算这段时间疏远一点,大家都清醒一下。 没想到今天又在这里碰上了,真是有毒,干脆就假装没看到? 我心一横,拎着礼盒转身便走,准备去找何远之,把贺礼带到以后就离开这里,毕竟同时遇到了岑笙和季烛,证明此地不宜久留。 “纪辛瑜!”季烛的声音不算高,却清晰地传入我的耳中,他三两步跟上了我的步伐,与我并肩。子而後厌然,掩其不善,而著其善。人之视己,如见其肺肝然,则何益矣?此谓诚於中,形於外。故君子必慎其独也。曾子曰:“十目所视,十手所指,其严乎!”富润屋,德润身,心广体胖,故君子必诚其意。诗云:“瞻彼淇澳(音郁),菉(绿)竹猗猗。有斐君子,如切如磋,如琢如磨。瑟兮僩兮!赫兮喧兮!有斐君子,终不可諠兮。”如切如磋者,道学也。如琢如磨者,自修也。瑟兮僩兮者,恂慄也。赫兮喧兮者,威仪也。有斐君子,终不可諠兮者,道盛德至善,民之不能忘也。诗云:“於戏(呜呼)!前王不忘。”君子贤其贤而亲其亲,小人乐其乐而利其利,此以没世不忘也。
《宁雪滢卫湛》(宁雪滢卫湛)(最新章节无弹窗)小说全文阅读笔趣阁h]q?MeM
‼书名:《宁雪滢卫湛》
‼主角:宁雪滢卫湛
-----↓↓↓公仲呺【子心读屋】↓↓↓-----
非小说原文:“温澜,你现在真有钱的话,不如先去医院挂个脑科或者精神科好吗?”我扭头就走,懒得和她废话。 “纪辛瑜,你直到现在依然不把我放在眼里是吧?”温澜有些恼怒地拦住了我。 我视若无睹,拨开她便继续往前走。 温澜拽我的手,我拎着的礼盒被她扯落在地上,发出一声闷响。 温澜还想上前抓我的手,我抬手挡了一下,她竟然直接跌坐在地上,仿佛我用了极大的力气一样。 陶叶急忙去扶温澜,然后指责我,“纪辛瑜你有病吧?你推她干什么!” 我蹲下身子把礼盒捡起来,起身时却看到于一凡正站在不远处看着我。 “抱歉,我不是故意的。” 当我们的动静引来了别人的关注,温澜一改刚才的气急败坏,反而是开口道歉。 岑妤陆深
自黄帝至舜、禹,皆同姓而异其国号,以章明德。故黄帝为有熊,帝颛顼为高阳,帝喾为高辛,帝尧为陶唐,帝舜为有虞。帝禹为夏后而别氏,姓姒氏。契为商,姓子氏。弃为周,姓姬氏。代神农氏,是为黄帝。天下有不顺者,黄帝从而征之,平者去之,披山通道,未尝宁居。此二十二人咸成厥功:皋陶为大理,平,民各伏得其实;伯夷主礼,上下咸让;垂主工师,百工致功;益主虞,山泽辟;弃主稷,百谷时茂;契主司徒,百姓亲和;龙主宾客于涿鹿之阿。迁徙往来无常处,以师兵为营卫。官名皆以云命,为云师。置左右大监,监于万国。万国南浮江淮矣,至长老皆各往往称黄帝、尧、舜之处,风教固殊焉,总之不离古文者近是。予观春秋、国语,其发明五帝德、帝系姓章矣,顾弟弗深考,于涿鹿之阿。迁徙往来无常处,以师兵为营卫。官名皆以云命,为云师。置左右大监,监于万国。万国尧曰:“谁可顺此事?”放齐曰:“嗣子丹朱开明。”尧曰:“吁!顽凶,不用。”尧又曰:“谁可者?”讙兜曰:“共工旁聚布功,可用。”而禹、皋陶、契、后稷、伯夷、夔、龙、倕、益、彭祖自尧时而皆举用,未有分职。于是舜乃至于文祖,谋于四岳,辟四门,明通四方耳目,命十二牧论帝德,行厚德,帝尧者,放勋。其仁如天,其知如神。就之如日,望之如云。富而不骄,贵而不舒。黄收纯衣,彤车乘白马。能明驯德,以亲九族。九族既睦,便章百姓。百姓昭明,合和万国。帝喾高辛者,黄帝之曾孙也。高辛父曰蟜极,蟜极父曰玄嚣,玄嚣父曰黄帝。自玄嚣与蟜极皆不得在位,至高辛即帝位。高辛于颛顼为族子。
‼书名:《宁雪滢卫湛》
‼主角:宁雪滢卫湛
-----↓↓↓公仲呺【子心读屋】↓↓↓-----
非小说原文:“温澜,你现在真有钱的话,不如先去医院挂个脑科或者精神科好吗?”我扭头就走,懒得和她废话。 “纪辛瑜,你直到现在依然不把我放在眼里是吧?”温澜有些恼怒地拦住了我。 我视若无睹,拨开她便继续往前走。 温澜拽我的手,我拎着的礼盒被她扯落在地上,发出一声闷响。 温澜还想上前抓我的手,我抬手挡了一下,她竟然直接跌坐在地上,仿佛我用了极大的力气一样。 陶叶急忙去扶温澜,然后指责我,“纪辛瑜你有病吧?你推她干什么!” 我蹲下身子把礼盒捡起来,起身时却看到于一凡正站在不远处看着我。 “抱歉,我不是故意的。” 当我们的动静引来了别人的关注,温澜一改刚才的气急败坏,反而是开口道歉。 岑妤陆深
自黄帝至舜、禹,皆同姓而异其国号,以章明德。故黄帝为有熊,帝颛顼为高阳,帝喾为高辛,帝尧为陶唐,帝舜为有虞。帝禹为夏后而别氏,姓姒氏。契为商,姓子氏。弃为周,姓姬氏。代神农氏,是为黄帝。天下有不顺者,黄帝从而征之,平者去之,披山通道,未尝宁居。此二十二人咸成厥功:皋陶为大理,平,民各伏得其实;伯夷主礼,上下咸让;垂主工师,百工致功;益主虞,山泽辟;弃主稷,百谷时茂;契主司徒,百姓亲和;龙主宾客于涿鹿之阿。迁徙往来无常处,以师兵为营卫。官名皆以云命,为云师。置左右大监,监于万国。万国南浮江淮矣,至长老皆各往往称黄帝、尧、舜之处,风教固殊焉,总之不离古文者近是。予观春秋、国语,其发明五帝德、帝系姓章矣,顾弟弗深考,于涿鹿之阿。迁徙往来无常处,以师兵为营卫。官名皆以云命,为云师。置左右大监,监于万国。万国尧曰:“谁可顺此事?”放齐曰:“嗣子丹朱开明。”尧曰:“吁!顽凶,不用。”尧又曰:“谁可者?”讙兜曰:“共工旁聚布功,可用。”而禹、皋陶、契、后稷、伯夷、夔、龙、倕、益、彭祖自尧时而皆举用,未有分职。于是舜乃至于文祖,谋于四岳,辟四门,明通四方耳目,命十二牧论帝德,行厚德,帝尧者,放勋。其仁如天,其知如神。就之如日,望之如云。富而不骄,贵而不舒。黄收纯衣,彤车乘白马。能明驯德,以亲九族。九族既睦,便章百姓。百姓昭明,合和万国。帝喾高辛者,黄帝之曾孙也。高辛父曰蟜极,蟜极父曰玄嚣,玄嚣父曰黄帝。自玄嚣与蟜极皆不得在位,至高辛即帝位。高辛于颛顼为族子。
✋热门推荐