전체 글 23

[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을 입력하면 문제가 풀리게 ..