먼저 LOB 문제 풀이에 들어가기 전에 환경설정을 좀 해줄게 있다.
기본으로 되어있는 bash 쉘을 bash2로 바꿔야 한다.
bash에서는 \xff 를 null로 처리해버린다고 한다.
그래서 bash2로 설정하고 문제풀이를 시작한다.
먼저 gate/gate 로 접속하면 gremlin, gremlin.c 두가지 파일이 있다.
gremlin.c를 열어보면
argv로 인자를 받아 strcpy로 복사하는 기본 bof 문제이다.
strcpy() 함수가 입력값의 길이를 검사하지 않는 취약점을 이용한 BOF이다.
디버깅하여 정확한 스택 구조에 대하여 확인해보자.
지금 그대로 하면 권한이 없어 GDB를 올바르게 구동시킬 수가 없다. 실행도 안되고 확인도 불가
그래서 다른 곳에 gremlin을 복사해서 볼것임.
대충 보아하니 256바이트를 버퍼로 사용한다.
SFP와 더하여 총 길이 260바이트의 페이로드를 작성하면 될 것같다.
NOP sled를 쓰겠다. 버퍼 길이가 충분히 되는 것 같으니
그럼 이제 리턴주소를 한번 찾아보자.
main+68 에 브레이크 포인트를 걸고 임의의 문자를 넣고 어디서 부터 쌓이는지 대략적인 위치를 파악해봄
물론 위에 보이는 위치에 떨어질 경우는 거의 없지..
nop 크기 만큼 왓다갓다 해봐야 한다.
그럼 이제 얻은 정보를 토대로 페이로드를 구성해보자.
[NOP 185] [shellcode] [NOP 50] [RET]
./gremlin `perl -e 'print "\x90"x185,"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\
x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80","\x90"x50,"\x10\xfc\xff\xbf"'`
(RET는 여러번 움직여보고 쉘이 따지는 주소를 적었따.)
쉘코드는 기본 25 byte 짜리를 사용함.
NOP이 들어간 위치가 좀 중구난방인데,
일단 쉘코드와 RET 사이에 20byte 이상 공백은 생겨야 한다.
이제 공격을 해보자.
'IT 그리고 정보보안 > Write-up' 카테고리의 다른 글
LOB Level 6 (Wolfman) (0) | 2021.04.12 |
---|---|
LOB Level 5 (Orc) (0) | 2021.04.12 |
LOB Level 4 (goblin) (0) | 2021.04.12 |
LOB Level 3 (Cobolt) (0) | 2021.04.11 |
LOB Level 2 (Gremlin) (0) | 2021.04.11 |