20. 20
Top Chunk?
Chunk Size
( 1000 )
User Data
(Top Chunk)
Chunk Size
( 30 )
User Data
Chunk Size
( 970 )
User Data
(Top Chunk)
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
23. 23
How2Heap Contents
Git clone https://github.com/shellphish/how2heap
Cd how2heap && make
./house_of_force
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
24. 24
Heap Exploit Techniques.
๏ง Use After Free
๏ง Double free bug ( ๋งํ )
๏ง Fastbin_dup
๏ง House of force
๏ง House of spirit
๏ง House of lore
๏ง Poison Null Byte
๏ง ๋ฑ๋ฑโฆ
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
32. 32
Fastbin_dup
๏ง Fastbin_dup
๏ง free(a); free(b); free(a);
๏ง int *c = malloc(8);
A
Fd = 2000
1000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A
Fd = 2000
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
33. 33
Fastbin_dup
๏ง Fastbin_dup
๏ง free(a); free(b); free(a);
๏ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ 1000
2000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A
Fd = 2000
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
34. 34
Fastbin_dup
๏ง Fastbin_dup
๏ง free(a); free(b); free(a);
๏ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ 1000
๏ง *c = 0x12345678
2000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A , C
Fd = 2000
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
35. 35
Fastbin_dup
๏ง Fastbin_dup
๏ง free(a); free(b); free(a);
๏ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ 1000
๏ง *c = 0x12345678;
2000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A , C
Fd = 12345678
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
36. 36
Fastbin_dup
๏ง Fastbin_dup
๏ง free(a); free(b); free(a);
๏ง int *c = malloc(8); // ๊ฒฐ๊ณผ๊ฐ 1000
๏ง *c = 0x12345678;
๏ง Malloc(8); // 2000
๏ง Malloc(8); // 1000
๏ง Malloc(8); // 12345678
2000
Size
Fd
Bk
Unused
Size
User
Data
B
Fd = 1000
A , C
Fd = 12345678
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
37. 37
Fastbin_dup
๏ง Fastbin_dup ์ ๋ฆฌ
๏ง A ๋ 1000๋ฒ์ง, C ๋ 1000๋ฒ์ง
๏ง ๋๊ฐ์ ์์น๋ฅผ A, C ๋ ๊ฐ๊ฐ ๊ฐ๋ฆฌ์ผ์ ์๊น
๏ง C์๋ ์ฌ์ฉ์์ ๋ฐ์ดํฐ๊ฐ, A์๋ free list ๊ด๋ จ ๋ฐ์ดํฐ๊ฐ ์กด์ฌ.
๏ง ์๊ตฌ ์กฐ๊ฑด :
๋๋ธ ํ๋ฆฌ๊ฐ ์ผ์ด ๋์ผ ํจ ( a, b, a ์ฒ๋ผ ํ๋ ๊ฑด๋์ )
( 12345678 ๋ฒ์ง์ ์๋ Size ์์ญ์ ๋ง์ถฐ์ค์ผ ํจ )
( ํฌ๊ธฐ๊ฐ ์์ ์ฒญํฌ๋ค ์๋ง ์ ์ฉ์ด ๊ฐ๋ฅ ํจ )
Size
Fd
Bk
Unused
Size
User
Data
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
38. 38
House of force
๏ง top chunk size ์กฐ์์ ํตํด์ ์ํ๋ ์์น์ malloc์ ํ ์ ์์
๏ง ํ์์์ Buffer Overflow ์ทจ์ฝ์ ์ด ์ ํ ๋์ด์ผ ํจ.
char * string = ( char *) malloc( 10 );
strcpy( a, argv[1] );
๏ง Write โ What โ Where ๊ฐ๋ฅ
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
39. 39
House of force
Chunk Size
( 1000 )
User Data
(Top Chunk)
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
Malloc Size
1000 ์ดํ :
Top ์ฒญํฌ๊ฐ ๋๋ก ๋๋จ
1000 ์ด์ :
์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ๋ฉ์ด๋ฆฌ๋ฅผ OS์ ์
์ฒญ
40. 40
House of force
Chunk Size
( 1000 )
User Data
(Top Chunk)
Chunk Size
( 30 )
User Data
Chunk Size
( 970 )
User Data
(Top Chunk)
Malloc(22);
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
41. 41
House of force
Chunk Size
( 970 )
User Data
(Top Chunk)
Chunk Size
( 30 )
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
Buffer Overflow
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
42. 42
House of force
Chunk Size
( 970 )
User Data
(Top Chunk)
Chunk Size
( 30 )
AAAAAAAAA
AAAAAAAAA
Chunk Size
( 41414141 )
User Data
(Top Chunk)
Buffer Overflow
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
Chunk Size
( 30 )
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
AAAAAAAAA
43. 43
House of force
Chunk Size
( 40000000 )
User Data
Chunk Size
( 1414141 )
User Data
(Top Chunk)
Malloc(40000000);
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
Chunk Size
( 41414141 )
User Data
(Top Chunk)
Chunk Size
( 30 )
User Data
44. 44
House of force
Malloc(100);
Chunk Size
( 100 )
User Data
Chunk Size
( 1414041 )
User Data
(Top Chunk)
Chunk Size
( 40000000 )
User Data
Chunk Size
( 1414141 )
User Data
(Top Chunk)
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
45. 45
House of force
Chunk Size
( 100 )
User Data
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
๏ง ์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์ฒญํฌ๋ ๊ธฐ์กด์ ํ ๋ณด๋ค 40000000๋งํผ ๋จ์ด์ง ๊ณณ์ ์์น
๏ง 40000000์ ์กฐ์ํ๋ ๊ฒ์ผ๋ก ์ํ๋ ์์น์ malloc์ด ๊ฐ๋ฅํจ
โป realloc ๋ฑ์ ํจ์๋ size_t ํํ๋ผ์ ์์๋ฅผ ๋ฃ์ ๊ฒฝ์ฐ ์์ ์กฐ์์ด ๊ฐ๋ฅํจ
49. 49
Poison Null Byte
Prev | 101
User
Data
Line 2:
P = 0
Prev | 101
User
Data
Prev | 101
Fd
Bk
100 | 100
User
Data
Prev | 201
Fd
Bk
์ฑ๊ท ๊ด๋ํ๊ต H.I.T
Line 3: Line 4:
(Merged)