ネットワークセキュリティの新人learning-sqlの脆弱性(5)

今日は、mysqlワイドバイトバイパスインジェクションについて説明します。古いルールです。まず、それを使用する状況を理解しましょう。
mysqlにはマジッククォーテーションマークと呼ばれるスイッチがあり、phpstudyはphp設定でmagic_quotes_gpcと呼ばれます(addslashes()と同じ機能があります。つまり、addslashes()はワイドバイトを使用してインジェクションをバイパスできます):
ここに画像の説明を挿入
マジッククォーテーションマークは受け入れられる一重引用符、二重引用符、円記号、およびNULLの前に円記号を追加してエスケープします。
(この記事を参照できます:https://www.cnblogs.com/huyihao/p/6217801.html)
インジェクションにどのような影響がありますか?例(以下を参照):
ここに画像の説明を挿入
したがって、これは注入に大きく影響します。
2つの小さな実験を行って、影響がどの程度かを見てみましょう。最初の実験はこの文です:

http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' and 1=1--+

開封前と開封後の違いを見てみましょう。
開く前:開いた後
ここに画像の説明を挿入
ここに画像の説明を挿入
ブラウザーから返された結果が2回同じであることがわかりました。前に言ったことが間違っているのでしょうか?実はそうではないので、もう一度分析してみましょう(図に示すように):ここに画像の説明を挿入
これは少し馴染みのあるものだと思いますか?「ネットワークセキュリティの新人学習の脆弱性-SQL(1)」でこのことについて話しました。(図に示すように、影響がない場合は、戻ってめくることができ、リンクを開いて学習することができます)ここでのここに画像の説明を挿入
同じ原理は、$ sql = "SELECT * FROM users WHERE id = '2' LIMIT 0,1"を実行することと同じです;
可能少しめまいがする生徒もいるので、これまでと同じように理解できます。スイカと書いても:

`$sql=SELECT * FROM users WHERE id=2西瓜’ LIMIT 0,1;`

只要是字符串,它还是等于$sql=“SELECT * FROM users WHERE id=‘2’ LIMIT 0,1”
(另外提一点,这也是检验是否是注入点的一种方法:加一堆无用字符,网页回显正常证明不是注入点。)
其实我们想对我们之前讲的进行验证可以用echo函数,具体步骤如下(echo函数是用来回显的,可以简单的理解成C语言中的printf、python中的print之类)
1.打开网站根目录
ここに画像の説明を挿入
2.进入sqli-labs-master中的Less-1文件夹ここに画像の説明を挿入
3.打开index.php,并在如下图的地方添加一句echo $sql;(我是用EditPlus打开的,记事本也可以打开)
ここに画像の説明を挿入
好了我们这回再访问http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=2' and 1=1--+就可以看到我们到底执行了什么语句。来,我们来看一下。
开启前:ここに画像の説明を挿入
开启后:ここに画像の説明を挿入
顺便再看看西瓜:
ここに画像の説明を挿入
第一个实验完成,我们来进行第二个实验,这个实验目的是看看它的影响。(毕竟前面的看不出来)我们访问的地址是:http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2' union select 1,database(),3--+
开启前:ここに画像の説明を挿入
开启后:ここに画像の説明を挿入
现在我们就很明显看得出影响了。
好了,讲完了魔术引号的原理现在开始讲宽字节绕过注入的原理和使用。
其实讲了魔术引号,这个的原理大家猜都猜得出来。说简单点魔术引号会加\,那我们就想办法让它加的\没用就行了。宽字节绕过注入就是用一个两个字节的东西覆盖掉后面的\,看一下下面这张图就可以很容易理解。(这样理解好理解,但跟准确的说法是MySQL在使用GBK编码的时候,会认为两个字符是一个汉字。当然有个前提条件前一个ASCII码要大于128,才到汉字的范围)ここに画像の説明を挿入
我们一般是用%df来进行宽字节注。例如:
http://127.0.0.1/sqli-labs-master/Less-1/index.php?id=-2%df%27%20union%20select%201,database(),3--+ここに画像の説明を挿入

注:ワイドバイトの最初のレベルを使用する場合、mysql_query( "SET NAMES gbk");の文を追加する必要があります。追加しない場合、phpstudyポートの一般設定をGBKエンコーディングに変更することを恐れていても、デフォルトでutf8になります。(インターネットで多くの記事を見つけましたが、これについては触れませんでした。他の人にも知ってもらいました)
具体的な変更手順は次のとおりです
。1. Webサイトのルートディレクトリを開き
ここに画像の説明を挿入
ます。2. sqli-labs-masterにLess-1ファイルを入力します。フォルダー
ここに画像の説明を挿入
3. index.phpを開き、文mysql_query( "SET NAMES gbk");を追加します。
ここに画像の説明を挿入

PHPが4を超えると、magic_quotes_gpcは使用されなくなりますが、addslashes()は引き続き存在します。
(追記:みんなにコメントして注意を払うようお願いします)

おすすめ

転載: blog.csdn.net/gqzszzy/article/details/108208663