[App-System] ELF x86 - Format string bug basic 1
·
Wargame/Root me
1. intro 2. code & 분석 #include #include int main(int argc, char *argv[]){ FILE *secret = fopen("/challenge/app-systeme/ch5/.passwd", "rt"); char buffer[32]; fgets(buffer, sizeof(buffer), secret); printf(argv[1]); fclose(secret); return 0; } 코드를 요약하면 .passwd 파일을 열고 buffer 변수에 32byte를 할당하고 fgets로 buffer 변수 size만큼 secret 파일에서 가져와서 buffer 변수에 저장한 뒤 printf로 argv[1]을 출력하고 종료한다. 하지만 printf(변수명)을 사용하기 때..
[App-System] ELF x86 - Stack buffer overflow basic 2
·
Wargame/Root me
1. intro 2. code & 분석 #include #include #include #include void shell() { setreuid(geteuid(), geteuid()); system("/bin/bash"); } void sup() { printf("Hey dude ! Waaaaazzaaaaaaaa ?!\n"); } void main() { int var; void (*func)()=sup; char buf[128]; fgets(buf,133,stdin); func(); } 우선 envi. config.에 NX, Heap exec가 걸려있다. 추후에 이에 대해서 다시 한번 정리하기로하고, 간단히 이야기하자면 buffer 내에 의미 있는 코드가 입력되더라도 실행되지는 않게 막아주는 보호 기..
[App-System] ELF x86 - Stack buffer overflow basic 1
·
Wargame/Root me
1. intro 2. code & 분석 #include #include 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"); setreuid(geteuid(), geteuid()); system(..