文章目錄
- 前言
- WP
- CVE-2018-12613
前言
在request請求當中就會被url解碼一次,這就是接下來為什麼會需要兩次編碼繞過
WP
打開靶機看到一個滑稽圖檔,審查元素發現有個
source.php
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SO3cTO2ATNkVWN1czMlhTNzYzXxIjNzUTM2IzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
通路發現需要我們進行代碼審計,下面對代碼進行分析
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//聲明一個白名單數組
if (! isset($page) || !is_string($page)) {//若$page變量不存在或page中值非字元串
echo "you can't see it";
return false;//傳回false
}
if (in_array($page, $whitelist)) {//若$page變量存在于$whitelist數組中
return true;//傳回true(我們後面會對其進行繞過)
}
$_page = mb_substr(//該代碼表示要截取$page中'?'前部分,若無則截取整個$page
$page,
0,
mb_strpos($page.'?', '?')
);
if (in_array($_page, $whitelist)) {
return true;//傳回true(我們後面會對其進行繞過)
}
$_page = urldecode($page);//url解碼$page
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;//傳回true(這裡必須傳回了,不然就是false)
}
echo "you can't see it";
return false;
}
}
若以上四個if語句均未傳回值,則傳回false
再看最下面的執行,要求一個if語句要求傳入的file變量:
- 非空
- 類型為字元串
- 能夠通過checkFile()函數校驗
- 同時滿足以上三個要求即可包含file中的檔案,否則列印滑稽表情