2

私は、システムがmysqlインジェクションに対して安全でないことを顧客に指摘しようとしています。ユーザーの完全なリスト(* from ..を選択)を表示するか、システムに新しいユーザー/管理者を挿入して、後でログインできるようにする証拠が欲しいのですが。

これは、私が構築するシステムを単純化したものです。

PHPログインサイト:

$user = $_POST["user"];
$pwd = $_POST["pwd"];

$query1 = "INSERT INTO user_log (username, password,ip) VALUES ('$user','$pwd','127.1.1.1')";

$result1 = mysql_query($query1) or die("Query failed: "  . mysql_error());

$query2 = "select * from login where name = '$user' and pass = '$pwd' limit 1";

$result2 = mysql_query($query2) or die("Query failed: "  . mysql_error());

mysqlテーブルは次のようなものです。

CREATE TABLE `user_log` (
  `idadmin` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(45) DEFAULT NULL,
  `password` varchar(45) DEFAULT NULL,
  `ip` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idadmin`)
)

CREATE TABLE `login` (
  `idlogin` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `pass` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idlogin`)
)

完全に安全ではないことがわかりますが、これを注入するのは非常に難しいと思います。

  1. 私が最初に試したのはINSERTクエリに挿入することでしたが、user_logテーブルにスパムを送信する以外に、適切な結果を得るのは困難でした。
  2. 最初のquery1を通過し、代わりにquery2に挿入されたクエリを作成しようとしました。しかし、これは引用のために非常に複雑でした。

この特定のコンテキストで注入を行うためのアイデアや他の種類のテクニックはありますか?

4

3 に答える 3

4

システムが安全でないことを証明するために、すべてのユーザーレコードを表示できることを証明する必要はありません。

コードがの下で実行されている場合、他のあらゆる種類の問題が発生しますmagic_quotes_gpcが、それでもかなり安全であるはずです。magic_quotes_gpc

で実行していない場合は、提供されているパスワードに関係なく、magic_quotes_gpcユーザー名でログインできるはずです。' or true; --

于 2012-05-27T15:56:52.833 に答える
1

SQLインジェクションを忘れてください。システムは、ハッシュされていない/塩漬けされていないパスワードをログインテーブルとログテーブルに保存しているという事実だけに基づいて、安全ではないと見なすことができます。

If someone were to hack into your database, or discover the appropriate SQL injection required to dump some or all of the data, the hacker would have access to all passwords any user ever attempted to use to login to the website.

Just think of the security implications. If you randomly browsed to this website, forgot what password you used, and then tried all of your common password variations, this database would retain every last one of them.

Chills. It gives me chills to think code like this is out there.

于 2012-05-27T16:47:34.740 に答える
0

お客様がバージョン5.4.0より前の古いバージョンのPHPを使用していて、mysql_quotes_gpcがオンになっている場合、これは安全です。

ユーザー入力を介して任意のタイプのSQLを実行できる場合、それは安全ではなく、醜いです!効果的な攻撃の正確なタイプを把握できるかどうかは問題ではありません。ハッカーが望むものを手に入れるための創造的な方法はたくさんあります。

時間ベースのSQLインジェクションは、挿入クエリで実行できます。選択クエリが実行されたかどうかは関係ありません。

SQLインジェクションでは、mysqlユーザーに権限がある場合、攻撃者がファイルを作成できる可能性があります。SELECT load_file('/ etc / passwd')INTO OUTFILE'/some/path/to/web/root/here.php'

于 2012-05-27T16:02:32.110 に答える