0

ctf プラットフォームで pwn の問題を解決しようとしています。プログラムはscanf()、標準入力から数値配列のインデックスとコンテンツを取得するためにのみ使用します。

for ( i = 0; i <= 3; ++i )                    
{
  puts("enter index:");
  __isoc99_scanf("%d", &index);
  if ( index > 3 )
  {
    puts("index is too big");
    exit(0);
  }
  puts("enter value:");
  __isoc99_scanf("%d", &num);
  s[index] = num;
}

while ( j <= 3 )
  printf("0x%08x\t", s[j++]);

return __readgsdword(0x14u) ^ canary;

ただし、send()関数を使用して 4 バイトの int 数値をプログラムに送信すると、scanf 関数は (4 バイトの int 数値ではなく) EOF を検出し、scanf は何も検出しないようです。さらに、以下scanf()は EOF のために数値の取得を拒否します。私のsend()ステートメントと実行結果は次のとおりです。

r.recv()
r.sendline(p32(0x1))
r.recv()
r.sendline(p32(0x1))

並外れた実行結果

私の質問は次のとおりです。この例外的な問題を説明する方法と、このプログラムの関数にsend()数値を送信するために正しく使用する方法は?__isoc99_scanf("%d", &number)

4

0 に答える 0