discuz7.2 FAQ.PHP SQL注入脆弱性分析のバージョン、DISCUZ7.2FAQ.PHP
Injectコードの例:
rreeefirstアレイグループIDを定義します。次に、$gids (これも配列、つまり $_GET[gids]) を走査し、配列内のすべての値の最初のビットを取り出し、それを groupids に入れます。
なぜこの手術で注射が起こるのですか?
discuz は GET 配列に対して addlashes エスケープをグローバルに実行します。これは、' が ' にエスケープされることを意味します。そのため、受信パラメータが gids[1]=' の場合、$gids[1]=' にエスケープされます。 、代入ステートメント $groupids[] = $row[0] は、文字列の最初の文字を取得すること、つまりエスケープ記号を取り出すことと同等です。裏側を見ると、データを SQL ステートメントに入れる前に、implodeids で処理していました。 implodeids 関数
は非常に単純な関数であることがわかります。これは、$groupids 配列を ',' で分割し、'1'、'2'、'3'、'4' などの文字列を形成するものです。返してください。 しかし、私たちの配列はエスケープ文字を取り出したばかりで、ここでは次のように通常の ' をエスケープします:'1','','3','4'
少し違うものに気づきましたか?異なります。4 番目の一重引用符はエスケープされています。つまり、5 番目の一重引用符と 3 番目の一重引用符は閉じられています。