0

コンピューターのセキュリティについて学んでいて、コマンドについて質問があります。telnet コマンドを使用し、超長い URL で http get を送信することにより、バッファ オーバーフローを悪用できる脆弱な Web サーバーがあります。URL はバッファをオーバーフローします。私はそれが確実に機能することを知っています。しかし今、netcat を使用してプロセスを自動化したいと考えています。これまでのところ、私は

netcat localhost 8080 < payload1

サーバーと攻撃を同じコンピューターで実行しているため、ローカルホストに送信します。Payload1 は現在、不正な形式の HTTP Get ステートメントです。ただし、サーバーはファイルを開いて HTTP Get ステートメントを確認できないため、これを理解できません。したがって、私の質問は、HTTP Get ステートメントを実行可能にする方法、またはサーバーにファイル内の HTTP Get を認識させる方法です。

ありがとう!

編集:とりわけ、URIを保持するreqが0のようです。または、少なくともGDBで確認するとそうです。これは私に問題を与えているコードの行です:

  if (req->uri == NULL || req->method == NULL ||
      req->headers == NULL || req->version == NULL) {
          return 0;
  }

GDB は、ここの if ステートメントでセグメンテーション違反だと言っています。

サーバーからの残りのコードはそこにないので、おそらくあまり意味がないことはわかっています。ただし、netcat ステートメントが送信するファイルは次のとおりです。

get /aaaaaaaaaaaaAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAddddddddaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa http/1.1

telnet を使用して送信すると、サーバーがクラッシュするため、netcat の問題であることがわかります。ペイロード 1 は CRLF 終了行を含む DOS 形式である必要があるという記述がありました。これを確認するために、ファイルをWindowsマシンに転送したところ、正しく表示されましたが、これを確認する別の方法があるかどうか疑問に思っていましたか?

4

1 に答える 1

0

サーバーがファイルを読み取れないと思わせるエラーは何ですか? 使用したコマンドラインでは、「サーバー」はファイルを読み取らず、OS シェルがファイルを開き、それを netcat プロセスの標準入力として使用します。

そこで、次のことをお願いします。

  1. ペイロード 1 のパスを確認します。次のようなものを使用する必要があるかもしれませんnc localhost 8080 < /path/to/payload1
  2. サーバーが TCP ポート 8080 でリッスンしていることを確認します
  3. これらのいずれも機能しない場合は、エラー メッセージや発生している問題の症状をいくつか挙げてください。

更新(質問の編集に基づく):

ここでのクライアントは netcat です。あなたの編集に基づいて、サーバーがクラッシュしているようです。したがって、リクエストはサーバーに送信されます。(元のバッファ オーバーフローに加えて) サーバー ソフトウェアで別のバグを発見した可能性があります。telnet を使用しようとしたときに、同一の URI を送信しましたか?

于 2011-11-14T23:05:06.547 に答える