SlideShare a Scribd company logo
NEBULA LEVEL 14
Prof.ssa Barbara Masucci - Studenti: Emanuele Gargiulo | Giovanni Danese
U n i v e r s i t à d e g l i S t u d i d i S a l e r n o | P r o g r a m m a z i o n e s i c u r a | A . A . 2 0 1 9 / 2 0
NEBULA
LEVEL
14
«This program resides in /home/flag14/flag14. It encrypts input and
writes it to standard output. An encrypted token file is also in that
home directory, decrypt it.» [exploit.education]
• level14 level14
•
INTRODUZIONE ALLA SFIDA
2
NEBULA
LEVEL
14
3
NEBULA
LEVEL
14 OBIETTIVI DELLA SFIDA
flag14
4
NEBULA
LEVEL
14 COMINCIAMO LA SFIDA
5
level14
•
•
NEBULA
LEVEL
14 COSTRUZIONE DELL’ALBERO DI ATTACCO
6
NEBULA
LEVEL
14 RICHIESTA PASSWORD
flag14
7
NEBULA
LEVEL
14 ROTTURA PASSWORD
8
NEBULA
LEVEL
14 AGGIORNAMENTO ALBERO DI ATTACCO 1
I I
9
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA
flag14
•
•
flag14
•
•
10
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA
11
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA
•
•
ls -la /home/flag/flag14
 flag14 flag14
level14
 SETUID
12
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA
ls -la /home/flag/token
 level14
13
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA
token
14
• cat token
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA
flag14
•
15
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA
./flag14
16
-e
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA
flag14 token
17
• ./flag14
• token
flag14
NEBULA
LEVEL
14 AGGIORNAMENTO ALBERO DI ATTACCO 2
18
I I
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA
19
NEBULA
LEVEL
14 AGGIORNAMENTO ALBERO DI ATTACCO 3
20
I
I I
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA 2
21
flag14
•
ciaociao
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA 2
22
ciaoatutti
precedente nuovo
•
•
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA 2
1234567
23
posizione 0 1 2 3 4 5 6
NEBULA
LEVEL
14 STRATEGIA ALTERNATIVA 2
24
UNICODE CHAR
54 6
55 7
56 8
57 9
58 :
59 ;
60 <
61 =
62 >
posizione 0 1 2 3 4 5
UNICODE TABLE
5 6
6
NEBULA
LEVEL
14 APPROCCIO ALLA SFIDA
25
•
• token
flag14
token
NEBULA
LEVEL
14 AGGIORNAMENTO ALBERO DI ATTACCO 4
26
I I
I
P
P
P
P
P
P
NEBULA
LEVEL
14 APPROCCIO ALLA SFIDA
27
•
•
NEBULA
LEVEL
14 SCRIPT PER L’INVERSIONE DEL CIFRARIO
python --version
28
NEBULA
LEVEL
14
29
SCRIPT PER L’INVERSIONE DEL CIFRARIO
NEBULA
LEVEL
14
30
SCRITTURA DI UNO SCRIPT PER L’INVERSIONE DEL CIFRARIO
Sfruttando le conoscenze acquisite sul cifrario, si sottrae dal
codice UNICODE di ciascun carattere del token la sua posizione
all’interno della stringa.
Il risultante codice UNICODE viene poi riconvertito nel carattere
in chiaro.
NEBULA
LEVEL
14
31
SCRITTURA DI UNO SCRIPT PER L’INVERSIONE DEL CIFRARIO
NEBULA
LEVEL
14
32
SCRITTURA DI UNO SCRIPT PER L’INVERSIONE DEL CIFRARIO
len(token)
La funzione len prende in input una stringa e ne restituisce la
lunghezza.
Otteniamo così la lunghezza del token.
NEBULA
LEVEL
14
33
SCRITTURA DI UNO SCRIPT PER L’INVERSIONE DEL CIFRARIO
token.find(letter,counter,len(token))
La funzione find, eseguita su una stringa, cerca il primo
argomento tra le posizioni della stringa indicate dagli indici
nel secondo e terzo argomento, e ce ne restituisce la posizione.
Siccome la posizione restituita è quella della prima occorrenza
di letter, è necessario che ad ogni iterazione il contatore sia
incrementato per escludere dal campo di ricerca la parte di
stringa già considerata
NEBULA
LEVEL
14
34
SCRITTURA DI UNO SCRIPT PER L’INVERSIONE DEL CIFRARIO
token.find(‘a’,counter,len(token))
a b a c b …
token.find(‘a’,counter,len(token)) = 0
counter = 0
0 1 2 3 4 n
NEBULA
LEVEL
14
35
SCRITTURA DI UNO SCRIPT PER L’INVERSIONE DEL CIFRARIO
a b a c b …
token.find(‘a’,counter,len(token)) = 2
counter = 1
0 1 2 3 4 n
NEBULA
LEVEL
14
36
SCRITTURA DI UNO SCRIPT PER L’INVERSIONE DEL CIFRARIO
ord(letter)-token.find(letter,counter,len(token))
La funzione ord restituisce il numero intero che corrisponde al
codice UNICODE del carattere ad essa passato.
Da questo intero viene sottratta la posizione del carattere
all’interno della stringa
NEBULA
LEVEL
14
37
SCRITTURA DI UNO SCRIPT PER L’INVERSIONE DEL CIFRARIO
unichr(ord(letter)-token.find(letter,counter,len(token)))
La funzione unichr restituisce il carattere UNICODE relativo
all’intero ad essa passato.
NEBULA
LEVEL
14
38
SCRITTURA DI UNO SCRIPT PER L’INVERSIONE DEL CIFRARIO
returnpassword+=unichr(ord(letter)-token.find(letter,counter,len(token)))
Il carattere calcolato dall’insieme delle funzioni precedenti,
che altro non è che la ‘decodifica’ di un carattere del token,
viene concatenato alla stringa che al termine dello script
conterrà la password
NEBULA
LEVEL
14
39
INVERSIONE DEL TOKEN
8457c118-887c-4e40-a5a6-33a25353165
Il token invertito è la nostra potenziale password per
l’accesso all’account flag14
NEBULA
LEVEL
14
40
SFRUTTAMENTO DELLA PASSWORD
OTTENUTA
flag14 getflag
NEBULA
LEVEL
14
41
SFIDA VINTA!
NEBULA
LEVEL
14 ALBERO DI ATTACCO FINALE
42
I I
I
P
P
P
P
P
P
NEBULA
LEVEL
14 LE VULNERABILITÀ IN LEVEL 14
43
token
flag14
flag14
SETUID
NEBULA
LEVEL
14 MITIGAZIONI PER LEVEL 14
44
token
flag14
flag14
SETUID
SETUID
flag14
SETUID
SETUID
SETUID
45

More Related Content

What's hot

LR parsing
LR parsingLR parsing
LR parsing
ichikaz3
 
ガイデットフィルタとその周辺
ガイデットフィルタとその周辺ガイデットフィルタとその周辺
ガイデットフィルタとその周辺Norishige Fukushima
 
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
Kentaro Ebisawa
 
Slab Allocator in Linux Kernel
Slab Allocator in Linux KernelSlab Allocator in Linux Kernel
Slab Allocator in Linux Kernel
Adrian Huang
 
超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby Programming
超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby Programming超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby Programming
超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby Programmingmametter
 
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
智啓 出川
 
ウェビナー:Nejumiリーダーボードを使った自社LLMモデルの独自評価.pdf
ウェビナー:Nejumiリーダーボードを使った自社LLMモデルの独自評価.pdfウェビナー:Nejumiリーダーボードを使った自社LLMモデルの独自評価.pdf
ウェビナー:Nejumiリーダーボードを使った自社LLMモデルの独自評価.pdf
Yuya Yamamoto
 
Embedded Recipes 2018 - Yoctoception: Containers in the embedded world - Jéré...
Embedded Recipes 2018 - Yoctoception: Containers in the embedded world - Jéré...Embedded Recipes 2018 - Yoctoception: Containers in the embedded world - Jéré...
Embedded Recipes 2018 - Yoctoception: Containers in the embedded world - Jéré...
Anne Nicolas
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
Preferred Networks
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutinemelpon
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた
Kohei Tokunaga
 
ctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリングctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリング
junk_coken
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
Takuya ASADA
 
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
Yoshifumi Kawai
 
2022のShowNetに向けて_ShowNet2021_conf_mini_5_2022_stm
2022のShowNetに向けて_ShowNet2021_conf_mini_5_2022_stm2022のShowNetに向けて_ShowNet2021_conf_mini_5_2022_stm
2022のShowNetに向けて_ShowNet2021_conf_mini_5_2022_stm
Interop Tokyo ShowNet NOC Team
 
ウェーブレットと多重解像度処理
ウェーブレットと多重解像度処理ウェーブレットと多重解像度処理
ウェーブレットと多重解像度処理
h_okkah
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
Mariem ZAOUALI
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
mametter
 
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
Narimichi Takamura
 
Nmapの真実(続)
Nmapの真実(続)Nmapの真実(続)
Nmapの真実(続)
abend_cve_9999_0001
 

What's hot (20)

LR parsing
LR parsingLR parsing
LR parsing
 
ガイデットフィルタとその周辺
ガイデットフィルタとその周辺ガイデットフィルタとその周辺
ガイデットフィルタとその周辺
 
20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)20111015 勉強会 (PCIe / SR-IOV)
20111015 勉強会 (PCIe / SR-IOV)
 
Slab Allocator in Linux Kernel
Slab Allocator in Linux KernelSlab Allocator in Linux Kernel
Slab Allocator in Linux Kernel
 
超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby Programming
超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby Programming超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby Programming
超絶技巧 Ruby プログラミング - Esoteric, Obfuscated Ruby Programming
 
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
2015年度GPGPU実践プログラミング 第8回 総和計算(高度な最適化)
 
ウェビナー:Nejumiリーダーボードを使った自社LLMモデルの独自評価.pdf
ウェビナー:Nejumiリーダーボードを使った自社LLMモデルの独自評価.pdfウェビナー:Nejumiリーダーボードを使った自社LLMモデルの独自評価.pdf
ウェビナー:Nejumiリーダーボードを使った自社LLMモデルの独自評価.pdf
 
Embedded Recipes 2018 - Yoctoception: Containers in the embedded world - Jéré...
Embedded Recipes 2018 - Yoctoception: Containers in the embedded world - Jéré...Embedded Recipes 2018 - Yoctoception: Containers in the embedded world - Jéré...
Embedded Recipes 2018 - Yoctoception: Containers in the embedded world - Jéré...
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
Boost.Coroutine
Boost.CoroutineBoost.Coroutine
Boost.Coroutine
 
今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた今話題のいろいろなコンテナランタイムを比較してみた
今話題のいろいろなコンテナランタイムを比較してみた
 
ctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリングctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリング
 
10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化10GbE時代のネットワークI/O高速化
10GbE時代のネットワークI/O高速化
 
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
 
2022のShowNetに向けて_ShowNet2021_conf_mini_5_2022_stm
2022のShowNetに向けて_ShowNet2021_conf_mini_5_2022_stm2022のShowNetに向けて_ShowNet2021_conf_mini_5_2022_stm
2022のShowNetに向けて_ShowNet2021_conf_mini_5_2022_stm
 
ウェーブレットと多重解像度処理
ウェーブレットと多重解像度処理ウェーブレットと多重解像度処理
ウェーブレットと多重解像度処理
 
Chap7 simulation numérique
Chap7 simulation numériqueChap7 simulation numérique
Chap7 simulation numérique
 
Quine・難解プログラミングについて
Quine・難解プログラミングについてQuine・難解プログラミングについて
Quine・難解プログラミングについて
 
その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?その ionice、ほんとに効いてますか?
その ionice、ほんとに効いてますか?
 
Nmapの真実(続)
Nmapの真実(続)Nmapの真実(続)
Nmapの真実(続)
 

Nebula, Level 14