본문 바로가기

PWNABLE/HITCON TRAINING

[HITCON TRAINING] LAB4

[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