01Intro
Mitä ovat deserialisointihyökkäykset?
Keskitaso1H 30MIN
Mitä on sarjallistaminen?
Sarjallistamista (serialisointi) käytetään ohjelmoinnissa muuttamaan objekteja muotoon, jossa ne voidaan esimerkiksi tallentaa levylle tai siirtää verkon yli.
Tässä on esimerkki (serialisoi.py) jossa käytetään Python pickle-kirjastoa serialisoimaan auto.
PY
1import pickle
2from base64 import b64encode, b64decode
3
4class Auto(object):
5 def __init__(self, merkki: str, vuosimalli: int):
6 self.merkki = merkki
7 self.vuosimalli = vuosimalli
8
9 def __str__(self):
10 return f"{self.merkki} VM {self.vuosimalli}"
11
12auto = Auto(merkki='Volvo', vuosimalli=1975)
13
14print(auto)
15
16print(b64encode(pickle.dumps(auto)).decode('utf-8'))Kun skripti ajetaan, se tulostaa (base64-enkoodattuna) auton sarjallistettuna.
BASH
1python3 ./serialisoi.py
2Volvo VM 1975
3gASVPgAAAAAAAACMCF9fbWFpbl9flIwEQXV0b5STlCmBlH2UKIwGbWVya2tplIwFVm9sdm+UjAp2dW9zaW1hbGxplE23B3ViLg==Tässä on toinen ohjelma (deserialisoi.py), joka ottaa parametrina (base64-enkoodatun) serialisoidun auton, ja tulostaa sen tiedot.
PY
1import pickle
2from base64 import b64decode
3import sys
4
5class Auto(object):
6 def __init__(self, merkki: str, vuosimalli: int):
7 self.merkki = merkki
8 self.vuosimalli = vuosimalli
9
10 def __str__(self):
11 return f"{self.merkki} VM {self.vuosimalli}"
12
13serialisoitu = sys.argv[1]
14auto = pickle.loads(b64decode(serialisoitu))
15print(auto)BASH
1python3 deserialisoi.py gASVPgAAAAAAAACMCF9fbWFpbl9flIwEQXV0b5STlCmBlH2UKIwGbWVya2tplIwFVm9sdm+UjAp2dW9zaW1hbGxplE23B3ViLg==
2Volvo VM 1975Näin toimii sarjallistaminen. Muistissa olevasta objektista tallennettavaan/siirrettävään muotoon, ja takaisin.
1 / 10
Hakatemia Pro
Hakkeroinnin oppiminen alkaa tästä
Sadat interaktiiviset kurssit, virtuaalilabrat ja CTF-haasteet selaimessasi. Aloita ilmainen kokeilu ilman korttitietoja.