Return to Library

buaii·2023년 9월 18일
0

System Hacking

목록 보기
4/11

Return to Library

예전에 풀었던 시스템 문제인데 복습하는 겸 다시 정리해보려 한다

제일먼저 checksec을 통해 해당 프로그램에 적용된 보호기법을 확인해보자

카나리가 적용되어 있으며, NX enabled라서 쉘코드를 작성해도 실행이 안된다
문제에서 제공한 c코드를 살펴보자

버퍼의 크기는 0x30이며
canary leak과 return address를 덮어쓸 수 있도록 입력을 두번받고있다

Canary Leak

버퍼의 크기가 0x30이었으니까 0x39만큼 입력을 해주면 canary leak이 가능해진다

사진을 보면 카나리 주소가 문자로 출력된걸 확인할 수 있다
이를 이용하여 exploit코드를 작성해보자

제공받은 canary주소에 0을 더해주면 카나리가 완성된다

gadget

x86-64의 호출 규약에 따르면 이는 rdi=”/bin/sh” 주소인 상태에서 system 함수를 호출한 것은 system("/bin/sh")와 같으며, 쉘을 획득하게 된다

그래서 리턴 가젯을 사용하여 반환 주소와 이후의 버퍼를 다음과 같이 덮으면,
pop rdirdi/bin/sh의 주소로 설정하고, 이어지는 retsystem 함수를 호출할 수 있다.

pop rdi가젯은 다음 명령어로 찾을 수 있다

ROPgadget --binary ./rtl --re "pop rdi"

System plt

가젯의 주소를 찾았으니 이제 system의 plt주소를 찾아야한다
아래의 gdb명령어를 통해 system함수의 plt주소를 알 수 있다

"/bin/sh"

아까 c 코드에서 /bin/sh가 주어졌기때문에 이 주소를 찾아보면 아래와 같다



Payload

이제 필요한 모든 함수의 주소와 가젯을 확인했으니 코드를 작성해보자

작성한 pwntool을 실행시켜서 flag를 획득했다

profile
buaii

0개의 댓글