Berkenalan Dengan Buffer Overflow

Definisi

Reverse Engineering adalah teknik hacker untuk mengetahui lajur dan cara kerja dari suatu program. Harapannya adalah hacker dapat mengetahui dan berharap mendapatkan flaw atau celah dari program yang dimaksud. Hal ini dilakukan dengan cara melihat source code pada program tersebut.
Pada tag “Reverse” ini SEMUAnya akan mendebug program binary executable yang dicompile dengan bahasa C. Hasil reverse dari binary tersebut pasti berupa assembly. Sehingga, mau tidak mau kamu harus punya basic di bahasa assembly.

Kenapa ini penting?

Semua local root exploit yang kamu pake adalah hasil exploitasi dan debugging pada binary kernel yg berjalan. Kamu mah tinggal compile terus pake doang hahaha.
Masak iya seumur hidup cuma mau ngerti cara make exploit aja. Tentu kamu juga mau tau bagaimana cara membuatnya, iya kan? Ga cuma itu, disini kamu akan hands-on membuat exploit kamu sendiri terhadap aplikasi yang akan dicoba.
Loh, kok mirip pentest?
EXACTLY, cuma kamu melakukan pentest terhadap aplikasi binary
Oh iya, tentu namanya proses reverse engineering memiliki banyak tujuan dan teknik. Khusus tag “Reverse” kebanyakan akan membahas bagaimana cara melakukan exploitasi dengan teknik Buffer Overflow. Exploitasi ditujukan untuk melakukan injeksi shell dan berharap bisa mendapatkan shell linux hasil eksploitasi kita pada program.

Apa itu Buffer?

Tanpa perlu banyak basa-basi, langsung aja deh gan ke materi pengenalan.
A buffer is simply a contiguous block of computer memory that holds multiple instances of the same data type.  C programmers normally associate with the word buffer arrays. Most commonly, character arrays.  Arrays, like all variables in C, can be 
declared either static or dynamic.  Static variables are allocated at load  time on the data segment.  Dynamic variables are allocated at run time on the stack. To overflow is to flow, or fill over the top, brims, or bounds.
Pokoknya perhatikan yang saya bold. Buffer adalah blok kontigu dari memori komputer yang berisikan data yang sejenis. Inti mudahnya seperti array pada bahasa C lah.
Sebelum lanjut, pastikan agan PERNAH menggunakan bahasa C. Kalau belum, silahkan dicoba dahulu
Terdapat 2 jenis variable yaitu statis dan dinamis. Statis selalu dialokasikan pada data segment, sedangkan dynamic dialokasikan pada stack
Tujuan utama Buffer Overflow adalah untuk melakukan penulisan ulang terhadap stack program yang ada. Sehingga memungkinkan kita untuk melakukan kontrol terhadap program yang sedang dijalankan. Salah satu contoh “kontrol” yang saya maksud adalah pemanggilan shell (/bin/sh) yang akan menjadi fokus utama tag “Reverse”

Process-Memory Organization

Namanya program yang sedang berjalan (yang kemudian disebut “proses”) itu berjalan pada memory dan memiliki 3 hal berikut
         /------------------\  lower
         |                  |  memory
         |       Text       |  addresses
         |                  |
         |------------------|
         |   (Initialized)  |
         |        Data      |
         |  (Uninitialized) |
         |------------------|
         |                  |
         | New Memory Cap   |
         |                  |   
         |------------------|
         |                  |
         |       Stack      |  higher
         |                  |  memory
         \------------------/  addresses
  1. 1. Text
    Bagian program yang bersifat read-only, berisi instruksi dan data statis milik program. Intinya bukan daerah ini yang akan kamu exploit
  2. 2. Data
    Terdapat 2 jenis data yaitu initialized dan uninitialized. Variabel static diletakkan pada bagian ini. Apabila saat menjalankan program, si user membutuhkan alokasi data yang lebih besar. Program akan dihentikan sementara dan akan dilakukan penjadwalan ulang terhadap program dengan tambahan alokasi memory yang terletak antara data dan stack
  3. 3. Stack
    Kamu pernah mendengar istilah ini sebelumnya? Apalagi buat kamu mahasiswa informatika PASTI pernah mendengar ini di kuliah semacam Algoritma & Struktur Data.
    Namanya Stack pada program ini memang memiliki cara kerja yang sama dengan stack yang kamu dengar pada kuliah. Seluruh instruksi akan dijalankan pada bagian ini. Inisialisasi alur dan pengambilan instruksi dilakukan dengan metode POP dan PUSH
Buat yang masih baru dengan “Stack”. Silahkan googling ya
Pokoknya, 2 rule untuk stack:
  1. 1. After a PUSH, Stack Pointerwill point to a lower memory address
  2. 2. After a POP, Stack Pointer will point to a higher memory address
Sehingga, setiap instruksi pasti memiliki address. Pada bahasa C, setiap instruksi atau line-of-code PASTI berada pada suatu subrutin. Minimal subrutin main(). Seperti contoh kode hello world dibawah
int main(){
       printf(“Hello World”);
       return 0;
}
Setiap subrutin juga berdiam menempati tempat yang bernama stack frame. Lokasi dari stack bisa terdapat pada register ESP dan lokasi dari base function/stack frame terdapat pada register EBP. Sekarang, kalau kamu mau lihat assembly dari program itu. Compile sebagai 32bit dan jalankan gdb seperti perintah dibawah
kucing$ gcc index.c -m32 -o index
kucing$ gdb index
(gdb) disas main
Dump of assembler code for function main:
   0x0804840b <+0>:     lea    0x4(%esp),%ecx
   0x0804840f <+4>:     and    $0xfffffff0,%esp
   0x08048412 <+7>:     pushl  -0x4(%ecx)
   0x08048415 <+10>:    push   %ebp
   0x08048416 <+11>:    mov    %esp,%ebp
   0x08048418 <+13>:    push   %ecx
   0x08048419 <+14>:    sub    $0x4,%esp
   0x0804841c <+17>:    sub    $0xc,%esp
   0x0804841f <+20>:    push   $0x80484c0
   0x08048424 <+25>:    call   0x80482e0 <printf@plt>
   0x08048429 <+30>:    add    $0x10,%esp
   0x0804842c <+33>:    mov    $0x0,%eax
   0x08048431 <+38>:    mov    -0x4(%ebp),%ecx
   0x08048434 <+41>:    leave  
   0x08048435 <+42>:    lea    -0x4(%ecx),%esp
   0x08048438 <+45>:    ret    
End of assembler dump.
(gdb)
Kamu lihat pada *main+10 bahwa register ebp dipush ke dalam stack. Lalu register ESP yang merupakan stack pointer yang berisikan alamat awal program diletakkan pada register EBP (*main +11). Dan pointer ESPlah yang selalu berubah-ubah hingga program/subrutin selesai.
Selanjutnya kita akan bicara register.

Registers

Setiap program yang berjalan PASTI memiliki sesuatu yang bernama register. Intinya adalah memori internal milik dari program tersebut. Digunakan untuk menyimpan variabel-variabel yang dibutuhkan
Mengapa program masih perlu namanya memori internal berupa register? Soalnya bayangin aja gan kalau si program harus bolak-balik kontak prosesor dan memory untuk meminta variabel yang sering dipake, belum termasuk datanya harus lewat bus dll. Nanti kan repot dan malah memperlambat kinerja dari program.
Kalau sudah punya memory storage internal. Jadinya si program tinggal akses langsung tanpa perlu melalui memori komputer lagi.
Namanya register itu pada dasarnya berisi kumpulan variabel, ini sangat bergantung pada mesin yang digunakan. Namun sebagai gambaran dasar, berikut adalah register yang digunakan pada mesin Intel x86 (32-bit)
  • - EAX : accumulator : used for performing calculations, and used to store return values from function calls. Basic operations such as add, subtract, compare use this general-purpose register
  • - EBX : base (does not have anything to do with base pointer). It has no general purpose and can be used to store data.
  • - ECX : counter : used for iterations. ECX counts downward.
  • - EDX : data : this is an extension of the EAX register. It allows for more complex calculations (multiply, divide) by allowing extra data to be stored to facilitate those calculations.
  • - ESP : stack pointer
  • - EBP : base pointer
  • - ESI : source index : holds location of input data
  • - EDI : destination index: points to location of where result of data operation is stored
  • - EIP : instruction pointer
Dan biasanya untuk yang 64-bit. Register yang depannya “E” itu menjadi “R”.
Sebagai contoh RAX, RBX, RCX, RDX, RSI, and RDI
Sebagai perbandingan lagi, address yang digunakan pada 32-bit adalah 4 byte (range 0x00000000 — 0xFFFFFFFF) dan untuk 64-bit adalah 8 byte (range 0x0000000000000000 — 0x00007FFFFFFFFFFF).

What’s next?

Saya rasa akan terlalu panjang kalau dilanjutkan ke percobaan buffer overflow. Untuk itulah, saya akan post di artikel selanjutnya. Langsung praktek bagaimana buffer overflow bekerja, termasuk juga didalamnya cara membuat exploit.

Referensi

Categories: ,

Pilihan Menu dalam COBOL

Disini saya akan membuat program menu pilihan menggunakan cobol. Saya hanya membuat 5 menu pilihan.

Berikut Listing kode yang saya buat :
IDENTIFICATION DIVISION.
PROGRAM-ID. GOTO1.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 JAWAB PIC X.
PROCEDURE DIVISION.
TANYAKAN.
DISPLAY ‘=====================’.
DISPLAY ‘1. MAKANAN PEMBUKA’.
DISPLAY ‘2. MAKANAN UTAMA’.
DISPLAY ‘3. MAKANAN PENUTUP’.
DISPLAY ‘4. MINUMAN’.
DISPLAY ‘5. EXIT’.
DISPLAY ‘=====================’.
DISPLAY ‘PILIH KATEGORI YANG KAMU INGINKAN ? ‘.
ACCEPT JAWAB.
SELEKSI.
IF JAWAB = ‘1’ GO TO MAKANP.
IF JAWAB = ‘2’ GO TO MAKANU.
IF JAWAB = ‘3’ GO TO MAKANPE.
IF JAWAB = ‘4’ GO TO MINUM.
IF JAWAB = ‘5’ GO TO SELESAI.
MAKANP.
DISPLAY ‘ ‘.
DISPLAY ‘-ROTI COKELAT’.
DISPLAY ‘-LEMPER’.
GO TO SELESAI.
MAKANU.
DISPLAY ‘ ‘.
DISPLAY ‘-NASI GORENG’.
DISPLAY ‘-AYAM BAKAR + NASI’.
DISPLAY ‘-SOTO AYAM + NASI’.
DISPLAY ‘-NASI PADANG’.
GO TO SELESAI.
MAKANPE.
DISPLAY ‘ ‘.
DISPLAY ‘-PUDING COKELAT’.
DISPLAY ‘-BUAH-BUAHAN’
GO TO SELESAI.
MINUM.
DISPLAY ‘ ‘.
DISPLAY ‘-AIR PUTIH’.
DISPLAY ‘-ES TEH MANIS’.
DISPLAY ‘-JUS’.
GO TO SELESAI.
SELESAI.
STOP RUN.
Outputt yang dihasilkan :
Pilihan menu cobol

Categories:

Logika Pembuktian

Soal1
Jika diketahui n adalah ganjil, maka n2  adalah .....
A. Ganjil
B. Genap
C. konstanta
D. A dan B benar
E. Tidak ada jawaban yang benar

Jawaban : A. Ganjil
Diketahui n adalah ganjil, artinya terdapat suatu bilangan bulat k sehingga
n = 2k + 1. Akan ditunjukkan bahwa n2 ganjil.
n2 = (2k + 1)2
     = 4k2 + 4k + 1
     = 2(2k2 + 2k) +1.
Perhatikan bahwa n2 = 2(2k2 + 2k) +1.Karena k adalah bilangan bulat, maka (2k2 + 2k) juga pasti bilangan bulat, sehingga n2 adalah ganjil.


Soal 2
Pernyataan berikut yang sesuai dengan metode pembuktian kontradiksi adalah…
A. Jika p benar maka q benar
B. Jika ~q benar maka ~p juga harus benar
C. Membuat permisalan jika p maka q adalah benar
D. Suatu pembuktian untuk pernyataan yang memuat bilangan asli
E. Tidak ada jawaban yang benar

Jawaban : A. Membuat Permisalan jika p maka q adalah benar
Kontradiksi ialah dua hal dimana kedua hal tersebut tidak boleh sama sama benar dalam waktu yang sama. Jadi, kita buat pemisalan jika p salah , q benar. Jika kita buat ke dalam operasi logika p maka q (p → q) maka hasil yang didapat adalah benar.


Soal 3
Yang manakah yang termasuk dalam metode  pembuktian tidak langsung…
A. Metode kontraposisi
B. Metode Disjungsi
C. Metode Equivalen
D. Metode Ingkarang
E. Metode Eliminasi

Jawaban : A. Metode kontraposisi
Karena metode kontraposisi termasuk metode pembuktian tidak langsung.


Soal 4
Bertikut ini adalah pernyataan yang benar mengenai prinsip induksi sederhana, kecuali.....
A. N ≥ 1 untuk bilangan bulat positif
B. P(1) bernilai benar
C. P(n+1) harus bernilai benar
D. N ≥ 1 untuk bilangan ganjil
E. P(n) harus bernilai benar

Jawaban : D. N ≥ 1 untuk bilangan ganjil
Karena, salah satu ciri dari induksi sederhana adalah N ≥ 1 untuk bilangan bulat positif, sementara pada pilihan D hanya untuk bilangann ganjil.


Soal 5
Apakah N3 + 2n adalah kelipatan 3 berlaku untuk n = 1 dan berlaku kelipatan 3 untuk setiap bilangan bulat postitif n (menggunakan induksi matematika)…?
A. ya dan ya
B. ya dan tidak
C. tidak dan bisa jadi
D. tidak dan tidak
E. tidak ada jawaban yang benar

Jawaban : A. Ya dan ya
q Basis untuk n = 1 akan diperoleh :
               13 + 2(1) = 3 yang merupakan kelipatan 3 (ya, berlaku n = 1)
q induksi (misalkan) untuk n = k asumsikan menjadi k3 + 2k = 3x
q adib untuk n = k + 1 berlaku :
               (k + 1)3 + 2(k + 1) adalah kelipatan 3
               (k3 + 3k2 + 3k+1) + 2k + 2
               (k3 + 2k) + (3k2 + 3k + 3)
               (k3 + 2k) + 3 (k2 + k + 1)
               induksi
               3x + 3 (k2 + k + 1)
               3 (x + k2 + k + 1)
Kesimpulan : N3 + 2n adalah kelipatan 3 untuk setiap bilangan bulat positif n (ya, berlaku kelipatan 3).


Soal 6
Terdapat implikasi : Jika 15 habis dibagi 3, maka 15 adalah bilangan ganjil. kemudian 15 habis dibagi 3. Kesimpulannya adalah...
A. 15 habis dibagi 3
B. 15 adalah bilangan ganjil
C. 3 adalah bilangan ganjil
D. 3 habis dibagi 3
E. tidak ada jawaban yang benar

Jawaban : B. 15 adalah bilangan ganjil
Jika 15 habis dibagi 3, maka 15 adalah bilangan ganjil         (p → q)
15 habis dibagi 3                                                                    (p        )
∴   15 adalah bilangan ganjil                                                 (         q)


Soal 7
misalkan p(n) benar untuk semua bilangan positif n ≥ 1 untuk bilangan 2 + 4 + 6 + ... + 2n = n(n + 1). p(n + 1) bernilai...
A. Benar
B. Salah
C. A dan B benar
D. A dan B salah
E. tidak ada jawaban yang benar

Jawaban : A. Benar
jika p(n + 1) benar, maka :
n = n + 1
2 + 4 + 6 + ... + 2n = n(n + 1)
2 + 4 + 6 + ... + 2n + 2(n + 1) = n + 1(n + 1 + 1)
2n + 2n + 2 = (n + 1) (n + 2)
2n + 2n + 2 = n (n + 1) + 2n + 2
                      = n2 + n + 2n + 2
                      = n2 + 3n + 2
                      = (n + 1) (n + 2) Terbukti Benar.


Soal 8
Penyelesaian dari 6x + 8y = 21 dan 3x + 4y = 7 dengan metode eleminasi adalah...
A. 7 = 2
B. 1 = 7
C. 0 = 7
D. 7 = 1
E. 2 = 7

Jawaban : C. 0 = 7
6x + 8y = 21   -->  6x + 8y = 21
3x + 4y = 7     -->  6x + 8y = 14 (persamaan kedua dikalikan dengan 2)
                                            0 = 7
Soal 9
Jika diketahui m, n adalah kuadrat sempurna, maka terbuktik bahwa mn
adalah ...
A. bukan kuadrat sempurna
B. kuadrat sempurna
C. Konstanta
D. A dan C benar
E. Tidak ada jawaban yang benar

Jawaban : B. kuadrat sempurna
Misalkan m, n adalah kuadrat sempurna, artinya
m = k2, n = p2 untuk suatu k, p bilangan bulat.
mn = (k2)(p2)
      = (kp)2
Karena k, p


Soal 10
Dibawah ini pernyataan yang benar tentang metode pembuktian langsung adalah ...
A. 3 adalah bilangan ganjil sebab terdapat 2
B. 4 adalah bilangan genap sebab terdapat 1
C. 5 adalah bilangan ganjil sebab terdapat 2
D. A, B, dan C benar
E. tidak ada jawaban yang benar

Jawaban : C. 5 adalah bilangan ganjil sebab terdapat 2
Suatu bilangan bulat n disebut bilangan GANJIL jika terdapat suatu bilangan bulat k, sehingga
n = 2k + 1.
5 = 2(2) + 1
5 = 4 + 1
5 = 5

Categories:

Write Up Web Hacking HackFest UG 2017

1. MrRobot
Deskripsi Soal :
Catch My Robot

Diberikan tampilan awal sebagai berikut
Dari soal kita sudah bisa mengetahui kalau pada website ini mempunyai file robots.txt sehingga kita bisa membukanya hanya dengan menambahkan /robots.txt pada akhir URL, maka di dapat tampilan berikut
sesuai dengan petunjuk yang diberikan maka kita hanya menambahkan /this_is_the_flag.txt pada akhir URL dan didapatkan flag.
Flag: HackFest{RobotsTXT_is_NOT_Secure_Anymore!}

2. Header Information
Untuk mendapatkan flag ini hanya membuka header yang di berikan oleh server, kita dapat melihatnya dengan bantuan browser serta menekan CTRL+SHIFT+I dan klik network atau dapat menggunakan tool Burpsuite.

Flag: HackFest{Informasi_Header_Pada_Web}

3.Google Flag
Deskripsi Soal: Hanya google bot yang dapat mengakses flag.
kita dapat mengubah user agent yang akan kita kirimkan ke server dengan menggubajb extension user agent switcher atau dengan menggunakan burpsuite.
Jika kita menggunakan extension user agent switcher, maka pilih google bot, dan di dapatkan flag
Flag: HackFest{Haloo_Google!}

4. Belanja Akhir Tahun
Tampilan awal dari halaman sebagai berikut, dan hanya memiliki uang Rp10 saja. Untuk itu kita

dapat memanipulasi dari source secara langsung,
Terlihat sebuah inputan hidden yang dapat diduga sebagai value pengiriman uang ke server
Kita dapat menggantikan lebih dari kebutuhan yang diperlukan, misalkan dengan angka 90000, dan
kirim kembali data tersebut.
Maka di dapatkan flag
Flag: HackFest{Belanja_Berhasil_Dengan_Manipulasi_Inspeksi_Elemen}

Categories:

Write Up Digital Forensics Hackfest UG 2017

1. Security Wargame
Diberikan file berupa gambar, nah karena ini adalah soal digital Forensics maka kita di wajibkan unttuk mencari informasi dari sebuah gambar tersebut.

Pada Linux Parrot terdapat command-command yang dapat digunakan untuk mencarri informasi pada sebuah file gambar diantaranya adalah: binwalk, foremost dan exiftool (install). Dengan mencoba binwalk akan terlihat ada yang mencurigakan yaitu terdapat file zip yang disembunyikan pada sebuah gambar.
Gunakan Foremost untuk mengeluarkan zip yang ada pada gambar tersebut, ketika ingin mengextrack file zip diperlukan password.. pertanyaanya adalah apa dan dimana passwordnya berada?
Gunakan exiftool untuk melihat detail informasi pada gambar

Extract file ZIP menggunakan Password yang di dapat dari exiftool kemudian di dapatkan Flagnya
Flag : HackFest{file_carving_adalah_salah_satu_topik_dalam_digital_forensic}

2. Broken ZIP

Diberikan sebuah file zip yang berisi file flag. Terlihat bahwa file tersebut sehat – sehat saja namun
sebenarnya filenya sakit (rusak) karena tidak dapat dibuka ataupun di extract. Untuk mengetahui
dimana rusaknya biasanya terdapat pada bagian header filenya. Buka dengan hexeditor atau editor
hex lainnya untuk melihat dimana kerusakannya.
Terlihat bahwa didalam zip tersebut terdapat file flag.png. Pada hex yang terseleksi(berwarna hijau)
seharusnya berisi panjang dari nama file yang ada pada zip tersebut (flag.png → len = 8). Maka
pada bit tersebut harus di ubah menjadi hex panjang file yang sebenarnya yaitu 08. Kemudian
extract zipnya dan dapatkan flag.png nya.

Belum selesai sampai disitu ternyata flagnya berupa QR Code. Buka Web ini untuk mendecode online QR Code, atau bisa menggunakan QRCode Reader yang ada pada handphone anda.

Flag : HackFest{congratulations_you_have_repaired_this_broken_ZIP}

Categories:

Tugas Pengetahuan Teknologi dan New Media

Kelompok Tugas Pengetahuan Teknologi dan New Media

1. Calvin Matthew Issac
2. Dede Herman Suryana
3.. Hanissa Anggraini Pratiwi
4. M. Kizbudin
5. Rafif Dhio Pratama
6. Stheven Mei Angolifa Giawa

Tugas kali ini saya akan menjelaskan kenapa saya memilih atau menyumbangkan ide  dalam membuat design tampilan pada Pembuatan Aplikasi E-Learning berasis Smartphone.

Kelompok saya memilih membuat aplikasi pengenalan buah-buahan pada anak umur 3-5 tahun. Saya menyumbangkan ide pembuatan design tampilan yang menarik bagi anak-anak yang memainkan permainan ini.

Saya menyumbangkan ide tampilan dalam tugas ini karena menurut saya tampilan dalam suatu aplikasi tidak hanya fitur yang bagus tetapi juga harus menarik. User juga akan kurang tertarik jika aplikasi yang kita buat tampilannya membosankan dan tidak ada daya tariknya.

Nama Aplikasi   :  Mengenal Buah
Basis                   :  Android
Keterangan          :  Memindahkan Buah-Buah ke Tempat Yang Tepat
Dosen                  :  Atika Laras Paramita

Di dalam Toko terdapat market untuk membeli Background yang diinginkan menggunakan point yang di miliki sesuai harga.
Option berisi Musik, Efek Suara, dan Bahasa yang terdiri dari Bahasa Indonesia & Bahasa Inggris. Option merupakan pengaturan visual bahasa dan audio game
Jika memulai permainan(Latihan Bentuk) , seperti ini lah tampilannya , anak-anak di arahkan untuk melengkapi nama bangun ruang yang tersedia 
Jika memulai permainan(Latihan Warna) , seperti ini lah tampilannya , anak-anak di arahkan untuk menjawab nama warnanya dengan menggunakan multiple choice.
Jika Berhasil Menyelesaikan Perrmainan Maka akan Muncul Tampilan berikut

Categories:

Makalah Agama dan Masyarakat

AGAMA DAN MASYARAKAT

Makalah ini diajukan untuk memenuhi salah satu tugas mata kuliah sosial dasar
Dosen : Ismail Akbar Brahma

Categories: ,

Makalah Pertentangan Sosial dan Integrasi Masyarakat

PERTENTANGAN SOSIAL DAN INTEGRASI MASYARAKAT

Makalah ini diajukan untuk memenuhi salah satu tugas mata kuliah sosial dasar
Dosen : Ismail Akbar Brahma

Categories: ,

Makalah Individu Keluarga dan Masyarakat

INDIVIDU, KELUARGA DAN MASYARAKAT

Makalah ini diajukan untuk memenuhi salah satu tugas mata kuliah sosial dasar
Dosen : Ismail Akbar Brahma

Categories: ,

http://www.resepkuekeringku.com/2014/11/resep-donat-empuk-ala-dunkin-donut.html http://www.resepkuekeringku.com/2015/03/resep-kue-cubit-coklat-enak-dan-sederhana.html http://www.resepkuekeringku.com/2014/10/resep-donat-kentang-empuk-lembut-dan-enak.html http://www.resepkuekeringku.com/2014/07/resep-es-krim-goreng-coklat-kriuk-mudah-dan-sederhana-dengan-saus-strawberry.html http://www.resepkuekeringku.com/2014/06/resep-kue-es-krim-goreng-enak-dan-mudah.html http://www.resepkuekeringku.com/2014/09/resep-bolu-karamel-panggang-sarang-semut-lembut.html

Copyright © FallCrescent | Powered by Blogger

Design by Anders Noren       Up ↑