저번 Gate문제와는 달리 버퍼에 ShellCode를 저장할 수 없습니다.
그러므로 새로운 공간에 ShellCode를 넣을 필요가 있습니다.
이때 우리는 환경변수를 사용할 수 있습니다.
export shellcode=`python -c 'print SHELLCODE'`
와 같은 명령어를 통해 환경변수에 ShellCode를 넣을 수 있습니다.
그러면 이제 환경변수의 주소 위치를 알아야 합니다.
환경변수의 주소는
환경변수 내용의 크기와 프로그램의 시작명령줄의 길이에 비례합니다.
프로그래밍을 통해 위치를 알았습니다.
#include<stdlib.h>
#include<stdio.h>
int main(int argc,char *argv[])
{
int k,a,b;
a=strlen(argv[0]);
b=strlen(argv[1]);
k=getenv("KSHMK");
k+=2*(a-b);
printf("0x%x\n",k);
return 0;
}
이제 공격만 하면 됩니다.
오버플로우하는 방법은 이전 Gate와 같으므로 생략합니다.
'Pwnable > LOB' 카테고리의 다른 글
LOB 6. Wolfman (0) | 2015.09.25 |
---|---|
LOB 5. Orc (0) | 2015.09.23 |
LOB 4. Goblin (0) | 2015.09.20 |
LOB 3. Cobolt (0) | 2015.09.17 |
LOB 1. Gate (0) | 2015.09.08 |