Sono nuovo ai CTF e mi è stato chiesto di risolvere questo problema:
#include <cstdio>
// g++ pwn2.cpp -o pwn2 -static
void ilocamp() {
char flaga[1024] = {0};
FILE *f = fopen("flag2.txt", "r");
fread(flaga, 1, 1024, f);
fclose(f);
printf("flaga: ILOCAMP{%s}\n", flaga);
}
int main() {
int tab[100] = {0};
int dwa = 2;
int n,i,min,x;
scanf("%d",&n);
for (i=0;i<n;i++) {
scanf("%d", &x);
scanf("%d", &tab[x]);
}
min = 1000000000;
for (i=0;i<n;i++) {
if (tab[i] && tab[i] < min) {
min = tab[i];
}
}
printf("najmniejsza liczba: %d a dwa wynosi: %d\n", min, dwa);
}
So che il punto è sovrascrivere l'indirizzo di ritorno della funzione principale con l'indirizzo di ingresso ilocamp (), e per farlo dovrei usare quel semplice vuln nel ciclo, ma non ho idea di come farlo . Ho anche binario, ho provato a fare qualcosa con gdb ma non so come. Puoi darmi qualche consiglio? Esiste un binario: link (Il file "flag2.txt" è sul server locale)