Outils d'utilisateurs

Outils du Site


ctf_thc_toulouse_hacking_convention

On a utilisé la même méthode en reversant le custom sha1 du script.

  • web 2 : une page web d’encyclopédie de cactus avec recherche. Personne n'a résolu ce chall durant le ctf. On l'a tourné dans tous les sens, mais pas moyen d'en sortir quoi que ce soit. C'était apparemment une sqli via un cookie encodé en b64 dont le contenu d'origine était ”.;.;.”. Mais on a beau avoir try hard ce cookie, se doutant bien qu'il y avait quelque chose rien n'est ressortit. En discutant avec d'autres team, plusieurs ont fait pareil sans succès. Bref, l'auteur du chall nous a dit qu'il diffuserait un write up, je suis curieux de la lire car ce cactus m'a fait mal au c..

Honnêtement, on avait tout sur ce chall, sauf que le répo git récupéré via gitTools était corrompu. Du coup pas moyen de pouvoir récupérer les fichiers. On a passé du temps a essayer de réparer le répo sans succès. Alors qu'au final on a apprit après que cela aurait dut fonctionner nickel. Bref leçon à retenir, des fois aller poser une question aux orgas, ça fait gagner du temps et des points :/

Le forensic 1 :

  • On arrive d'abord sur une page web toute simple avec pas grand chose à l'intérieur, juste un formulaire RESTRICTED ACCESS avec un champ à submit.

  • On découvre un répo .git (présence du fichier .git/HEAD)
  • Récupération du répo via gittools
  • git reset –hard
  • le répo pour récupérer les sources
  • Config.py
  '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__)
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()
  • 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.
  • 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

select LOAD_FILE('/etc/passwd')

  • /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
  • on modifie note fichier /etc/hosts pour ajouter la résolution DNS du domain vault afin de pouvoir résoudre l'url https://vault:8200
  • on lance le code en local pour pouvoir afficher la valeur de secret/auth et flaguer
ctf_thc_toulouse_hacking_convention.txt · Dernière modification: 2018/04/10 00:03 par M0N5T3R