[HITCON TRAINING] LAB4 → WRITE UP
먼저 해당 바이너리의 보호기법을 확인해본다.
해당 바이너리는 인텔 기반의 32비트 바이너리이며
보호기법으로는 Partial RELRO와 NX bit가 적용되어 있는 것을 확인할 수 있다.
또한 해당 문제의 추가적인 정보로는 바이너리의 소스코드가 주어진 것을 확인할 수 있다.
바이너리의 소스코드를 확인해보자.
해당 소스코드의 Line 11을 확인해보면 Print_message 함수 내부에서
strcpy 함수를 이용하여 message 버퍼의 데이터를 buf 버퍼에 복사하는 것을 확인할 수 있다.
이때 message 버퍼는 최대 256 길이 만큼 입력받을 수 있기에 취약점이 발생한다.
결과적으로 두번째 입력을 통해 프로그램의 EIP가 변조가능하므로 어떠한 방식으로 쉘을 획득할지 고려해보자.
해당 프로그램의 입력값을 "AAAABBBBCCCCDDDDDEEEEEFFFFGGGG"를 입력해보았을 때 스택 상에서 다음과 같은 메모리를 보이고 있다.
이는 총 56 * "A" + SFP(4Byte) + RET(4Byte) 입력시 EIP변조가 가능하다.
이러한 취약점을 바탕으로 실제 Exploit을 작성해보겠다.
Exploit 작성시 고려해야할 조건은
1. 보호기법으로 ASLR과 NX bit가 걸려있다.
2. 총 64바이트를 입력시 EIP 변조가 가능하다.
결과적으로 RET 위치에 System 함수의 주소를 삽입하고 인자로 "/bin/sh" 문자열의 주소를 입력하면 된다.
이때 System 함수의 주소는 ASLR로 인해서 지속적으로 변경되기 때문에
첫번째 메모리 Leak을 통해 offset을 고려하여 system함수의 주소를 알아낼 수 있다.
이를 고려하여 작성한 Exploit이다.
'PWNABLE > HITCON TRAINING' 카테고리의 다른 글
[HITCON TRAINING] LAB6 (0) | 2019.01.13 |
---|---|
[HITCON TRAINING] LAB5 (0) | 2019.01.09 |
[HITCON TRAINING] LAB3 (0) | 2018.08.17 |
[HITCON TRAINING] LAB2 미완료 (0) | 2018.08.17 |
[HITCON TRAINING] LAB1 (0) | 2018.08.17 |