-
DreamHack 1단계 basic_exploitation_001DreamHack 2021. 7. 14. 14:07
DreamHack 1단계 basic_exploitation_001 문제를 풀어보겠다.
위 그림에서 NX 보호 기법이 활성화 되어있음에 따라 쉘 코드가 실행되지 않다는 것을 알 수 있다.
main 함수 : buf 에 0x80만큼 사이즈가 할당되는데, 128 바이트가 할당된다.
그리고 initialize 함수가 실행되고, gets 로 buf 를 입력을 받는다.
initialize 함수를 보면, 실행되고 30초가 지나면 Time Out 메시지를 출력하고 프로그램을 종료한다.
read_flag 함수 : system 명령어로 flag 값을 보여준다는 것을 알 수 있다.
즉, 호출하는 부분이 없으므로, 강제로 호출해야 한다.
스택의 기본 구조는 Buffer + SFP (4Byte) + RET (4Byte) 이다.
buf 의 크기는 128 Byte 이고 SFP 의 크기는 4 Byte 이므로 RET 전까지 바이트 수는 132 바이트라는 것을 알 수 있다.
즉, 132 바이트까지 gets 로 입력을 하고 RET 에 침범하여, read_flag 함수의 주소 값을 넣어주면 강제로 read_flag 함수를 호출하여 권한을 탈취할 수 있다.
실행을 시키고, info func 를 입력하면 함수의 정보를 출력한다.
위 그림에서 read_flag 함수의 주소를 알 수 있는데, 주소 값을 넣어 호출하는데 사용될 것이기 때문에 복사를 해준다.
이번에도 Pwntools 을 사용할 것이다.
먼저 pwn 모듈을 사용하기 위해서 import 시키고, 해당 문제가 있는 서버로 원격 접속을 하기 위해서 remote 클래스를 사용한다.
그 후 , 132 바이트까지 입력할 문자열을 만든다. 이때 python2 와 python3 의 방식이 다르므로 만약 python3 를 사용하고 있다면 문자열 앞에 바이트 형식으로 변화해준다는 문자열 b 를 꼭 작성해야 한다 !!
RET 전까지 바이트가 채워지면, read_flag 함수의 주소 값을 32 비트 리틀엔디안 패킹 방식으로 넣어준다.
그 후, sendline 을 통해 payload 의 값을 전송하고, interactive 를 통해 쉘에 접속한다.
실행을 하면, 권한을 탈취하여 FLAG 값을 얻을 수 있다.
'DreamHack' 카테고리의 다른 글
DreamHack 1단계 basic_exploitation_003 (0) 2021.07.30 DreamHack 1단계 basic_exploitation_002 (0) 2021.07.15 DreamHack 1단계 basic_exploitation_000 (0) 2021.07.14 DreamHack 1단계 path traversal (0) 2021.07.11 DreamHack 1단계 xss-1 (0) 2021.07.11