phpMyAdmin 儲存 SESSION 後,在後續處理變量時並未做適當處理,造成可注入任意代碼。
在 libraries/auth/swekey/swekey.auth.lib.php 中, session 中間有保存在服務端;接著在 setup/lib/ConfigGenerator.class.php 中, 其中這一句:
$ret .= '/*Server: ' . strtr($cf->getServerName($id), '*/', '-') . "[$id] */" . $crlf
雖然在 strtr($cf->getServerName($id), '*/', '-') 做了處理,防止中間有 */ 截斷,但後面的 [$id] 卻沒有做任何處理,進而導致可注入任意代碼。 在這邊, [$id] 其實是 $c['Server'] 的 key 值,變量 $c 則是返回值。
網路上有 PoC 這邊就不放出了, 主要就是在 SESSION 中安插這段 */eval()/* 。
更新即可 。
參考資料:http://packetstormsecurity.com/files/cve/CVE-2011-2505
這邊提供實際利用影片供大家參考: