LOB succubus Write-Up

2019. 8. 1. 12:34
728x90
728x90
728x90

LOB succubus 풀어보자.

 

[사진 1]

주어진 코드를 보면 첫 번째 인자 argv[1] 44~47번째 값과 strcpy 함수 주소를 비교하고 다르면 프로그램을 종료시킨다. 아래에서 확인하겠지만 첫 번째 인자 argv[1] 44~47번째 값은 ret 지점을 변조시킨다. 즉 main 함수가 종료되면 strcpy 함수가 실행된다.

strcpy 함수의 인자는 총 두개이고 각 인자는 다음과 같다.

char *strcpy(char *dest, const char *src);

 char *dest : 복사될 공간

 const char *src : 복사할 값의 주소

 

 

[사진 2]

먼저 main 함수의 어셈블리어 코드를 보면 strcpy 함수를 호출하기 전에 ebp-0x28 주소를 eax 레지스터에 저장한다. 즉, 이 곳이 buffer 변수의 시작점이다.

 

 

[사진 3]

따라서 스택은 위와 같이 형성될 것이고, buffer 변수부터 44bytes를 입력하면 ebp까지 변조할 수 있다.

 

 

[사진 4]

strcpy 함수 주소는 gdb로 쉽게 구할 수 있다.

 

 

[사진 5]

위와 같이 첫 번째 인자 argv[1] 44~47번째 값을 strcpy 함수 주소로 입력하면 바로 종료되지는 않는다. 위에서 설명했듯이 strcpy 함수 주소가 ret를 변조하기 때문에 main 함수가 종료되면 strcpy 함수가 호출된다.

 

 

[사진 6]

strcpy 형식에 따라 위와 같이 스택을 조작하면 된다. ebp+c dest 값은 ebp+8 strcpy_ret의 주소로 저장하고, ebp+10 src 값은 shellcode의 주소를 가리키는 주소를 저장하면 된다.

따라서 페이로드는 다음과 같다.

| 임의의 값 "\x90" 44bytes | &strcpy() 4bytes | "AAAA" dummy 4bytes | &strcpy_ret 4bytes | &(&shellcode) 4bytes |

위의 페이로드를 수행하려면 argv 인자 세개를 이용해야 한다. 첫 번째 인자 argv[1]에 위 페이로드를 입력하고, 두 번째 인자 argv[2]에 shellcode의 주소를 입력한다. 그리고 마지막 인자 argv[3]에 shellcode를 입력한다.

 

 

[사진 7]

세그멘테이션 오류가 발생하므로 다른 이름(kightmare)으로 복사하고 생성된 core 파일을 확인해보면 필요한 인자들의 정확한 주소를 위와 같이 볼 수 있다.

1. strcpy_ret : 0xbffffab0

2. &(&shellcode) : 0xbffffc45

3. &shellcode : 0xbffffc4a

사용한 shellcode는 다음과 같다.

\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

 

 

[사진 8]

위와 같이 임의의 값 "\x90" 44bytes를 입력하여 ebp까지 변조하고 dummy 4bytes, "\xb0\xfa\xff\xbf" 4bytes를 입력하여 strcpy 함수의 dest 변수를 변조한다. 그리고 "\x45\xfc\xff\xbf" 4bytes를 입력하여 src 변수를 변조하고 0xbffffc45 주소는 두 번째 인자 argv[2]의 주소이다. 두 번째 인자 argv[2]에는 shellcode의 주소를 입력하고 세 번째 인자 argv[3]에는 shellcode를 입력한다.

728x90
728x90

'Wargame > LOB' 카테고리의 다른 글

LOB xavius Write-Up  (0) 2019.08.01
LOB nightmare Write-Up  (0) 2019.08.01
LOB zombie_assassin Write-Up  (0) 2019.08.01
LOB assassin Write-Up  (0) 2019.08.01
LOB giant Write-Up  (0) 2019.08.01

+ Recent posts