본문 바로가기

Security

BOF 중 scanf에 대한 글

DreamHack에 워게임 문제들을 처음부터 풀어보고 있는데 막힌 부분이 있어서 블로그에 정리한다. NX같은 보호기법도 안걸려있는 전형적인 버퍼오버플로우 취약점의 문제였다. 간단히 페이로드를 [Nop Sled] [Shellcode] [SFP] [RET = Buf's addr] 로 구성하여 exploit을 했다. 처음에는 peda에서 제공해주는 쉘코드를 사용했는데 스택에 쉘코드가 제대로 박히지 않았다. 

Nop과 Shellcode를 스택에 저장하려고 전송
하지만, 쉘코드 중 '0x0b' 부분부터 누락

디버깅을 해봤는데, System Call을 위해 eax를 11(=0xb)로 셋팅하려고 사용한 "push 0xb" 명령어의 기계어인 "6a 0b" 중 "0x0b"가 누락되었다. 테스트해보니깐 입력을 받는 함수인 scanf에서 0xb를 입력값으로 받아들이지 못하고 입력이 종료되버린다. ASCII 코드표를 보면, 0xB는 VT(Vertical Tab)이다. scanf는 공백(enter, tab, space)를 문자열로 처리하지 않는다. 따라서 scanf로 입력받는 쉘코드가 제대로 입력받아지지않아 쉘을 획득할 수 없었다. 

'Security' 카테고리의 다른 글

HITCON Training lab10 (first fit, uaf)  (0) 2020.12.22
HITCON Training lab7 ~ 9  (0) 2020.11.21
HITCON Training lab6  (0) 2020.11.04
HITCON Training lab4 ~ 5  (0) 2020.10.30
Oneshot 가젯  (0) 2020.10.16