2016-08-07 7 views
-1

以下の例はsqli-labからのものです。 MySQLの文書(comment)では、 " - "(二重ダッシュとそれに続く少なくとも一つの空白)は、行のコメントを意味します。それは実際にはいくつかの状況で機能します。この場合、なぜmysqlのコメントスタイルが機能するのでしょうか?

私の質問は、ここではどのように 'users'テーブルのすべてのレコードを一覧表示できるのか、ここではどのように動作するのですか。その仕組みについていくつかアイデアを教えてください。どうも!

mysql> select username, password from users where username = '' --+ ''; 
+----------+------------+ 
| username | password | 
+----------+------------+ 
| Dumb  | Dumb  | 
| Angelina | I-kill-you | 
| Dummy | [email protected] | 
| secure | crappy  | 
| stupid | stupidity | 
| superman | genious | 
| batman | mob!le  | 
| admin | admin  | 
| admin1 | admin1  | 
| admin2 | admin2  | 
| admin3 | admin3  | 
| dhakkan | dumbo  | 
| admin4 | admin4  | 
+----------+------------+ 
+0

「それは実際にいくつかの状況では動作しません。」これを明確にすることはできますか?これはうまくいきません。いつうまくいきませんか? – FrankerZ

+0

@FrankerZはあなたが試してみると本当にはっきりしています。 - +すべての行を返します。(奇妙な動作のようですが) - +はコメントシーケンスではありません – scaisEdge

+0

あなたの質問の可能な説明を投稿しました – scaisEdge

答えて

0

が実際に@scaisEdgeは右である、「 - +」MySQLの(対話型コマンドラインパラメータ)では、この使用量は通常、URLエンコード(「に符号化することができるクエリ部分のスペースのために使用されているコメントはありません+ 'または'%20 ')。

この場合、 '- +'は、&マイナス、1つの+オフセットの2種類の演算子です。したがって、このシーケンスは次のようになります。

select username, password from users where username = '' - ''; 

Original: 
mysql> select username, password from users where username = '' --+ ''; 
+----------+------------+ 
| username | password | 
+----------+------------+ 
| Dumb  | Dumb  | 
| Angelina | I-kill-you | 
| Dummy | [email protected] | 
| secure | crappy  | 
... 

Now: 
mysql> select username, password from users where username = '' - ''; 
+----------+------------+ 
| username | password | 
+----------+------------+ 
| Dumb  | Dumb  | 
| Angelina | I-kill-you | 
| Dummy | [email protected] | 
| secure | crappy  | 
... 

結果は同じです。

第2に、''と同じ整数0ここに。有効な整数なしのMySQL、任意のフィールドに は0

mysql> select '' = 0; 
+--------+ 
| '' = 0 | 
+--------+ 
|  1 | 
+--------+ 

mysql> select '0s28' = 0; 
+------------+ 
| '0s28' = 0 | 
+------------+ 
|   1 | 
+------------+ 

mysql> select '8s28' = 0; 
+------------+ 
| '8s28' = 0 | 
+------------+ 
|   0 | 
+------------+ 

mysql> select '8s28' = 8; 
+------------+ 
| '8s28' = 8 | 
+------------+ 
|   1 | 
+------------+ 

====Type Conversion==== 

mysql> select '12s' + 3; 
+-----------+ 
| '12s' + 3 | 
+-----------+ 
|  15 | 
+-----------+ 

mysql> select 's52s6' + 3; 
+-------------+ 
| 's52s6' + 3 | 
+-------------+ 
|   3 | 
+-------------+ 

mysql> select 's8' + 3; 
+----------+ 
| 's8' + 3 | 
+----------+ 
|  3 | 
+----------+ 

にそう'を同一視します' - ' - 0まだは'は0を意味します。

列USERNAMEは

mysql> select 'Dumb' = 0; 
+------------+ 
| 'Dumb' = 0 | 
+------------+ 
|   1 | 
+------------+ 
「ユーザ名= 0
」を有効数字(0ではない)で始まり、その0すべての名前等しいとconditonに一致する一つの名前を持っているわけではありませんが

この結論を確認するために、ユーザー名が '4love'のような整数で始まるレコードを挿入できます。新しいレコード以外のレコードがすべて表示されます。

同様の質問はここにある: mySQL returns all rows when field=0

関連する問題