HO_9
HO9
HO_9
전체 방문자
오늘
어제
  • 분류 전체보기 (104)
    • Write Up (3)
    • WarGame (21)
      • The Lord of Bufferoverflow(.. (7)
      • The Lord of Sql Injection(L.. (1)
      • Pwnable.kr (1)
      • Pwnable.tw (0)
      • XSS GAME (6)
      • Pwnable.xyz (5)
    • SYSTEM HACKING (49)
      • 기법 (24)
      • 문제 풀이 (24)
    • CODING (2)
      • PYTHON (2)
    • WEB HACKING (1)
    • Plan (0)
    • PROJECT (0)
    • iOS (6)
    • ALGORITHM (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

  • .

인기 글

태그

  • JNDI
  • 취약점
  • log4j
  • 아파치

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
HO_9
SYSTEM HACKING/기법

[How2Heap] Fastbin dup into Stack

[How2Heap] Fastbin dup into Stack
SYSTEM HACKING/기법

[How2Heap] Fastbin dup into Stack

2018. 1. 28. 20:56
728x90
How2Heap의 Fastbin dup into Stack을 보자...

어려워서 생각을 정리할겸 써본다.


Fastbin_dup_into_Stack.c


1.    int main()

2.    {

3.     unsigned long long stack_var;

4.

5.     int *a = malloc(8);

6.     int *b = malloc(8);

7.     int *c = malloc(8);

8.

9.     free(a);

10     free(b);

11.     free(a);

12.

13.

14.     unsigned long long *d = malloc(8);

15  

16.        malloc(8);

17.

18.     stack_var = 0x20;

19.

20.     *d = (unsigned long long) (((char*)&stack_var) - sizeof(d));

21.

22.     malloc(8);

23.     printf("malloc(8): %p\n", malloc(8));

24.    }



a,b,c에 말록을 받고 free를 해주는데 a를 두번을 free를 해주어서 Double Free Bug가 생긴다.

Double Free Bug로 인해서 이중연결리스트가 서로가 서로를 계속 가르키고 있다.

이상태에서 fd를 Stack의 특정주소로 변경을 한 후 malloc을 해주어서 힙이 할당 되도록 하는 것 이다.

디버깅을 하면서 살펴보자.



일단은  a,b,c에 malloc을 한 뒤인 8번줄에 브레이크를 걸어보자.




브레이크를 건 다음

heap명령어를 통해서 heap구조를 살펴보니 이와같이 malloc이 잘 된 모습을 볼 수 있다.

이번에는 free를 한줄씩 실행을 해보면서 fd가 어떻게 바뀌는지 살펴보고 fastbin에 들어가는지도 확인하자.


free(a)



일단은 fastbin에 올라간 것을 볼 수 있다.

그리고 처음으로 free가 되서 fd가 없다.


free(b)



b를 free를 한 상태이다.

fastbin list를 보면 b의 fd가 a를 가리키고 있다.

이번에는 free(a)를 다시해서 Double Free Bug를 발생시켜 보자.


free(a)




Double Free Bug를 통해서 Fastbin dup chain이 만들어 졌다.

이번에는 14번째 줄 unsigned long long *d = malloc(8);을 실행시켜보자


unsigned long long *d = malloc(8);



unsigned long long *d = malloc(8);을 통해서 free한 A 청크가 할당이 된다.

이번에는 16번째 줄을 실행시켜 보겠다.


malloc(8)



Fastbin에 있던 B청크가 할당이 되고 A청크 하나만 남아있다.

20번째 줄을 실행을 해보자.


*d = (unsigned long long) (((char*)&stack_var) - sizeof(d));



A청크를 할당하기 전 fd를 조작해서 다음에 malloc을 할 주소를 정해준다.

그럼 원하는 스택의 주소에 값을 쓸 수 있게 된다.

(※ -sizeof(d)를 해준 이유는 fd에는 chunck의 address주소가 들어가서 -sizeof(d)를 해줌)


printf("malloc(8): %p\n", malloc(8));



마지막 malloc을 해서 스택 영역이  할당 된다.

fastbin list를 보면 사라진 것을 볼 수 있다.


.

.

.

아직은 이해가 많이 안간다...

이해가 되거나 깨달은 것이 있으면 수정을 해서 보충해야 겠다.

'SYSTEM HACKING > 기법' 카테고리의 다른 글

[How2Heap] House of Force  (0) 2018.03.08
[How2Heap] House of Spirit  (0) 2018.02.01
Special Chapter-Double Stage Format String Bug  (0) 2018.01.01
DAY-8 FSB(Format String Bug)  (0) 2017.12.31
DAY-7 ROP(Return Oriented Programming)  (0) 2017.11.18
    'SYSTEM HACKING/기법' 카테고리의 다른 글
    • [How2Heap] House of Force
    • [How2Heap] House of Spirit
    • Special Chapter-Double Stage Format String Bug
    • DAY-8 FSB(Format String Bug)
    HO_9
    HO_9

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.