death_knight.c 내용이다. 코드를 분석해보면, 6666포트로 연결하여 client로부터 256문자열을 읽어온다. 여기서 buffer의 크기는 40이므로 OverFlow가 발생함을 알 수 있다.
리버스 쉘을 이용해서 문제를 풀어보자.
먼저 쉘코드를 만들어 보겠다.
공격자의 IP와 2345 PORT를 지정하여 다음과 같이 쉘코드를 만들었다.
이제 death_knight 버퍼를 확인해 보자.
recv 함수의 인자로 256만큼 읽어 오는데, buffer의 크기는 40 임을 알 수 있다.
따라서 payload는 BUF [40] + SFP [4] + RET [4] + SHELLCODE 형식이며, RET에 SHELLCODE 실행 주소를 넣으면 되겠다.
다만 원격으로 실행하기 때문에 디버깅을 통한 정확한 ret값을 알 수 없어 브루트포스를 통해 ret값을 얻어야 한다.
pwntools를 사용한 exploit 코드는 다음과 같다.
이제 2345 port를 열고 ex.py를 실행시켜보자
정상적으로 쉘이 따졌다.
death_knight를 마지막으로 LOB를 다 끝냈다.
00. LOB 문제 (0) | 2020.05.03 |
---|---|
19. nightmare -> xavius (0) | 2020.03.11 |
18. succubus -> nightmare (0) | 2020.03.11 |
17. zombie_assassin -> succubus (0) | 2020.03.11 |
16. assassin -> zombie_assassin (0) | 2020.03.11 |
댓글 영역