■ Wargame 4

[Pwnable.kr] flag - 7 pt ( Write Up )

[Pwnable.kr] flag - 7 pt ( Write Up ) 2019년 5월 3일 금요일오전 3:11 문제는 아래와 같다. Flag 바이너리 파일을 다운로드 받아 실행시켜보면 flag를 malloc한 영역에 strcpy했다는 문자열이 출력된다. Exeinfo로 파일 내용을 보니 해당 바이러리는 UPX Packer로 패킹되어있다고한다. UPX 툴로 Depackaging 해주었다. Depackaging 후를 보면 함수가 정상적으로 잘 출력된 것을 확인 할 수 있다. IDA에서 hex-ray로 코드를 보면 malloc으로 100 바이트 할당해준 후, 할당해준 영역에 flag 값을 넣어준다. 이 때, flag 변수에 들어있는 값을 확인하면 flag를 확인할 수 있다. Microsoft OneNote 20..

[Pwnable.kr] BoF - 5 pt ( Write Up )

□ 문제를 보면 아래와 같다. Bof.c라는 소스코드와 bof 바이너리 파일이 주어졌다. □ Bof.c 코드를 봐본 결과 func 함수안에 있는 key의 지역 변수 값이 "0cafebabe" 값이면 bof의 권한으로 /bin/sh을 실행시킬 수 있다. - Key 값을 "0cafebabe"로 만들기 위해선 gets 함수를 이용해 overflowme[32] 배열에 입력 값을 받을 때 buffer overflow를 일으키면 된다. □ Bof 공격 성공하기 위해선 바이너리 overflowme[32] 배열 주소의 위치와 key 주소의 위치 차이를 정확히 할아야하므로 bof 바이너리를 아래와 같이 IDA로 열어보았다. - 해당 코드는 func() 함수의 코드이다. - "Cmd [ebp+arg_0], 0CAFEBAB..

[Pwnable.kr] collision - 3 pt (Write Up)

□ 문제 코드는 아래와 같다. □ 본 문제를 해결하기 위해 3가지를 해결해야한다. - argv 인자 2개 이상 - argv[1]의 길이가 20 - Check_password 함수의 return 값이 hashcode(=0x21DD09EC)와 같아야한다. □ 아래의 Check_password() 함수를 자세히 봐보면 인자로 const char* p형 즉, 문자열을 입력 받아와서 (int *)형으로 타입 변환 후 int형 포인터인 ip에 데이터를 넣어준다. - 만약 인자를 "abcdefgh"(= 8바이트)를 입력했다면 const char* p형을 (int*) 형으로 변환되므로 ip 포인터에서 ip[0]은 "abcd" 데이터를 가리키고 ip[1]은 "efgh"를 가리킨다. - 이 때, 당연히 "abcd"와 "e..

[Pwnable.kr] Fd - 1pt (Write up)

□ 문제 설명을 보면 리눅스에서 '파일 디스크립터'가 무엇인지를 물어보고 있다. □ 문제 서버에 들어가 fd.c 파일을 열어보면 아래와 같다. - System("/bin/cat flag"); 를 실행하기 위해선 buf의 값이 "LETMEWIN\n"이여야한다. - Buf는 read함수로 파일 디스크립터인 fd로 특정 문자열 값을 읽어온다. - 그런데 fd는 int형 변수로 선언되어 atoi(argv[1]) - 0x1234;로 초기화된다. - Read 함수로 파일을 정상적으로 읽으려면(= 표준 입력) 파일 디스크립터가 0이 되어야한다. - 따라서 fd를 0으로 만들기 위해선 argv[]1에 0x1234(=4660)를 넣으면 된다. □ fd 인자에 4660을 입력하고 LETMEWIN을 입력하면 문제가 풀리게 ..