2012-01-29 7 views
10

私は、SQLインジェクションでハッキングされたサイトで作業しています(一見すると、dbエントリのみがクロスサイトスクリプティングで壊れています)。コードを見て見つけた潜在的な脆弱性は、入力がエスケープされないmysql_query呼び出しがたくさんあります。SQLインジェクションによるmysql_query

古き良き:

$query = "SELECT * FROM mytable where name LIKE '%".$_GET['name']."%'"; /*HACK HERE*/ 
mysql_query($query, $connection); 

それでも私たちはそのインジェクションの脆弱性(クールで、私はINSERTまたはUPDATEのようなものを意味する)からクールな何かを行うことができますどのように見つけることができません。私はこのような声明を作成しようとしました:

SELECT * FROM mytable where name LIKE '%' AND WHERE id IN (INSERT INTO secondtable (id,description) VALUES (15, 'Fifteenth description');--%' 

いいえいいえ。私はINSERTには何もしていないと思います。

私は現在、コード内のすべてのユーザーの入力をエスケープしていますが、ハッカーがこのサイトにどのように侵入したかは実際にはわかりません。素晴らしい提案はありますか?任意のPHPがしたので、今

おかげ

+1

私はこのサイトがこれを行う方法を尋ねる適切な場所ではないと思います:) – Mike

+0

基本文字列と連結したときに 'name'が有効なsqlを形成していることを確認してください。 – EBarr

+0

攻撃者は別のテーブルに簡単に 'JOIN' /' UNION'して、管理者のログイン認証情報を得ることができます。昇給された特権で、彼はもっと悪いことをすることができました。サーバ上で任意のコマンドを実行するためにPHPシェルをアップロードする – knittl

答えて

-3
$query = "SELECT * FROM mytable where name LIKE '%".$_GET['name']."%'"; 

$_GET['name']="'; DROP TABLE mytable; -- "; 

ので

$query = "SELECT * FROM mytable where name LIKE '%'; DROP TABLE mytable; -- %'"; 
+0

これは間違っているのはなぜですか? –

+1

ええ、下のコメントを見てください。xbonezの回答 – joni

+0

mysql_queryはクエリーを1回だけ受け取りますが、お礼は – AsTeR

0

は、それはしばらくしているが、一般的にほとんどのデータアクセスLIBSは、リスクを軽減するためにパラメータ化されたSQLのいくつかの並べ替えを持っています。素早くGoogleがPHPのためにこれを思いついた: http://php.net/manual/en/pdo.prepared-statements.php

もう1人のポスターはすでにSQLインジェクションを行う方法を説明していますので、私はそれに着手しません。

+0

"私は自分の修正が仕事をすることを100%保証していません。 - 私は別の修正を提案した – Daniel

+0

この修正と同じ性質のものが使用されています。 opは異なる性質を求めた。あなたはちょうど質問 –

+0

IMOを理解していないそれは試してテストされたlibとホームロールソリューションの間に大きな違いです – Daniel

1

考えられるシナリオ1
弱いパスワード/ハッシュにより、攻撃者は管理者のパスワードを選択できます。
すべての管理者パスワードを変更することをお勧めします。

+0

直接INSERTまたはUPDATEを行う方法はありませんか? – AsTeR

+2

私の知る限り - いいえ。 –

2

mysql_queryは複数のクエリをサポートしていないため、'; DROP TABLE mytable; --のような注入は成功しません。

しかし、攻撃者は他のselectステートメントと組み合わせて、パスワード情報などの他の情報を選択することができます。

0

私は、ハッカーが簡単にクエリを変更できることを確信しています。 mysql_query()が複数のクエリをサポートしていなくても、それを回避する方法があります。最後に追加されたmysqlのIF文を使うだけで、まったく新しいクエリが実行されます。

+0

あなたの努力に感謝します、質問は "方法は何ですか"ではなく、 "方法があります"。 –

関連する問題