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 |