Make your own custom rickroll with my new rickroll program! nc lac.tf 31135
[90 solves / 449 points]
Analysis
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
#include<stdio.h>
int main_called = 0;
intmain(void) { if (main_called) { puts("nice try"); return1; } main_called = 1; setbuf(stdout, NULL); printf("Lyrics: "); char buf[256]; fgets(buf, 256, stdin); printf("Never gonna give you up, never gonna let you down\nNever gonna run around and "); printf(buf); printf("Never gonna make you cry, never gonna say goodbye\nNever gonna tell a lie and hurt you\n"); return0; }
소스코드가 간단하다. fsb가 터진다. 다만 익스할 때 주의해야 할 점은 main을 다시 실행시킬 때 main_called을 다시 0으로 세팅해줘야 한다.
Solve
main_called을 0으로 세팅하고 puts@got를 main으로 overwrite -> main_called만 0으로 세팅해준다면 이제 계속 main이 반복해서 실행됨
libc leak 및 main_called을 0으로 세팅
main_called을 0으로 세팅하고 printf@got을 system로 overwrie