Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
|
ctf_thc_toulouse_hacking_convention [2018/04/09 23:50] M0N5T3R |
ctf_thc_toulouse_hacking_convention [2018/04/10 00:03] (Version actuelle) M0N5T3R |
||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | |||
| * web 1 (202pts) : le writeup de BFF ici : https://github.com/Beers4Flags/writeups/tree/master/2018/Thcon/Web/200 | * web 1 (202pts) : le writeup de BFF ici : https://github.com/Beers4Flags/writeups/tree/master/2018/Thcon/Web/200 | ||
| Ligne 23: | Ligne 24: | ||
| * le répo pour récupérer les sources | * le répo pour récupérer les sources | ||
| * Config.py | * Config.py | ||
| - | URL = 'https://vault:8200' | ||
| - | CERT = './cert/client.crt' | ||
| - | KEY = './cert/client.key' | ||
| - | CA = './cert/vault_ca.crt' | ||
| - | * code_check.py | ||
| - | from flask import Flask, request, render_template | ||
| - | import hvac | ||
| - | app = Flask(__name__) | + | 'https://vault:8200' |
| - | app.config.from_object('config') | + | CERT = './cert/client.crt' |
| - | vault = hvac.Client(url=app.config['URL'], cert=(app.config['CERT'], app.config['KEY']), verify=app.config['CA']) | + | KEY = './cert/client.key' |
| + | CA = './cert/vault_ca.crt' | ||
| + | * code_check.py | ||
| - | # @app.route('/') | + | from flask import Flask, request, render_template |
| - | def get_index(): | + | import hvac |
| - | return app.send_static_file('index.html') | + | app = Flask(__name__) |
| + | app.config.from_object('config') | ||
| + | vault = hvac.Client(url=app.config['URL'], cert=(app.config['CERT'], app.config['KEY']), verify=app.config['CA']) | ||
| + | # @app.route('/') | ||
| + | def get_index(): | ||
| + | return app.send_static_file('index.html') | ||
| + | # @app.route('/code_check', methods=['POST']) | ||
| + | def check_code(): | ||
| + | user_code = "code" #request.form.get('code') | ||
| + | vault.auth_tls() | ||
| + | value = vault.read('secret/auth') | ||
| + | if value is not None and user_code is not None: | ||
| + | if str(value['data']['code']) == str(user_code): | ||
| + | value = vault.read('secret/vulnerability') | ||
| + | if value is not None: | ||
| + | return render_template('success.html', content=value['data']['vuln']), 200, {'ContentType': 'text/html'} | ||
| + | return app.send_static_file('error.html'), 401, {'ContentType': 'text/html'} | ||
| + | if __name__ == '__main__': | ||
| + | check_code() | ||
| - | |||
| - | # @app.route('/code_check', methods=['POST']) | ||
| - | def check_code(): | ||
| - | user_code = "code" #request.form.get('code') | ||
| - | vault.auth_tls() | ||
| - | value = vault.read('secret/auth') | ||
| - | |||
| - | if value is not None and user_code is not None: | ||
| - | if str(value['data']['code']) == str(user_code): | ||
| - | value = vault.read('secret/vulnerability') | ||
| - | if value is not None: | ||
| - | return render_template('success.html', content=value['data']['vuln']), 200, {'ContentType': 'text/html'} | ||
| - | return app.send_static_file('error.html'), 401, {'ContentType': 'text/html'} | ||
| - | |||
| - | |||
| - | if __name__ == '__main__': | ||
| - | check_code() | ||
| * Il s'agit donc d'un formulaire d'authentification en python utilisant vault | * Il s'agit donc d'un formulaire d'authentification en python utilisant vault | ||
| * Les logs du git nous apprennent qu'une ancienne version a existé sous mysql. Et au passage on récupère les credentials mysql dans les sources. | * Les logs du git nous apprennent qu'une ancienne version a existé sous mysql. Et au passage on récupère les credentials mysql dans les sources. | ||
| * Test du 3306, puis Nmap pour trouver un mysql open sur un autre port, et au final dirb nous a trouvé un folder phpMyAdmin | * Test du 3306, puis Nmap pour trouver un mysql open sur un autre port, et au final dirb nous a trouvé un folder phpMyAdmin | ||
| - | * Connection au phpMyAdmin et à partir de là on récupère les fichiers sur le serveur via un | + | * Connection au phpMyAdmin et à partir de là on récupère les fichiers sur le serveur via un |
| - | select LOAD_FILE('/etc/passwd') | + | select LOAD_FILE('/etc/passwd') |
| * /etc/nginx/nginx.conf pour trouver le full path web | * /etc/nginx/nginx.conf pour trouver le full path web | ||
| * récupération du contenu du dossier cert/ afin de récup la clé, le certificat et l'autorité de certification | * récupération du contenu du dossier cert/ afin de récup la clé, le certificat et l'autorité de certification | ||