web-dev-qa-db-ja.com

SQLインジェクション脆弱なURLに「等しい」(=)記号が含まれていないインスタンスはありますか

私があなたが助けてくれることを望んでいる質問がありますか?

私のサイトからスパイダーされたURLの非常に長いリストをフィルター/ grepして、SQLインジェクションに対して脆弱である可能性があるURLのみを取得しようとしています。

私の質問:SQLインジェクションに対して脆弱である可能性のあるURLは常に常に「等しい」( =)URL内の記号?

したがって、URLに「=」記号を含むすべてのURLをgrepすると、「=」記号を含まない他のURLまだ脆弱なのでしょうか?

これらはすべて「=」記号を含み、SQLインジェクションに対して脆弱である可能性があります。

http://[website]/index.php?itemid=10
http://www.[yoursite].org/site/page.asp?CID=72&DID=
http://www.[mysite].com/site/page.asp?=

URLに「=」が含まれておらず、SQLインジェクションに対して脆弱なインスタンスはありますか?

------- EDIT -------

私のブラウザーのURLバーのURLを変更/挿入することにのみ興味があります。リスト内のURLがSQLインジェクションに対して潜在的に脆弱かどうかを確認します(つまり、フォームの注入やPOSTリクエストなどには興味がありませんまだ)。

txtファイルにURLのリストがあります

FILE.txt

http://www.[site].com/index.php?itemid=10
http://www.[site].com/
http://www.[site].com/site/page.asp?CID=72&DID=
http://www.[site].com/animals/pictures
http://www.[site].com/pictures
http://www.[site].com/index.php?itemid=7
http://www.[site].com/faq

このtxtファイルをフィルタリング/ grepしたいので、以下に示すように「=」記号を含むURLのみを取得します:

FILTEREDFILE.txt

http://www.[site].com/index.php?itemid=10
http://www.[site].com/site/page.asp?CID=72&DID=
http://www.[site].com/index.php?itemid=7
http://www.[site].com/site/page.asp?CID=72&DID=

FILTEREDFILE.txtでこれらのURLを使用してから、foreachループを使用して、それぞれの末尾にアポストロフィを追加し、SQLインジェクションに対して脆弱かどうかを確認します応答コンテンツの長さを見て、変更/差異があるかどうかを確認します。

URLであっても '='が含まれていない場合でも、フォームにSQLインジェクションの脆弱性があり、POSTリクエストなど)、であることを知っていますが、今は気になりません。

重要:

URL自体を変更/変更することで特定できる脆弱性にのみ関心があります(つまり、http:// www。[site] .comの末尾にアポストロフィを追加することにより) /index.php?itemid=7など)。

知りたいのは、 '='記号を含むURLのtxtファイルを検索することで、まだ脆弱である可能性のあるURLをすべて見逃してしまうかどうかです。 「=」記号を含まない(フォーム、POSTS、URL書き換えを除き、URLバーのURLを操作するだけ)

これが私の質問をよりよく説明するといいのですが、

ご協力いただきありがとうございます

7
yonetpkbji

SQLインジェクションは、リクエストのany部分で実行できます。 HTTPリクエストのパラメータには、アプリケーションをだましてデータベースに挿入させるSQLデータを保持できます。

たとえば、AmazonのURLには商品IDがあります http://www.Amazon.com/gp/product/B008GFRB9E これはURL書き換えと呼ばれ、WebサーバーはURLから商品IDを抽出し、それを使用してデータベースを照会します。

ソースコードが利用できない場合、実行されているSQLクエリを知る方法はありません。 1つのWebアプリケーションは、接続しているIPアドレスで逆引きDNSを実行し、その名前をデータベースに挿入できます。ただし、IPはSQLインジェクションを実行する文字列に解決できます。

以下は、URLからWebアプリケーションに変数を取得する方法の一部です。

リンクを解析するときは、文字をURLエンコードできることに注意してください。

11
Cristian Dobre

すべてのinputはSQLインジェクションに対して脆弱であるため、常にサーバー側でフィルタリングおよびチェックする必要があります。それがどこから来るのか心配する必要はありません。ユーザーからの変数を使用しているとき、ファイルを読み込んでいるとき、値がハードコードされていないときはいつでも、適切なエスケープとチェックを行う必要があります。

OWASPにまだ慣れていない場合は、まず SQLインジェクションに関するガイド から始めることをお勧めします。

検出子として等しい文字列に依存しません。機能を変更するSQLインジェクションを取得するか、単純なコメントインジェクション攻撃でブールチェックを実行する可能性があります。

また、他の回答に記載されているように、クエリ文字列をフィルターに掛けると、POSTメソッドを介して送信されたフォームデータを処理するページが見落とされます。たとえば、フォーム送信の結果を処理するURLがある場合、それにはgetパラメータがない可能性がありますが、POST値が処理されるときにSQLインジェクションが引き続き可能です。私はあなたの投稿全体を読みましたが、アプリケーションをテストする努力をしているのに、なぜすべての入力フォームに対してチェックしたくないのかわかりません。資金がある場合は、nikto、 げっぷのスキャナー 、AppScanなどの自動化ツールを実行することをお勧めします。

問題の一部のみをカバーするために多大な努力をしているようです。また、ソースコードがある場合、同じ関数を呼び出すページが複数ある可能性があるため、ページを特定するのではなく、プログラマーであればここから始めます。

1
Eric G

URLの書き換えがなかった場合でも、等号を含めないことが可能ですが、それはWebサイトのコーディングの悪さによって異なります。

適切にサニタイズされていない場合、SQLクエリが発生するWeb URLの任意の部分を使用して、SQLインジェクションを実行できます。

Get変数は、値だけではなく、定義だけで渡すことができます。

この例を考えてみましょう:

URL:http://site.com/user.php?user-1234

コード:

foreach ($_GET as $k => $v) {
    $k2 = explode('-', $k);
    if ($k2[0]='user') $res=$k2[1];
}
//do sql query with $res
1
sharp12345

簡単に言えば、SQLインジェクションのベクターとして、=が含まれているURLだけであると想定することはできません。

この仮定の問題は、URLハンドラー情報を使用して、どのハンドラー/プロシージャが呼び出され、どのようにパス情報を処理するかを決定するコンテンツハンドラーとWebフレームワークの使用を無視することです。このアプローチを使用する多くのRESTベースのサービスおよび多くの一般的なWebフレームワークを検討してください。

私は次のようなURLを持つことができます

http://example.com/handler/argument1/argument2/arguement

ここで、ハンドラーが呼び出され、arguement1、arguement2、arguement3が渡されます。ハンドラーの実装方法とその機能に応じて、SQLインジェクション用のベクターを簡単に提供できます。

0
Tim X