LIFE SMART...LIFE SMART...SMART-ACT... HTTP://SMART-ACT.BLOGSPOT.COM
Free advertising

Friday, August 12, 2011

CINTAKU

Menapaki Kerinduan

ketika sinar rembulan pucat
sesosok rindu tanpa sayap
terbang ke langit malam

gelap mata
gelap hati
membuat ia lupa dimana tempat bersinggah
gelap malam menghapuskan arah dan tujuan

sementara,
dingin sunyi menjadi saksi
jiwa-jiwa yang menggigil
terperosok ke ceruk jurang malam

dalam...
sedalam hatimu

debur ombak di Pantai Barat menghantam jiwaku
tapi tak mampu goyahkan sepi
sapaan angin mengajak kabut dingin
menyusupi pori-pori,
merontokkan tulang..,
tapi tak mampu runtuhkan sunyi

sepi tanpa keheningan
sunyi dalam kebisuan

disitu aku terdampar
sendiri
menapaki kerinduan

Pangandaran,  2009


Kunyanyikan Rindu

di sini
di antara kemeriahan dan bintang
aku memilih sunyi
di mana telah kutanam hektaran rindu untukmu
ketika malam berjatuhan
hingga terdampar di pagi

dan untuk kesekian kalinya
aku merasa kau begitu jauh
meski kita masih saling berteduh
di bawah langit yang sama

kekasihku...
jika kau percaya angin adalah satu
jika kau percaya samudera adalah biru
akan kunyanyikan rindu ini
lewat angin, lewat laut
lewat sunyi
dan denting malam

CINTA

Cinta sejati bukan cinta yg mengutamakan pelukan,ciuman,pertemuan! tapi cinta sejati lebih mengutamakan pengabdian,kasih sayang & perhatian.

Sampai detik ini cinta itu masih di anggap misteri??!.. karna kedatangannya itulah yang sukar dan sulit di tebak..

Cinta? bagi orang cinta adalah kebencian & nafsu.. tapi yg kurasakan cinta adalah anugrah terindah yg pernah kurasakan.

Love is the shortes way from heart to heart.

Hati manusia sprti kendi, tdk ada yg bisa melihat isinya sehingga kejernihannya hanya dpt dilihat dri apa yg dikeluarkan

Jangan menangis karna cinta, tapi menangislah karna dosa di atas cinta. #1000ktcinta

Cinta hadir karna perkenalan, bersemi karna perhatian, bertahan karna kesetiaan,
Perasaan memang tak bisa diungkapkan dengan kata-kata, perasaan hanya bisa di ungkapkan dari hati ke hati.

I have a pair of eyes, but can't always see you.

cinta kata yang sederhana, tapi menyimpan 1000 rahasia

cinta adalah misteri dalam hidupku yang tak pernah ku tahu akhirnya...

katakan apa yang ingin kamu katakan... karena cinta tidak akan pernah bohong untuk mencintai dan dicintai...

para pencari cinta sejati dimanapun engkau berada... disini aku menanti....

jika hanya lewat mimpi aku bisa bertemu denganmu... maka biarlah aku tertidur selamanya...

sebenarnya kita tidak pernah takut untuk mengatakan cinta.... hanya saja kita takut untuk mendengar jawabannya....

cinta itu seperti api... kita tidak tahu apakah dia akan menghangatkan kita ?? atau dia akan membakar kita ??

ketika hidup memberi 100 alasan untuk menangis... kamu datang dengan membawa 1000 alasan untuk tersenyum :)

1000 kata cinta dan 1.000.000 kata-kata mesra tak berarti apa-apa jika kamu tak setia..

1000 kata yang terucap, hanya ada 1 kata yang terindah dalam hidup ini hanyalah kata "cinta"

cinta itu bukan kata-kata tapi 1000 tindakan !

Belajarlah mencintai dirimu sendiri hingga kamu mampu menyadari bahwa kamu adalah pribadi berbeda yg membuatm begitu istimewa.

Cinta bukan tentang berapa lama kamu telah mengenal seseorang, tapi tentang seseorang yg buatmu tersenyum sejak kamu mengenalnya.

Hidup itu terlalu misterius. Berhentilah menebak-nebak. Lakukan saja apa yang benar.

Sesuatu menjadi 'spesial' jika dirasakan, diucapkan, dilakukan, & diberikan utk seseorang, bkn SEMUA orang.

Jika kamu bertemu seseorang yg senyumnya mampu membuat dirimu tersenyum, kamu mungkin telah menemukan orang yg tepat tuk hidupmu.

Jika seseorang bisa mencintai kekuranganmu, buatmu merasa dibutuhkan setiap waktu, dan suka habiskan waktu denganmu.

Salah satu momen terindah dalam hidup adalah ketika kamu melihat orang tuamu tersenyum dan menyadari kamulah alasan dibaliknya.

AkuMencintaiMukarena tak ada satupun cinta sejati yang aku temukan selain di diri kamu.

AkuMencintaimu Karena semua hal yang telah kau beri tanpa harap kembali ~

akumencintaimu karena kamu tak pernah tau aku bersalah juga padamu

AkuMencintaimu Karena gigihnya usahamu untuk mendapatkanku

AkuMencintaimu Karena sela jemari tanganku ini, hanya tergenapkan utuh oleh jemarimu ketika kita saling menggenggam dan jatuh cinta.

AkuMencintaimu Karena disisimu, sepiku hilang. Di sampingmu, aku terjaga. Dan bersamamu aku bahagia!

akumencintaimukarena hanya dirimu yg membuatku merasa tenang dan bahagia..

AkuMencintamu Karena aku dari awal yakin aku dapat menjadi apa yang kau butuhkan dan apa yang kau selama ini cari.

Dia yg berjanji tak pernah menyakiti adalah orang yg paling sering melakukannya.

cinta itu aneh, semakin kamu berusaha menghapus dia dari hatimu, semakin sering dia muncul di pikiranmu.

Ketika Tuhan mengambil sesuatu dari genggamanmu, Dia tak menghukummu, namun hanya membuka tanganmu tuk menerima yg lebih baik.

I'm proud of my heart. It's been played, burned, and broken, but it still works.

Bangun dan kan ku sembuhkan lukamu. Karna yang terluka berjiwa. Karna yang terluka mendewasa. Bersama.

Kelabu itu menghiasi awanku.......sesaat lagi langitku akan hujan............Dear biru, jangan biarkan aku lama menunggu.

The way is not in the sky. It's in the heart.

..dan yang mengalah tak selalu salah, ia hanya lemah, terjatuh rebah. Hatinya patah.

Don't hesitate, let's dance in the rain.

dan lagi lagi... seperti di sekelilingku berputar, tergelak, bernyanyi, tertawa, menari. Dan kau hanya berdiri. Membuatku terdiam.

..dan lagi lagi kau berhasil membuat duniaku terdiam. Menghilangkan semua tawa dan nyanyian yang sedikit demi sedikit kunyanyikan.

Cinta dan Setia itu pilihan. Bukan sejalan.

Rasanya aku inginkan kamu. Merengkuhku erat, genapkan setengah menjadi satu.

Kata katamu yang tak pernah romantis, tak pernah puitis, selalu sadis. Candu yang ingin bisa berhenti, segera berlari.

sungguh sungguh tak lagi menghitung hari. Sungguh sungguh akhirnya berhenti. Aku, kamu, kita, tak lagi berarti...

Ia yang melintas, sejenak, sebelum akhirnya kembali menghilang...yes, I'm talking about you.

BIJAK

Jangan terburu buru nanti akan berakibat malu, haraplah sabar biar jangan dikatakan orang bar bar

Motivasi adalah kekuatan untuk terus maju menerjang semua rintangan yg ada tuk meraih apa yg kita inginkan

Jauh lebih lega jika kamu telah jujur mengungkapkan rasa kepada dia yg kamu cinta daripada memendamnya dalam hati.

Kemampuan terbaikku adalah cara berpikirku. Kemampuan terbaikmu adalah cara berpikirmu

Ketika kamu menuliskan kekesalan, ketika itu; kamu hanya akan membuat dirimu mengesalkan

Tidak perlu berusaha tuk menjadi oranglain. Sebab, kamu adalah istimewa, dan lebih baik dari mereka

Kekurangan ialah kelebihan yang tertutupi. Tidak ada yg perlu ditutup, tetapi cukup membukanya

Akan lebih baik jika mengatakan "Aku akan berusaha selalu", daripada "Aku akan selalu"

Kasih yang ditabur kepada sesama, kelak akan membuahkan kebahagiaan

Dosa kita kepada yang Maha Kuasa hanya taubat jawabannya, dosa kita kepada sesama berminta maaf penawarnya

PepatahBijak Pepatah Bijak
Dalam duka pasti ada suka. Jangan menyerah; karena dengan putus asa kita tidak lebih dari pecundang

ketika seseorang melukaimu, janganlah bersedih Karena Tuhan selalu menitipkan penyembuh buatmu :)

Mereka yang menyambut tantangan, adalah mereka yang memberi ruang pada impian tuk menjadi kenyataan

Jangan rendahkan dirimu untuk mendapatkan sesuatu, tapi rendahkan hatimu untuk berikan sesuatu

Secara tidak sadar, seseorang yang menyakitimu hanya akan membuatmu semakin kuat!

Seseorang menangis, bukan karena ia lemah. tetapi karena dia sudah terlalu lama KUAT.

Kamu adalah seorang yang istimewa. Kamu hanya tidak menyadarinya, atau mungkin belum menyadarinya

Seorang yang cerdik adalah dia yang memanfaatkan setiap peluang yang ada

Mereka yang menyambut tantangan, adalah mereka yang memberi ruang pada impian tuk menjadi kenyataan

sakit dlm perjuangan itu hanya sementara. bisa semenit/setahun. namun jika menyerah rasa sakit itu akan terasa selamanya.

Jangan remehkan hal-hal sepele. Sebab, dari sinilah hal-hal besar biasanya terwujud

Hidup menawarkan begitu banyak pilihan. Pilih serta jalani yang terbaik, dan menjadi seorang pemenang!

Tegap langkahmu dalam mengahadi kerasnya kehidupan tidaklah cukup tanpa disertai tegapnya iman

Kebohongan hanyalah ketenangan sesaat. Dan bila tidak diselesaikan, akan menjadi kegelisahan seumur hidup

Secara tidak sadar, dengan kejujuran; kamu telah menyelamatkan dirimu sendiri

Menyelesaikan permasalahan dengan emosi/kemarahan hanya akan menimbulkan permasalahan lainnya

Sebab, setiap perbuatan baik akan ada ganjarannya. Biarkan sang waktu yang menjawab

mengapa harus marah, ketika ruang "MAAFKAN" masih tersedia?

Taburlah sebanyak mungkin kebaikan. Sebab, buahnya akan sangat mendamaikan

Jangan katakan sulit. Ketahuilah; tidak ada yang sulit bila dikerjakan dengan sepenuh hati

Peluh yang menetes ketika kau mencari nafkah, akan terbayar dengan nikmat dan berkah yang kau makan

Tak perlu banyak kata utk menunjukan kau peduli, karena trkadang diam-mu adl cara trbaik u/ mnunjukan kepedulianmu.

BIJAK ITU INDAH

Berhenti bertanya bagaimana cara mendapatkan apa yg kamu inginkan, karena jawaban yg kamu temukan hanyalah BERUSAHA.

Dalam hidup, akan ada seseorang yg tak peduli betapa dia menyakitimu dan kamu membencinya, dia masih saja dicintai oleh hatimu.

Banyak yang datang dan pergi dalam hidupmu. Dan itu berarti untuk setiap GOODBYE, seseorang yang lain akan datang dengan sebuah HELLO.

Dari kegagalan kita dapat membaca apa yang salah dari diri kita. Berusaha dan berdoa hanya itulah kuncinya.

"Pria ingin menjadi cinta pertama seorang wanita. Wanita ingin menjadi cinta terakhir seorang pria." Betul, atau tidak? :)

Jangan takut mencoba hal yang baru, gapailah impianmu. Tapi ingatlah, tak peduli kemana kamu pergi, KELUARGA tempat kamu kembali.

Belajarlah mengucap syukur dari hal-hal baik di hidupmu. Belajarlah menjadi kuat dari hal-hal buruk di hidupmu.

Tak ada yang sempurna, berhentilah mencarinya. Jika seseorang mengerti dan mencintai kamu apa adanya, kamu dan dia pantas bersama.

Saat seorang wanita bersikap seakan ia tdk peduli lg padamu, saat itulah ia paling membutuhkan dirimu.

Cinta yang kamu terima, sebanding dengan cinta yang kamu berikan. Cintai lebih jika ingin dicintai lebih.

Menunggu pun meninggalkan itu menyakitkan. Tapi lebih menyakitkan ketika kamu tak mampu memilih antara menunggu atau meninggalkan.

Aku sudah maafin kamu, tapi bukan berarti aku ingin kembali.

Persahabatan bukan hanya tentang bagaimana kamu berkata kamu peduli, tapi juga tentang bagaimana kamu menunjukkan kamu peduli

Mengertilah terhadap keadaan setiap orang sebelum kamu ingin dimengerti oleh orang lain.

Lakukan segala sesuatu dengan Ikhlas dan teliti, sebelum kau menyesal karena segalanya tak dapat diubah lagi.

Gunakan syukur ketika kamu dicintai, dan gunakan sabar ketika kamu dibenci. Jangan ada sesal, jangan ada sebal.

Keberanian diperlukan untuk berdiri dan berbicara. Keberanian juga diperlukan untuk duduk dan mendengarkan

Senyum adalah cara untuk menyelesaikan banyak masalah, dan diam adalah cara untuk menghindari banyak masalah.

Teman sejati adl mereka yg selalu ada di sisimu bkn hanya pd saat kau berjaya, namun jg pd saat kau tak berdaya.

Miliki mimpi apapun, dan jangan ragu tuk berusaha mewujudkannya. Masa depan adalah milik mereka yang percaya pada keindahan impian.

Gunakan syukurmu, dan buang keluhmu dalam menghadapi setiap cobaan, karena cobaan yang kamu alami adalah sebagai proses pemuliaan.

Doaku hari ini: Tuhan, jangan biarkan rasa cintaku kepadaMu tergantikan oleh perasaan cintaku kepada mahluk ciptaanMu.

Ketika seseorang yg sangat berarti pergi, jangan terus bersedih. Kamu akan kehilangan dirimu dan lupa bahwa kamu jg sangat berarti.

Ketika kamu tulus mencinta, kamu akan lakukan apapun tuk melihatnya bahagia, bahkan jika itu berarti mengorbankan kebahagianmu jga.

Sesuatu yg sulit ketika tahu bahwa kamu harus melepaskan, karena cinta tak terbalaskan, tp kamu tetap berharap sebuah keajaiban.

Kadang kamu menjauh dari seseorang, bukan berarti kamu tak memikirkan dia, tapi kamu tahu bahwa kamu tak mungkin bisa bersamanya.

Jgn mencintai seseorang yg tdk bs kau percaya. Percayailah seseorang yg kau cinta.

Jika kamu telah mencoba untuk mengubah sesuatu tapi tetap tak berhasil, cobalah mengubah pandanganmu.

Melepaskan orang yg kamu cintai jauh lebih sulit dibanding menerima cinta yg baru yg asing bagi hatimu.

Ketika kamu tulus mencinta, tak akan pernah ada kata menyerah. Meski pikiran ingin berputus asa, namun hati tetap ingin mencoba.

Harapan tinggallah harapan jika tdk disertai tindakan,impian tinggallah impian jka tdk selaras dgn kemampuan.

Hanya karena kamu mendengar apa yg dilakukan seseorang, tak berarti kamu bisa menghakiminya. Kamu tak tahu apa yg telah dilaluinya.

Tak seorang pun punya kemampuan tuk melakukan hal sempurna, tapi setiap orang diberi banyak kesempatan tuk melakukan hal yg benar.

Kadang kamu memilih tuk melepaskan dia yg kamu cinta, bukan karena kamu berhenti peduli, tp kamu berhenti memaksa dia tuk peduli.

Faktanya, Aku bukannya tak peduli padamu, aku hanya berhenti menunjukkannya seperti yg kamu mau..

Faktanya, Aku kadang ingin berteriak apa yg kurasa tentangmu, tapi itu hanya menyakitiku. Karena semua orang akan mendengarnya, kecuali kamu.

Jangan pernah menyalahkan orang lain atas kesedihanmu, karena kebahagiaanmu adalah urusanmu. Kebahagiaanmu harus dari dalam dirimu.

Kamu harus menyadari bahwa ada orang tertentu yg tak bisa masuk ke dalam hidupmu, tak peduli seberapa besar kamu menginginkannya.

DIAM bukan berarti LEMAH. Kadang kita tahu apa yg harus dikatakan, tapi kita tak ingin melukai perasaan seseorang.

Terkadang kita diberikan rasa kesepian yg mendalam, agar kita lebih menghargai indahnya kebersamaan.

Dalam hidup, jangan pernah mendustai dirimu sendiri dengan berpikir sesuatu adalah milikmu, padahal kamu tahu itu bukan milikmu.

Seseorang takkan pernah memahami arti keberhasilan yang sempurna tanpa mengalami kegagalan sebelumnya.

Bukan dengan "kata-kata" tapi dengan "upaya" yang dapat membuktikan sebuah kepercayaan.

Cinta tak pernah memandang harta ataupun jabatan, jika kita mendasarinya dengan ketulusan dan keiklasan.

Dekatkan dirimu dengan Tuhan. Semakin dekat hidupmu dengan Tuhan, semakin terasa ringan beban hidupmu.

Seseorang akan mengerti apa arti DICINTAI setelah ia merasakan betapa perihnya DISAKITI.

Cinta itu bukan suatu hal yang bisa dijabarkan oleh kata-kata, tapi hanya bisa dijabarkan oleh hati.

Beranilah untuk bermimpi, dan beranikan dirimu untuk mewujudkan semua impianmu. Karena impian tidak akan tercapai tanpa keberanian.

Banyak orang tidak bisa menghargai orang lain hanya karena mereka tidak bisa menghargai dirinya sendiri.

Jangan sesali apapun yg sudah terjadi, karena itu sudah berlalu. Ambil hikmahnya dan jangan ulangi kesalahan yg sama.

Terlalu memikirkan masa lalu pun mencemaskan masa depan, dapat mengakibatkan kamu lupa bersyukur untuk hari ini.

Tuhan hanya memberikan yg terbaik, meski kadang tak sesuai keinginan. Tapi percayalah, Tuhan punya rencana yg jauh lebih indah.

Apapun yg kamu inginkan bisa kamu dapatkan, jika kamu dengan ikhlas bersedia membantu orang lain mendapat apa yg mereka inginkan.

Doaku hari ini: Tuhan, ijinkan aku menjadi pribadi yang ikhlas serta selalu mensyukuri segala nikmat yang Engkau beri.

Virgo menempatkan kejujuran di posisi teratas dan mereka akan berjuang utk visi dan misi hidup mereka.

Jangan meyakinkan dirimu bahwa seseorang mencintaimu hanya karena dia bersikap baik padamu. Kadang dia tengah bosan ketika itu.

Jangan pernah menyerah. Dalam hidup ini tak ada yg benar-benar berakhir, karena apa yg berakhir adalah awal sesuatu yg baru.

Terkadang Tuhan membiarkan hal buruk terjadi dalam hidupmu agar kamu menyadari bahwa hanya DIA yg mampu menolongmu melewati hari.

Kadang kamu harus korbankan cinta tuk selamatkan persahabatan, tp kdng kamu harus korbankan keduanya tuk selamatkan dirimu sendiri.

Jgn mencari Tuhan krn kau membutuhkan jawaban. Carilah Tuhan krn kau tahu bhw Ia adl jawaban yg kau butuhkan.

Faktanya, Aku ingin kamu tahu, kamu tak pernah gagal dalam membuat senyum indah di wajahku.. ♥

Faktanya, Aku suka mendengarkan musik, karena ada saatnya mereka adalah kata yg ingin aku ucapkan ketika hati tak ingin berbicara.

Masalah selalu ada, tapi seberapa besarnya masalah itu tergantung dari caramu melihatnya.

Jangan terlalu lama menangisi apa yg telah terjadi. Hal yg kamu tangisi saat ini mungkin hal yg akan kamu syukuri suatu saat nanti.

Jangan pernah biarkan dirimu sendiri menilai rendah dirimu, bahkan ketika orang lain sedang menghakimi. Believe in Yourself!

Jika kamu meninggalkan seseorang, berikanlah alasan. Tak ada yg lebih menyakitkan daripada ditinggalkan tapi tak pantas penjelasan.

Dlm hidup, kamu tak akan selalu dapatkan apa yg paling kamu inginkan, kadang kamu hanya mendapat pelajaran yg paling kamu butuhkan.

Wanita itu UNIK, mereka ingin kamu tahu bagaimana perasaannya, tapi mereka tak ingin mengatakannya padamu.

Perselisihan terjadi bukan krn adanya perbedaan, tapi krn ada pihak yg tak mendengarkan dgn baik, dan tak menghargai dgn sempurna.

Dlm hidup, kamu mungkin mencintai orang yg salah, tapi kesalahan yg ada membantumu menemukan orang yg tepat.

Ladies, Faktanya, Lelaki sangat pintar dalam bermain kata. So, lebih baik kamu memperhatikan tindakannya.

Sahabat tak hanya bersama saat suka pun duka, tetapi sahabat harus mampu mengatasi setiap masalah bersama.

Wanita menangis bukan karena mereka lemah, namun karena telah lelah berpura-pura tersenyum meski hatinya terluka.

Mereka yg berbahagia bukanlah mereka yg hidup tanpa masalah, tapi mereka yg terampil mengelola setiap masalah menjadi penuh hikmah.

Setiap masalah yang datang menyapa bukan untuk menjatuhkan, tetapi untuk menguji seberapa mampu kamu bertahan.

Menyedihkan ketika dia yg pernah jadi bagian penting dlm hidupmu, kini jadi seseorang yg tak kamu kenali lagi.

Hidup akan lebih mudah jika kamu memutuskan tuk menikmati apa yg kamu miliki drpd menyesali apa yg telah terjadi.

Ketika kamu mengatakan YA pada orang lain, pastikan kamu tak berkata TIDAK pada dirimu sendiri.

Kebahagiaan bukan hanya pemberian Tuhan, melainkan kebahagiaan diperoleh dari perjuangan yang direstui oleh Tuhan.

Kenyataan tak selalu sesuai dengan harapan, untuk itu bersiaplah dengan apapun kenyataan yang akan dan mungkin terjadi di hidupmu.

Percaya diri sendiri, meski mungkin saat ini kamu sedang bersedih. Karena penyemangat terbesar dalam hidupmu adalah dirimu sendiri.

Kesalahan dan kegagalan dapat terjadi pada siapapun. Jangan habiskan waktumu hanya untuk menyesalinya, tapi belajarlah darinya.

Orang yg bersyukur akan tersenyum ceria pagi ini, orang yg tidak bersyukur akan mengeluh pagi ini. Kalau kamu yg mana? :)

Doaku hari ini: Tuhan, izinkan aku mendapatkan hasil terbaik atas semua usahaku, untuk kebaikan kehidupan aku dan keluargaku.

Apapun yg terjadi sepanjang hari ini, yakinlah bahwa semua atas kehendak dan rencana Tuhan. Selamat malam, selamat beristirahat.

Persahabatan bukan ttng siapa yg datang lebih dulu, bukan siapa yg lebih lama kamu kenal, tapi mereka yg datang & tak pernah pergi!

Ketika kamu bertemu seseorang yg mampu menjadikanmu pribadi yg baik, tetaplah bersamanya. Karena sahabat sangat sulit tuk ditemukan

Org yg membencimu sesungguhnya hny membenci dirinya sendiri. Ia membencimu krn menyadari bhw kau lbh baik darinya

Lebih baik kamu mengubah hidupmu, sebelum hidupmu mengubahmu.

Sahabat sejati adalah mereka yg mengerti masa lalumu, percaya dengan masa depanmu, dan mereka yg menerima kamu apa adanya kamu.

Jika cinta yg terucap berasal dari hati yg tulus, maka kamu akan memenangkan hati seseorang yg juga tulus mencintaimu.

Dalam hidup, kamu tak hanya harus temukan dia yg mampu menyenangkan hatimu, tapi jg dia yg tak biarkan hatimu terluka.

Org tdk berbohong krn mereka mencintaimu. Org berbohong krn mereka mencintai diri mereka sendiri.

Sesuatu yg menyedihkan ketika seseorang yg tak pernah kamu lupakan menyadari hadirmu hanya disaat dia membutuhkan sesuatu darimu.

Dlm hidup, kamu harus ingat: kamu lebih berani dr yg kamu duga, lebih kuat dr yg kamu tahu, dan lebih pintar dr yg kamu pikirkan.

Jangan pernah memandang rendah dirimu sendiri. Bagi Dunia kamu mungkin hanya seseorang, tapi bagi seseorang kamu mungkin dunianya.

Kadang kamu menjauh dari seseorang bukan karena kamu menghindarinya, tapi tuk melihat siapa saja yg cukup peduli tuk mendekatimu.

Teman yang baik tak akan membiarkanmu melakukan hal bodoh ... sendirian!

Jgn biarkan org yg membencimu menyakitimu. Biarkan org yg mencintaimu memulihkanmu.

Jangan tergantung pada orang lain. Ingat! "Kamu adalah penentu kebesaran hidupmu sendiri, bukan mereka, bukan orang lain"

Dengan pernah mencintai orang yg salah adalah salah satu cara, kamu mendapati orang yg benar-benar mencintai kamu.

Jika tak mampu membuatnya tertawa, cukuplah jangan membuatnya terluka. Mungkin itu sederhananya cinta.

Ketika orang lain melakukan kesalahan padamu, ingatkan dia, maafkan kemudian mohonkan ampunan Tuhan untuknya.

Belajarlah menjadi teman terbaik bagi diri sendiri, jangan sampai kamu menjadi musuh terburuk dirimu sendiri.

Terkadang kebahagian harus diraih dengan pengorbanan. Tetapi setiap pengorbanan belum tentu mendapatkan kebahagiaan.

Pribadi yang baik bukan hanya pribadi yang berlaku baik, tetapi juga yang menghindari keadaan untuk diperlakukan dengan tidak baik.

Setiap wanita harus tahu: Pria yg tulus mencintaimu, tak akan pernah biarkanmu pergi. Tak peduli apapun rintangannya

Tuhan tidak pernah membiarkan hambanya terlarut dalam kesedihan, pasti ada rencana indah untuk membayar semua air mata.

Doaku hari ini: Tuhan, beri aku kebahagiaan yg cukup tuk membuat ku tersenyum. Kebahagiaan yg mampu membuat aku bersyukur.

Hanya cinta yg bisa berikanmu bahagia, meski kadang buatmu terluka. Tp cinta begitu istimewa ketika kamu berikan pada dia yg setia.

Sesuatu yg sangat sulit dimengerti bagaimana seseorang bisa menceritakanmu begitu banyak dusta, tapi tak pernah merasa bersalah.

Menyakitkan tuk ucapkan selamat tinggal pd dia yg tak ingin kamu lepaskan, tp lebih sakit tuk bertahan jika dia memang ingin pergi.

Jangan hiraukan dia yg membencimu. Terkadang dia membencimu hanya karena kamu tak memberi perhatian seperti yg dia inginkan.

Cinta sejati adalah ketika dia yg kamu cinta tak lg mempedulikanmu, tp kamu masih menunggunya dgn setia.

Dalam hidup ini, beberapa orang akan membencimu hanya karena kamu tak menunjukkan bahwa kamu menyukai mereka. So what? Ini hidupmu!

Jangan menunggu waktu yg tepat tuk melakukan sesuatu. Hidup terlalu singkat tuk bertanya-tanya apa yg akan terjadi. JUST DO IT!

MENCINTAI bukan bagaimana kamu MELIHAT tp bagaimana MERASAKAN. Bukan bagaimana kamu MENDENGAR tp bagaimana MENGERTI.

Cinta bukanlah sebuah permainan. Cinta adalah perpaduan dua hati yg saling berjanji, meski pernah tersakiti, cinta tak akan pergi.

Menjaga kata-katamu tidak semudah mengucapkannya. Membuktikannya? Itu cerita lain.

Ketulusan cinta dan kasih sayang tidak dapat dilihat atau didengar, tetapi hanya bisa dirasakan dengan hati.

Hal menyedihkan ttng cinta yg berawal dari persahabatan adalah ketika cinta berakhir, dia akan menghancurkan persahabatan yg ada.

Semangat 45 menuju kampus baru tuk mencari gebetan, bisa langsung menjadi lesu ketika tahu mantan juga kuliah di situ.

Terkadang kamu harus berpura-pura bahwa kamu tak peduli, karena kamu tak berarti apa-apa pada seseorang yg berarti segalanya.

Salah satu hal terpenting dalam hidup adalah belajar bagaimana cara memberikan cinta yg tulus kepada orang lain.

Bebaskan dirimu dari belenggu masa lalu. Hiduplah hari ini tuk menciptakan masa depan yg lebih baik. Miliki hati, jadikan berarti.

Jangan biarkan dirimu terpaku dengan hubungan masa lalu, yg berakhir telah berakhir. Lebih baik temukan seseorang yg baru. MOVE ON!

Hargailah mereka yg telah berkata jujur kepadamu, karena bagi beberapa orang, mereka lebih suka mengatakan apa yg ingin kamu dengar

Raih impianmu, bahkan jika dia terlalu jauh dr jangkauanmu. Kamu tak prnh tahu seberapa jauh kamu melangkah hingga kamu mencobanya.

Terkadang, bukan karena dusta, kamu membenci seseorang, tapi karena sedih menerima kenyataan bahwa dia tak bisa lagi kamu percaya.

Faktanya, Lelaki tak sungguh mencintaimu jika dia menghubungimu hanya ketika dia membutuhkan sesuatu.

Faktanya, Lelaki selalu mampu menarik perhatianmu, tp jika kamu tak bisa jadi diri sendiri ketika bersamanya, dia bukan yg istimewa.

Ketika kamu tulus mencinta, tak peduli jika kamu membencinya, dia tetap selalu ada dalam pikiranmu sepanjang waktu.

Jangan menunggu tuk katakan cinta, karena ketika dia tiada, tak peduli seberapa keras suaramu, dia tak akan mendengarmu.

Cinta adalah ketika kamu temukan seseorang yg bahkan tak sesuai dengan impikan, tp kamu tetap berkata, "akhirnya aku menemukanmu"

Dlm cinta, temukan dia yg tak takut mengakui bahwa dia merindukanmu. Dia yg tahu kamu tak sempurna, tapi memperlakukanmu sempurna.

Bermimpi adalah langkah awal mencapai keberhasilan. Tapi mimpi itu tetap semu, jika tindakan tidak nyata.

Jangan pernah berhenti berharap. Karena kebahagiaan adalah milik mereka yg berharap, meskipun mereka pernah kecewa sebelumnya.

Jika yg kamu cari belum kamu dapati, periksa kembali apa yg kamu cari. Karena apa yg kamu lihat tergantung dari apa yg kamu cari.

Memahami Serangan Denial of Service On October 10, 2009

Dalam artikel ini saya akan menjelaskan mengenai jenis serangan yang bisa dikatakan tidak ada obatnya, yaitu denial of service atau DoS. Bila serangan DoS ini dilakukan secara beramai-ramai dan terorganisir dengan baik, maka akan menghasilkan kerusakan yang dahsyat dan sanggup melumpuhkan situs-situs populer seperti twitter.com dan metasploit.com.
Apa itu DoS
Denial of service adalah jenis serangan yang tujuannya adalah mencegah pengguna yang sesungguhnya menikmati layanan yang diberikan server. Server sesuai namanya adalah pelayan yang harus selalu siap melayani permintaan pengguna, yang umumnya beroperasi 24 jam tanpa henti. Contohnya adalah web server yang bertugas melayani pengunjung web menyediakan informasi dalam bentuk halaman html. Dalam kondisi normal, pengunjung dapat meminta resource dari web server untuk ditampilkan dalam browsernya, namun bila web server terkena serangan DoS maka pengunjung tidak bisa menikmati layanan web server.
Secara umum ada 2 cara melakukan serangan DoS:
  1. Mematikan Server
  2. Menyibukkan Server
    • Tanpa bug/vulnerability
    • Meng-exploit bug/vulnerability
DoS dengan Mematikan Server: Kill Them!
Anda pernah mengalami ingin memakai telepon umum atau ATM namun tidak bisa karena di mesin tersebut ditempel kertas berisi pesan “Out of Service” atau “Sedang dalam perbaikan”. Telepon umum adalah target serangan DoS yang biasa terjadi, dimana-mana kita menemukan telpon umum yang rusak karena serangan DoS seperti membanting gagang telpon, mencabut kabel, memecahkan LCD dan aksi-aksi lainnya.
Tujuan serangan ini adalah membuat server shutdown, reboot, crash, “not responding”. Jadi serangan ini menghasilkan kerusakan yang sifatnya persisten artinya kondisi DoS akan tetap terjadi walaupun attacker sudah berhenti menyerang, server baru normal kembali setelah di-restart/reboot.
Bagaimana cara serangan DoS ini dilakukan? Serangan ini dilakukan dengan meng-exploit bug/vulnerability pada server. Kata kunci pada vulnerability jenis ini biasanya adalah “specially/carefully crafted packet/request”, yang artinya paket yang dirancang khusus. Kenapa dirancang khusus? Sebab dalam paket itu mengandung  sifat tertentu yang membuat server mati ketika mengolah paket khusus itu.
Mari kita perhatikan beberapa contoh vulnerability yang berakibat pada DoS attack:
  • Ping of Death ( CA-1996-26 )
  • Ini adalah jenis bug yang sudah sangat tua. Praktis sudah tidak ada lagi sistem yang vulnerable terhadap bug ini. Bug ini bila diexploit akan membuat server crash, freeze atau reboot. Serangan ini dilakukan dengan mengirimkan “specially crafted” paket berupa oversized ICMP packet, yaitu paket yang ukurannya di atas normal. Ketika server menerima dan memproses paket yang “aneh” ini, maka server akan crash, freeze atau reboot. Ini adalah contoh serangan DoS “one shot one kill” karena bisa merusak server hanya dengan satu tembakan saja.
  • MySQL IF Query DoS ( SA25188 )
  • Bug ini akan membuat mysql server menjadi crash hanya dengan mengirim sql khusus yang mengandung fungsi IF() contohnya: “SELECT id from example WHERE id IN(1, (SELECT IF(1=0,1,2/0)))”. Ini juga jenis serangan “one shot one kill”.
  • Cisco Global Site Selector DNS Request Denial of Service (SA33429)
  • Bug ini membuat DNS server Cisco mati dengan mengirimkan beberapa “specially crafted” paket request DNS dalam urutan tertentu.
Tiga contoh di atas kiranya cukup memberikan gambaran tentang bagaimana serangan DoS jenis ini dilakukan. Pada intinya adalah attacker memanfaatkan (baca:mengexploit) bug yang membuat server berhenti bekerja dan biasanya dilakukan sendirian secara remote dengan mengirimkan specially crafted packet.
DoS dengan Menyibukkan Server: Make Them As Busy As Possible!
Pada waktu menjelang lebaran kita sering merasa begitu sulit mengirim sms, bahkan sering terjadi gagal kirim. Begitu juga ketika berlangsung acara kuis di TV, mengelpon ke nomor untuk menjawab kuis terasa begitu sulit.  Hal ini terjadi karena ada begitu banyak orang yang mengirim sms pada saat lebaran dan menelpon pada waktu kuis sehingga membuat jaringan telekomunikasi menjadi begitu sibuk sampai tidak bisa melayani pengguna lain. Peristiwa itu mirip dengan yang terjadi ketika sebuah server mendapat serangan denial of service. DoS yang terjadi pada peristiwa tersebut bukan jenis DoS yang mematikan server, namun jenis DoS yang menyibukkan server.
Jenis DoS ini bersifat sementara, server akan kembali normal bila attacker berhenti mengirimkan request yang membuat sibuk server.
DoS jenis ini terbagi lagi menjadi 2 jenis berdasarkan cara melakukan serangan:
  • Exploiting vulnerability: Menyerang dengan malicious request/packet
  • No vulnerability exploitation: Menyerang dengan normal request/packet
Membuat server sibuk dengan mengexploitasi vulnerability lebih cepat daripada tanpa mengeksploit vulnerability.
Make Server Busy by Exploiting Vulnerability
Dalam serangan DoS jenis ini, attacker memanfatkan bug yang membuat server berlebihan dalam menggunakan resource (cpu,memory,disk space dsb). Attacker akan mencari cara bagaimana agar membuat server bekerja ekstra keras (jauh lebih keras dari request normal) untuk melayani request dia. Biasanya serangan DoS jenis ini tidak berupa serangan “one shot one kill”. Serangan dilakukan dengan melakukan banyak request dengan setiap request membuat server mengonsumsi lebih banyak resource dari request yang normal.
Dalam hitungan matematika sederhana, bila attacker bisa membuat server bekerja selama 10 detik  hanya untuk melayani dia (misal normalnya 0,1 detik), maka attacker bisa mengirimkan request 1.000x untuk membuat server melayani dia selama 10.000 detik (2,7 jam lebih) sehingga membuat pengguna lain tidak bisa menikmati layanan server.
Untuk lebih memahami DoS jenis ini, mari kita lihat contoh-contoh vulnerability yang bisa diexploit untuk melancarkan serangan DoS jenis ini:
  • TCP SYN Flood DoS
  • Ini adalah serangan DoS yang sudah sangat tua. Attacker menyerang dengan cara membanjiri server dengan malicious request berupa paket SYN dengan fake source IP address. SYN packet adalah paket dari client yang mengawali terbentuknya koneksi TCP/IP, setelah itu server akan membalas dengan SYN-ACK, dan dilengkapi dengan paket SYN-ACK-ACK dari client, tiga proses ini disebut three way handshake.
    Triknya adalah pada fake source ip address pada paket SYN dari client. Akibatnya server akan mengirim SYN-ACK (step 2) ke ip address yang salah sehingga server juga tidak akan mendapatkan balasan SYN-ACK-ACK dari client. Padahal untuk setiap client yang mencoba membuka koneksi, server akan mengalokasikan resource seperti memori dan waktu untuk menunggu datangnya balasan ACK dari client. Dengan cara ini attacker menghabiskan resource server hanya untuk melayani request palsu dari attacker.
  • Apache mod_deflate DoS
  • Apache menggunakan mod_deflate untuk memampatkan file. Bila visitor meminta sebuah file, maka apache akan menggunakan mod_deflate untuk memampatkannya kemudian mengirimkan ke visitor tersebut. Namun bila di tengah proses pemampatan, visitor memutuskan koneksi TCP, Apache masih terus bekerja memampatkan file untuk visitor yang sebenarnya sudah tidak ada (sudah disconnect). Jadi bugnya adalah pada borosnya pemakaian resource cpu untuk memampatkan file untuk client yang sudah tidak ada.
    Attacker memanfaatkan kelemahan ini dengan meminta sebuah file yang berukuran besar, kemudian dalam waktu singkat memutuskan koneksi sehingga membuat server bekerja keras mempatkan file untuk visitor yang sudah tidak ada. Request ini diulang berkali-kali sampai server begitu sibuknya dan semua resource cpu habis.
Dua contoh vulnerability di atas cukup menjelaskan bagaimana serangan DoS jenis ini dilakukan. Pada intinya adalah dengan mengirim banyak malicious request/paket  yang membuat server mengonsumsi resource lebih banyak dan lebih lama untuk setiap requestnya.
Make Server Busy Without Exploiting Vulnerability
Ini adalah jenis serangan yang mengandalkan pada kemampuan mengirimkan normal request sebanyak-banyaknya sehingga server menjadi sibuk. Perbedaan DoS jenis ini dengan DoS yang mengexploit vulnerability adalah pada requestnya. Request yang dikirimkan pada DoS jenis ini adalah request yang normal seperti yang dilakukan pengguna biasa, sehingga server tidak mengonsumsi resource berlebihan. Sedangkan DoS yang mengandalkan vulnerability mengirimkan specially crafted malicious request untuk membuat server mengonsumsi resource lebih banyak untuk melayani malicious request tersebut.
Normal request hanya membuat server mengonsumsi resource dalam jumlah biasa-biasa saja, tidak akan mengganggu kerja server secara keseluruhan. Diperlukan normal request dalam jumlah yang sangat banyak untuk membuat server terganggu kerjanya. Jadi agar serangan ini menjadi efektif, maka serangan harus dilakukan beramai-ramai dari banyak tempat, semakin banyak penyerang semakin bagus hasilnya. Serangan ini juga disebut dengan distributed DoS (DDoS) karena dilakukan dari banyak lokasi yang terdistribusi (tersebar).
Serangan DDoS dilakukan dengan menggunakan komputer zombie atau robot. Zombie adalah komputer yang sudah dikuasai attacker sehingga bisa dikendalikan dari jarak jauh. Sekumpulan komputer zombie membentuk jaringan yang disebut bot-net. Attacker mendapatkan banyak zombie dengan menyebarkan virus atau worm, setiap komputer yang terinfeksi akan diinstall program yang membuat komputer bersedia menjalankan perintah dari attacker.
DDoS Botnet Attack
Courtesy of: www.dos-attack.net
Gambar di atas menjelaskan cara kerja DDoS. Attacker memberi perintah kepada semua pasukannya untuk membuat request HTTP ke sebuah website. Bila pasukan yang dikuasai attacker sangat besar, maka web server akan dibanjiri request sehingga menjadi terlalu sibuk dan tidak bisa diakses oleh pengguna yang sebenarnya (real visitor).
Serangan jenis ini tidak ada obatnya karena attacker tidak meng-exploit bug atau vulnerability apapun. Bila pada jenis DoS yang lain, serangan dapat dicegah dengan melakukan patching atau update software, maka serangan ini tidak bisa dihentikan dengan update atau patch.
Kesimpulan
Denial of service adalah serangan yang membuat server tidak bisa melayani pengguna yang sesungguhnya. Berikut adalah jenis-jenis serangan DoS berdasarkan cara melakukan serangan:
  • Mematikan Server: one shot, one kill untuk membuat server menjadi crash, hang, reboot.
  • Menyibukkan Server: mengirim banyak sekali request untuk membuat server sibuk.
    • Exploiting bug: mengirim banyak specially crafted request. Jumlah request tidak sebanyak jenis DoS yang menyibukkan server dengan normal request.
    • Normal request: mengirim banyak request normal seperti pengguna biasa. Diperlukan jumlah request yang lebih banyak dibandingkan jenis DoS yang menyibukkan server dengan exploit bug. Biasanya menggunakan botnet secara terdistribusi.

Memecahkan Kriptografi dengan Chosen-Plaintext Attack

Beberapa waktu yang lalu saya menemukan sebuah website dengan vulnerability SQL injection. Sengaja nama website tersebut tidak saya publikasikan, karena artikel ini bukan tentang SQL injection melainkan bagaimana memecahkan enkripsi.
Berbeda dengan website lainnya, website tersebut menyimpan password dalam tabel user tidak dalam bentuk one-way hash (contohnya MD5 atau SHA1), melainkan dalam bentuk ter-enkripsi. Enkripsi yang dipakai juga unik karena tidak memakai algoritma enkripsi yang sudah dikenal luas.
Dalam kasus tersebut saya ingin melakukan privilege-escalation dari user dengan hak akses biasa menjadi user dengan hak akses penuh. Sebagai user biasa saya bisa melakukan SQLinjection untuk membaca username dan password dari tabel user. Dengan teknik tersebut saya mendapatkan encrypted password dari seorang user yang memiliki hak admin. Namun saya tidak bisa memakai password itu untuk menjadi admin sebelum saya mengerti pesan tersembunyi dalam chiphertext tersebut.
Analisa Ciphertext
Saya mencoba menggali informasi lebih dalam lagi tentang enkripsi unik di website tersebut. Saya mulai mengumpulkan banyak ciphertext dari user-user lainnya. Berikut beberapa ciphertext yang saya kumpulkan:
  • 804881451156416021528145
  • 9436353935332546555225378546953924846491
  • 11763273927622732276427712808233523172328227
Ada beberapa poin penting yang saya dapatkan dari pengumpulan ciphertext tersebut:
  • Panjang ciphertext bervariasi
Panjang ciphertext yang bervariasi membuat saya yakin bahwa itu bukan fungsi hash, karena ciri khas fungsi hash adalah panjang hash yang selalu tetap. Panjang ciphertext yang bervariasi kemungkinan besar tergantung dari panjang atau pendeknya password user tersebut. Nanti saya akan coba konfirmasi hipotesa ini dengan mengubah password user biasa yang saya pakai.
  • Ciphertext hanya terdiri dari angka
Ciphertext yang semua berupa angka membuat saya curiga bahwa ini adalah kode, semacam kode ASCII namun sudah dikalkulasi dengan formula matematis tertentu.
Chosen-Plaintext Attack
Chosen-Plaintext attack adalah salah satu cara “code breaking” (cryptanalysis) dengan cara membandingkan dan menganalisa contoh plaintext dan ciphertextnya. Dalam chosen plaintext attack, code breaker memiliki kebebasan untuk menentukan plaintext yang diiginkannya.
Untuk mendapatkan contoh plaintext dan ciphertextnya, saya melakukan langkah berikut ini setelah login sebagai seorang user biasa:
  1. Ubah Password
  2. Lihat ciphertext dari tabel user dengan SQLinjection
Pertama saya ubah password menjadi ‘d’, kemudian saya lihat ciphertext untuk plaintext ‘d’. Saya ulangi langkah itu dengan contoh plaintext yang lain berkali-kali.
Apa saja plaintext yang saya pilih? Berikut chosen-plaintext dan ciphertextnya yang saya pilih:
Plaintext Ciphertext
d 92254325
dd 831214121412
ddd 6180128012807280
dddd 15013601660186017601
abcd1234 433034273428242944308379538023819382
Perhatikan bahwa panjang ciphertext tergantung dari panjang plaintext.  Plaintext sepanjang 1 karakter, ciphertext panjangnya 8 digit. Setiap penambahan satu karakter plaintext, ciphertext bertambah 4 digit.
Saya sengaja memilih plaintext berurutan (d,dd,ddd,dddd) untuk melihat apa ada pola yang muncul. Perhatikan pada plaintext “dd”, ciphertextnya adalah 831214121412, terlihat pola berulang pada angka 412 sebanyak 2x. Dalam ciphertext ini saya menyimpulkan bahwa 412 adalah kode untuk karakter ‘d’.
Untuk plaintext “ddd”, ciphertextnya adalah 6180128012807280, terlihat pola berulang pada angka 280 sebanyak 3 kali. Dalam ciphertext ini saya menyimpulkan bahwa 280 adalah kode untuk karakter ‘d’.
Begitu juga pada plaintext “dddd”, ciphertextnya adalah 15013601660186017601, dengan pola berulang pada angka 601 sebanyak 4 kali. Dalam ciphertext ini, saya menyimpulkan bahwa 601 adalah kode untuk karakter ‘d’.
Ingat bahwa untuk setiap penambahan satu karakter plaintext membuat ciphertext bertambah 4 digit. Ternyata 4 digit tersebut adalah satu digit apapun diikuti dengan 3 digit kode karakter. Chosen plaintext dalam contoh sebelumnya saya pecah-pecah menjadi kelompok 4 digit dipisahkan dengan karakter ‘#’ dan dari 4 digit tersebut saya pecah dua menjadi 1 digit dan 3 digit dengan karakter ‘-’.
Plaintext Ciphertext Kode
d 9-225#4-325 325 = ‘d’
dd 8-312#1-412#1-412 412 = ‘d’
ddd 6-180#1-280#1-280#7-280 280 = ‘d’
dddd 1-501#3-601#6-601#8-601#7-601 601 = ‘d’
Oke sampai disini saya sudah mendapatkan titik terang. Saya sudah mengetahui komposisi dan posisi tiap karakter pada plaintext ketika dipetakan pada ciphertext. Tapi masih ada yang belum jelas, dalam contoh tersebut kode untuk krakter ‘d’ ternyata berbeda-beda, pada contoh pertama kodenya adalah 325, pada contoh lain kode untuk ‘d’ adalah 412, 280 dan 601.
Kini saya harus mengetahui bagaimana hubungan antara kode yang berurutan, untuk itu saya memilih plaintext “abcd1234″ dengan ciphertext 433034273428242944308379538023819382. Mari kita pecah ciphertext tersebut menjadi kelompok 4 digit seperti tabel di atas.
4-330#3-427#3-428#2-429#4-430#8-379#5-380#2-381#9-382
Dari pengelompokan tersebut kita bisa simpulkan bahwa:
427 = ‘a’, 428 = ‘b’, 429 = ‘c’, 430 = ‘d’, 379 = ’1′, 380 = ’2′, 381=’3′, 382=’4′
Perhatikan bahwa kode-kode tersebut sengaja saya pilih berurut ‘a’->’b'->’c'->’d’ dan ternyata ciphertextnya pun ikut berurut 427->428->429->430. Begitu juga untuk ’1′->’2′->’3′->’4′, ciphertextnya juga berurut 379->380->381->382. Saya mencurigai bahwa enkripsi ini memakai kode ASCII karena memang kode ASCII untuk ‘abcd’ dan ’1234′ berurutan.Kode ASCII untuk  ‘a’=97, ‘b’=98,’c'=99,’d'=100,’1′=49,’2′=50,’3′=51,’4′=52.
Terlihat ada jarak yang cukup jauh antara kode ASCII dan kode pada ciphertext. Contohnya ‘a’ dengan ASCII 97, dalam ciphertext dikodekan dengan 427, selisihnya 427-97 adalah 330. Begitu juga dengan ’1′ dengan ASCII 49, dalam ciphertext dikodekan menjadi 379, dengan selisih 379-49 adalah 330. Ternyata kalau dilihat semua kode pada ciphertext juga berjarak 330 dengan kode ASCII. Pertanyaannya, darimana angka 330 ini muncul?
Mari kita lihat sekali lagi ciphertext dari ‘abcd1234′ (setelah dikelompokkan 4 digit):
4-330#3-427#3-428#2-429#4-430#8-379#5-380#2-381#9-382
Adakah angka 330 dalam ciphertext tersebut? Aha, ternyata ada! Ingat bahwa plaintext satu karakter, ciphertextnya adalah 8 digit, padahal tiap karakter dikodekan dalam 4 digit, jadi ada kelebihan 4 digit. Ternyata pada kelompok 4 digit pertama mengandung offset dengan kode ASCII, yaitu pada digit ke-2 hingga ke-4.
Jadi sekarang misteri enkripsi ini terpecahkan. Mari kita coba dekrip contoh ciphertext yang saya kumpulkan di awal:
  • 804881451156416021528145
Pertama kita kelompokkan menjadi kelompok 4 digit: 8-048#8-145#1-156#4-160#2-152#8-145. Kelompok 4 digit pertama 8048 menunjukkan offset yaitu 048. Kelompok 4 digit kedua, 8145 menunjukkan kode karakter pertama adalah 145, dikonversi ke kode ASCII menjadi 145-048=97. ASCII 97 ini adalah ‘a’. Jadi kita temukan karakter pertama ‘a’. Berikutnya, 156-48=108, yaitu kode untuk ‘l’. Berikutnya, 160-48=112, yaitu kode untuk ‘p’. Berikutnya 152-48=104, yaitu kode untuk ‘h’. Berikutnya 145, sama dengan karakter pertama, ‘a’. Jadi hasil dekripsinya adalah ‘alpha’.
  • 9436353935332546555225378546953924846491
Kita kelompokkan menjadi kelompok 4 digit: 9-436#3-539#3-533#2-546#5-552#2-537#8-546#9-539#2-484#6-491. Karakter pertama: 539-436=103=’g’. Karakter ke-2: 533-436=97=’a’. Karakter ke-3: 546-436=110=’n’. Karakter ke-4: 552-436=116=’t’. Karakter ke-5: 537-436=110=’e’. Karakter ke-6 sama dengan ke-3, ‘n’. Karakter ke-7 sama dengan karakter ke-1, ‘g’. Karakter ke-8: 484-436=48=’0′. Karakter ke-9: 491-436=55=’7′. Jadi hasil dekripsinya adalah ‘ganteng07′.
Pada akhirnya dengan mengetahui teknik enkripsi yang dipakai, saya berhasil mendapatkan password seseorang dengan hak administrator. Tidak lama kemudian GAME OVER, webshell uploaded :)
Kesimpulan
Pelajaran yang bisa diambil dari kasus tersebut adalah bahwa membuat algoritma kriptografi yang kuat tidaklah mudah, jangan pernah memakai enkripsi buatan sendiri, walaupun algoritmanya anda rahasiakan. Selalu gunakan algoritma enkripsi terbuka yang sudah teruji oleh para ahli.
Sedangkan untuk password, sebaiknya jangan gunakan enkripsi, tapi gunakan one-way hash function yang kuat seperti SHA1. Enkripsi tidak cocok dipakai untuk menyimpan password karena ketika terjadi compromised, maka semua password yang ada di tabel akan bisa diambil attacker dengan cara menjalankan rutin dekripsi yang pasti tersedia di salah satu file script seperti PHP pada web tersebut.
Walaupun algoritma dekripsinya anda rahasiakan, suatu saat ketika terjadi compromised, seorang attacker akan bisa melakukan dekripsi dengan membaca source code php untuk men-dekrip password. Biasanya rutin dekripsinya tidak jauh dari file php yang terkait dengan halaman login.

Berburu Direktori dan File Sensitif dengan DirBuster

Mungkin anda akan terkejut bila mengetahui bahwa ada banyak website yang berhasil dihack/dideface hanya karena sebuah kesalahan “konyol”. Tidak dibutuhkan keahlian programming, SQL atau jurus njelimet lainnya, cuma membuka sebuah direktori yang berisi file-file sensitif, maka sebuah website akan bertekuk lutut. Ya benar, ini adalah fakta yang seringkali terjadi.
Direktori Sensitif
Semua direktori atau file yang mengandung informasi berguna buat hacker untuk mendeface website anda, maka direktori itu termasuk sensitif. Beberapa direktori atau file yang tergolong sensitif antara lain:
  • Backup
Hal yang biasanya dibackup adalah database dan source script webnya. Bayangkan apa yang terjadi bila hacker berhasil mendapatkan seluruh file php dan “database dump” dalam satu file zip? Kalau anda berpikir itu tidak mungkin terjadi, anda salah besar, karena saya sering menemukan file backup berekstensi zip, tar.gz, atau sql berserakan di websitenya.
  • Halaman Login
Ada banyak macam halaman login, umumnya adalah halaman login untuk mengelola isi website, yaitu CMS Administrator. Selain CMS, halaman login yang lain adalah phpMyAdmin, cpanel, Tomcat Admin Page, AXIS2 Admin Page dll. Tomcat dan AXIS2 adalah Java based webserver dan web service platform.
Kenapa halaman login termasuk sensitif? Karena dengan mengetahui URL untuk menjadi Administrator website, seorang hacker bisa melakukan serangan SQL Injection, password guessing, dictionary attack dan brute force attack untuk membuat dirinya menjadi seorang administrator di website anda. Celakanya banyak website yang halaman login adminnya tidak menggunakan password yang kuat, bahkan menggunakan password default.
  • Log file
Log file biasanya dipakai untuk tujuan debugging atau penelusuran kesalahan oleh web developer. Karena itu tidak heran bila dalam log file banyak mengandung informasi sensitif yang bisa dimanfaatkan hacker. File log ini berbeda-beda tergantung dari web aplikasi yang dipakai karena web developer punya kebebasan untuk membuat  atau tidak membuat file log.
Salah satu contoh log file yang biasa ditemukan di web adalah WS_FTP.LOG, file ini dibuat oleh program WS_FTP, yaitu FTP Client. Setiap kali memakai program ini untuk upload ke web anda, WS_FTP akan otomatis memasukkan file WS_FTP.LOG ke dalam folder website anda. Dalam file WS_FTP.LOG ini seorang hacker bisa mendapatkan banyak informasi sensitif: antara lain IP address web server anda (banyak web yang menyembunyikan IP address sebenarnya dibalik NAT), full path lokasi document root web anda, username account hosting anda (bila dalam full path mengandung nama seperti /home/username/…./).
WS_FTP.LOG juga bisa membocorkan isi sebuah direktori bila anda sudah mematikan fitur “Directory Indexing” atau membuat file index.html kosong. Seorang hacker yang tidak bisa melihat isi direktori karena directory index dimatikan atau ada file index.html kosong, bisa mencoba membuka WS_FTP.LOG di direktori itu. Bila ternyata file WS_FTP.LOG ada, maka file log itu akan membocorkan isi file dalam direktori tersebut.
Pesan error di atas umumnya dijumpai pada direktori yang ada, tapi directory indexing tidak diaktifkan, sehingga anda harus menebak nama file yang ada di direktori tersebut. Bila directory indexing diaktifkan, maka anda akan menemukan halaman dengan title “Index of /”.
  • Versi Lama
Terkadang ketika sebuah website diupdate ke versi baru, file-file script lama disimpan dalam satu direktori bernama oldversion, version1 dan versi barunya dalam direktori /new/ atau /ver2/ atau /beta/. Menemukan beragam versi suatu web adalah kesempatan emas untuk menemukan celah keamanan karena biasanya web versi terbarunya memang tidak mengandung kelemahan, namun bila kita berhasil menemukan versi lamanya, akan ditemukan banyak celah keamanan.
Saya pernah menemukan sebuah website yang securitynya bagus, saya tidak menemukan vulnerability di sana, namun ternyata dia lupa membuang versi lama dari web tersebut. Namun ternyata web versi lama yang mengandung banyak bug dari SQL injection sampai local file injection masih bisa diakses di direktori lain. Walaupun web versi terbaru securitynya bagus, namun jadi tidak berarti apa-apa karena hacker bisa menyerang dari web versi lamanya.
Berburu Direktori dan File Sensitif
Nama direktori atau file bisa ditemukan dengan 2 cara:
  • Crawling
Crawling ini adalah cara yang dipakai oleh search engine untuk mendapatkan isi website anda.  Ini adalah cara yang “sopan”, karena kita hanya mencari apa yang memang disediakan oleh pemilik webnya. Search engine crawling akan mengikuti direktori apa yang boleh dan apa yang tidak boleh diambil dalam file /robots.txt. Jadi bila ada direktori sensitif yang bisa di-search di Google, maka itu terjadi karena di suatu situs ada pointer ke obyek itu berupa link. Bila di seluruh jagat internet ini tidak ada satupun link ke direktori itu, maka tidak mungkin direktori itu muncul di Google.
Kita bisa memanfaatkan Google Hacking untuk mencari direktori sensitif yang sengaja atau tidak sengaja ter-index oleh Google. Kita juga bisa membuat script atau memakai program semacam wget untuk melakukan crawling website  (tidak memanfaatkan Google index). Menjalankan crawler sendiri terkadang diperlukan bila kita ingin melakukan crawling direktori yang search engine dilarang untuk masuk (diblacklist di /robots.txt).
  • Guessing
Bila dengan cara sopan tidak mendapatkan direktori sensitif, maka kita terpaksa pakai cara “kasar”. Mendapatkan direktori sensitif dengan cara ini sama dengan menebak password. Ada dua cara yang bisa dipakai:
  1. Pure Brute Force Attack
  2. Cara ini adalah cara yang paling kasar. Kita mencoba semua kemungkinan kata yang muncul dari huruf , angka dan karakter lain sebagai nama direktori atau nama file. Contoh: request /aa/, lalu /ab/, lalu /ac/, lalu /ad/, demikian seterusnya sampai semua kemungkinan yang ada dicoba. Cara ini membutuhkan waktu yang sangat lama, jadi kurang efektif. Tapi kelebihannya adalah tidak ada direktori yang lolos, karena semua kemungkinan akan dicoba.
  3. Dictionary Attack
  4. Ini adalah cara yang lebih sopan dibanding pure brute force. Kita menggunakan kamus, yaitu kumpulan nama yang akan kita pakai untuk request ke web server. Efektif tidaknya cara ini tergantung dari bagaimana kualitas kamus yang dipakai. Semakin baik kualitas kamusnya, semakin besar kemungkinan berhasil mendapatkan direktori sensitif. Kamus yang baik adalah kamus berisi kata yang memang benar-benar pernah dipakai untuk nama direktori, jadi bukan nama fiktif atau karangan.
DirBuster dari OWASP
Dalam artikel ini saya akan menggunakan tools gratisan, DirBuster yang dibuat oleh OWASP (Open Web Application Security Project), sebuah kelompok non-profit yang berfokus pada keamanan web. Seperti yang sudah saya katakan sebelumnya, kekuatan tools semacam ini tergantung pada kualtias kamus yang dimilikinya.
DirBuster memiliki kamus yang sangat lengkap, bukan nama fiktif yang tidak pernah dipakai, tapi memang benar-benar nama yang pernah dipakai sebagai nama direktori. Kumpulan nama ini didapatkan dari internet dengan cara melakukan crawling terhadap situs-situs internet lalu mengelompokkannya. Kumpulan nama yang dipakai minimal 3 situs berbeda ditaruh di file dengan akhiran small.txt, kumpulan nama yang dipakai minimal 2 situs berbeda ditaruh di file dengan akhiran medium.txt, dan semua nama yang ditemukan ditaruh dalam file berakhiran big.txt.
Bila anda membutuhkan daftar nama direktori saja untuk dipakai di program lain, anda juga bisa mendownload kamusnya saja tanpa harus mendownload DirBuster.
Tools ini sangat mudah digunakan, jadi silakan saja langsung download DirBuster. Sebelumnya pastikan dulu komputer anda sudah terinstall Java, karena tools ini dibuat dengan Java.
Scanning Type
Ada dua jenis scanning yang bisa dilakukan, pure brute force atau dictionary based attack. Bila anda memilih memakai teknik pure brute force, maka anda harus menentukan character set (kumpulan karakter) yang akan dijadikan nama direktori dan tentukan juga panjang minimal dan maksimalnya. Semakin besar populasi dari character set yang anda pilih dan semakin panjang max length yang anda pilih, semakin besar kumpulan kata yang dihasilkan, itu artinya dibutuhkan waktu yang semakin lama untuk mencoba semuanya. Gambar di bawah ini adalah screenshot ketika memilih pure brute force.
Bila memilih list based brute force, maka kita harus memilih file berisi daftar nama direktori. DirBuster sudah menyediakan banyak dictionary yang bisa dipilih sesuai kebutuhan:
  • directory-list-2.3-small.txt  (87650 words) : Minimal dipakai di 3 situs berbeda.
  • directory-list-2.3-medium.txt  (220546 words) : Minimal dipakai di 2 situs berbeda.
  • directory-list-2.3-big.txt  (1273819 words) : Minimal pernah dipakai.
  • directory-list-lowercase-2.3-small.txt  (81629 words) : Versi case insensitive dari directory-list-2.3-small.txt
  • directory-list-lowercase-2.3-medium.txt  (207629 words) : Versi case insensitive dari directory-list-2.3-medium.txt
  • directory-list-lowercase-2.3-big.txt  (1185240 words) : Versi case insensitive dari directory-list-2.3-big.txt
  • directory-list-1.0.txt  (141694 words)  : Daftar awalnya, tidak terurut
  • apache-user-enum-1.0.txt  (8916 usernames) : Dipakai untuk user enumeration, mendapatkan valid username di sebuah server
  • apache-user-enum-2.0.txt  (10341 usernames) : Dipakai untuk user enumeration
Dalam list yang disediakan DirBuster juga menyediakan daftar username yang dipakai untuk user enumeration, yaitu mendapatkan nama user yang valid di sebuah server. Dalam web server Apache yang mengaktifkan mod_userdir, bisa dilakukan user enumeration dengan cara menggunakan ~namauser sebagai nama direktori.
Gambar di bawah ini adalah screenshot ketika kita memilih menggunakan dictionary attack.
Starting Options
Pilihan lain yang harus dipilih adalah starting options, yaitu di mana titik mulainya DirBuster mencari direktori. Pilihannya adalah standard start point, atau URL Fuzz. Standard start point adalah pilihan yang paling banyak digunakan karena pilihan ini berarti kita meminta DirBuster untuk menggunakan nama direktori sebagai titik awal.
Pilihan yang ada ketika kita memilih Standard Start Point adalah checkbox Brute Force Dirs yang bisa dimatikan bila kita tidak ingin ingin membrute Direktori. Brute Force Files bisa dimatikan bila kita tidak ingin mencari file. Dua pilihan tersebut bisa diatur sesuai kebutuhan, apakah ingin mencari direktori dan nama file, atau direktori saja, atau nama file saja.
Pilihan File extention bisa diisi dengan ekstensi file yang ingin dicari, misalnya bisa kita isi dengan php, zip, gz, tar.gz. Namun bila kita tidak ingin menggunakan ekstensi, kita bisa centang pilihan Use Blank Extention.
Pilihan Be Recursive digunakan untuk membuat DirBuster melakukan pencarian secara mendalam (Deep First Search), yaitu mencari subdirektori dalam sebuah direktori, mencari sub-subdirektori dalam subdirektori dan seterusnya sampai kedalaman tertentu.
Ada kalanya kita harus membrute force nama direktori yang merupakan bagian dari parameter URL. Dalam kasus seperti itu kita bisa memakai pilihan URL Fuzz. Salah satu contoh kasusnya adalah ketika kita ingin melakukan scanning melalui sebuah web based proxy seperti PHPProxy.
Ketika kita ingin scanning website internal dengan IP address private dari website public yang sudah berhasil kita susupi, kita bisa gunakan PHProxy. URL PHProxy biasanya berbentuk http://somewebsite/myproxy/?q=http://situstarget/{dir}. Dalam kasus seperti ini, pilihan URL Fuzz bisa sangat berguna. Gambar di bawah ini menunjukkan skenario tersebut. Setelah seorang hacker berhasil menguasai web server public, dia akan mengupload web based proxy seperti PHProxy. Dengan proxy tersebut hacker bisa melebarkan serangannya ke arah dalam dengan menyerang web server internal yang tidak bisa dijangkau dari internet.
Walaupun tools ini sangat sederhana, tapi jangan remehkan keampuhannya. Silakan coba saja sendiri, mungkin nanti anda akan terkejut melihat banyaknya webmaster yang sembrono menaruh file/direktori sensitif di websitenya.

TUNNELING

SSH Tunneling adalah teknik yang wajib dikuasai hacker. Teknik ini sangat cocok dipakai sebagai backdoor dari  dunia luar langsung menembus ke dalam “behind enemy lines” melewati semua firewall, IDS, IPS atau apapun itu di perbatasan. Dalam artikel ini saya juga menjelaskan bagaimana melakukan chaining tunnel, yaitu menyambung tunnel dengan tunnel lain.
Apa itu Tunneling?
Secara sederhana tunneling berarti mengirimkan data melalui koneksi lain yang sudah terbentuk. Kalau anda buka situs internet banking, pasti anda akan membukanya dengan URL berawalan “https”, yang sejatinya adalah data dalam protokol HTTP yang dikirimkan melalui koneksi dengan protokol SSL, atau “HTTP over SSL”, dalam bahasa gaulnya berarti HTTP digendong sama SSL.
SSH dan SSL adalah dua contoh tunneling protocol, keduanya bisa dipakai untuk menggendong data dalam protokol apa saja (tidak hanya http). Hanya bedanya adalah pada SSL dibutuhkan public key certificate dalam format X.509 yang perlu diverifikasi melalui Certificate Authority resmi. SSH tidak memerlukan public key certificate, sehingga lebih sederhana dan lebih mudah dipakai.
Protocol Encapsulation
Dalam kasus https, data dalam protokol HTTP di-enkapsulasi (dibungkus) dalam protokol SSL sebagai payload. Enkapsulasi juga terjadi dalam layer model TCP/IP, yaitu data pada layer yang lebih atas menjadi payload dan di-enkapsulasi dengan protokol pada layer di bawahnya.
Anda tentu tahu boneka lucu terbuat dari kayu dari Rusia bernama Matryoshka. Keunikan boneka ini adalah boneka yang berukuran kecil bisa dimasukkan ke dalam boneka yang lebih besar, dan boneka yang lebih besar juga bisa dimasukkan ke dalam boneka yang lebih besar lagi hingga pada akhirnya hanya ada satu boneka saja yang paling besar. Bila boneka yang paling besar itu dibuka, maka di dalamnya akan ada satu boneka yang lebih kecil, bila boneka tersebut dibuka, maka akan ditemukan boneka lagi yang lebih kecil, demikian seterusnya hingga boneka yang terkecil.
Gambar di bawah ini sangat tepat menggambarkan apa itu protocol encapsulation.

Gambar di atas menggambarkan bagaimana data ketika dikirim dienkapsulasi dan dikirimkan melalui protokol yang berada pada layer di bawahnya. Pada gambar di atas bisa dikatakan bahwa email message tersebut dikirimkan dalam bentuk paket SMTP over TCP over IP over Ethernet. Jadi pada akhirnya semua data tersebut akan terkirim dalam bentuk paket ethernet.
Dalam ilustrasi boneka matryoshka, pesan email adalah boneka matryoshka terkecil. Boneka ini dimasukkan dalam boneka matryoshka SMTP yang ukurannya lebih besar, kemudian boneka matryoshka SMTP ini dimasukkan dalam boneka matryoshka TCP, kemudian boneka matryoshka TCP ini dimasukkan dalam boneka matryoshka IP, dan akhirnya dimasukkan ke dalam boneka matryoshka ethernet yang berukuran paling besar.
Jadi boneka matryoshka yang diterima lawan biacara adalah boneka matryoshka yang terbesar. Bila boneka ini dibuka, di dalamnya ada boneka Matryoshka IP yang lebih kecil, dan bila boneka ini juga dibuka, di dalamnya ada boneka matryoshka TCP yang semakin kecil ukurannya. Bila boneka matryoshka TCP ini dibuka, di dalamnya ada boneka matryoshka SMTP yang didalamnya ada matryoshka email message. Email message adalah boneka matryoshka terkecil.
Port Forwarding
Port forwarding atau port mapping pengalihan (redirection) koneksi dari suatu IP:Port ke IP:Port yang lain.  Ini artinya adalah semua koneksi yang ditujukan ke IP:Port asal akan dialihkan ke IP:Port tujuan seolah-olah client sedang menghubungi IP:Port tujuan secara langsung.
Contoh: bila kita definisikan port forwarding 127.0.0.1:8080 dipetakan ke 192.168.10.10:80, artinya bila browser di arahkan ke url http://127.0.0.1:8080, maka request HTTP tersebut akan diteruskan ke 192.168.10.10:80. Jadi walaupun pada localhost (127.0.0.1) port 8080 tidak ada web server, namun web browser bisa membuka web pada url http://localhost:8080.
Gambar di bawah ini adalah contoh port forwarding dari web nakahara-informatics.com.
Pada port forwarding tersebut, didefinisikan sehingga klien dari dunia luar bisa mengakses service yang ada pada jaringan internal. Port forwarding yang didefinisikan adalah:
  • 64.130.31.59:10004 –> 192.168.1.103:22
  • Artinya untuk SSH ke host 192.168.1.103, maka client harus ssh ke IP 64.130.31.59 port 10004.
  • 64.130.31.59:10001 –> 192.168.1.100:22
  • Artinya untuk SSH ke host 192.168.1.100, maka client harus ssh ke IP 64.130.31.59 port 10001.
  • 64.130.31.59:8080 –> 192.168.1.102:80
  • Artinya untuk mengakses halaman web di host 192.168.1.102, maka url yang harus dibuka di browser adalah http://64.130.31.59:8080
Port forwarding pada ssh, mirip dengan port forwarding pada gambar di atas, namun ada sedikit perbedaan. Pada port forward gambar di atas, titik koneksi masuk dan keluar sama, artinya koneksi masuk ke IP dan port tertentu, dan koneksi tersebut akan diforward ke tempat lain dari titik yang sama juga. Sedangkan port forwarding pada ssh, titik keluarnya berbeda dengan titik masuknya. Agar lebih jelas, silakan lihat gambar di bawah ini.
Pada gambar di atas pada bagian atas, koneksi yang masuk di titik masuk, diforward ke tujuan dari titik itu juga. Ini adalah tipikal port forwarding di router/proxy. Sedangkan pada gambar di bawahnya, koneksi yang masuk di titik masuk, diforward ke tujuan dari titik lain di ujung sebelah kanan. Kotak panjang yang menghubungkan dua titik berwarna oranye tersebut menggambarkan koneksi ssh. Koneksi yang masuk akan diforward dari ujung koneksi ssh, bukan dari titik masuknya.
Konsep SSH Tunneling
SSH adalah protokol yang multiguna, selain untuk menggantikan telnet, SSH juga mendukung fitur tunneling, port forwarding, download/upload file (Secure FTP), SOCKS proxy dsb. Semua fitur tersebut dibungkus dengan enkripsi sehingga data yang lewat melalui protokol ini aman dari jangkauan hacker.
Dalam ssh tunneling, data yang dikirimkan melalui koneksi ssh akan di-enkapsulasi (dibungkus) dalam paket SSH seperti pada gambar di bawah ini.
Selain enkapsulasi paket, dalam ssh tunnel juga dibutuhkan port forwarding. Port forwarding dalam SSH tunnel ada 3 jenis:
  • Local Port Forwarding
  • Remote Port Forwarding
  • Dynamic Port Forwarding
Perhatikan gambar di bawah ini untuk memahami perbedaan antara local port forwarding dan remote port forwarding.
Dari gambar di atas jelas terlihat bahwa perbedaan antara local dan remote port forwarding.
  • Pada local port forwarding, komputer yang bertindak sebagai ssh client akan menjadi titik masuk koneksi yang akan diforward dan komputer yang bertindak sebagai ssh server menjadi titik keluar. Jadi koneksi yang masuk ke titik masuk di komputer ssh client akan diforward ke tujuan dari komputer ssh server. Gambar di bawah ini ilustrasi lain dari ssh local port forwarding.

  • Pada remote port forwarding, komputer yang bertindak sebagai ssh server akan menjadi titik masuk koneksi yang akan diforward dan komputer yang bertindak sebagai ssh client menjadi titik keluar. Jadi koneksi yang masuk ke titik masuk di komputer ssh server akan diforward ke tujuan dari komputer ssh client. Gambar di bawah ini ilustrasi lain dari ssh remote port forwarding.
Jadi yang perlu diingat dalam perbedaan antara local dan remote port forwarding adalah posisi titik masuk koneksi yang akan diforward. Bila titik masuknya ada di komputer yang berperan sebagai ssh client, maka itu adalah local port forwarding, namun bila titik masuknya di komputer ssh server, maka itu adalah remote port forwarding.
Dalam bahasa sederhananya, disebut local karena dari sudut pandang ssh client, titik masuknya ada di localhost, dan disebut remote karena titik masuknya bukan di localhost, tapi di komputer ujung sana.
Static vs Dynamic Port Forwarding
Sebenarnya dynamic port forwarding termasuk local port forwarding juga karena pada dynamic port forwarding, titik masuk koneksi yang akan diforward berada di komputer yang berperan sebagai ssh client. Namun pada local dan remote port forwarding biasa (static), IP address dan port asal dan tujuan harus disetting dulu sebelum bisa dipakai, jadi sifatnya statis.
(static) local port forwarding
Gambar di atas adalah (static) local port forwarding biasa. Pada local port forwarding biasa (static), setiap pemetaan port asal dan IP:port tujuannya harus disetting satu per satu. Jadi terlihat pada gambar di atas, bila ada 3 tujuan yang ingin dihubungi, maka 3 pemetaan port asal dan IP:port tujuan harus disetting semua sebelum bisa dipakai.
Pada gambar di atas terlihat di ssh client ada 3 port yang LISTEN (3 bulatan merah di sisi ssh client)  untuk 3 tujuan yang berbeda. Perlu dicatat juga bahwa ketiga pemetaan port forwarding tersebut dilakukan di atas satu koneksi ssh yang sama (multiple port forwarding on single ssh conection).
dynamic (local) port forwarding
Sedangkan pada dynamic (local) port  forwarding, kita tidak perlu menentukan pemetaan port asal dan IP:tujuan untuk setiap tujuan. Kita hanya perlu menentukan port berapa yang akan LISTEN di localhost (di komputer ssh client), dan semua aplikasi bisa memanfaatkan port tersebut sebagai proxy ke tujuan manapun dengan protokol SOCKS (SOCKS proxy). Berbeda dengan gambar sebelumnya, pada dynamic port forwarding di sisi ssh client hanya ada satu port yang LISTEN (hanya ada satu bulatan merah).
Multiple Port Forwarding on Single SSH Connection
Walaupun jarang dipakai, namun sebenarnya ssh mendukung banyak port forwarding dalam satu koneksi ssh. Kalau kita membutuhkan 3 local port forwarding dan 4 remote port forwarding, kita tidak perlu membuat 7 koneksi ssh, cukup satu koneksi ssh saja.
multi port forwarding on a single ssh connection
Gambar di atas memperlihatkan ilustrasi multi port forwarding pada satu koneksi ssh yang sama. Dalam satu koneksi ssh tersebut port forwarding yang dibuat adalah:
  • Panah berwarna hitam paling atas adalah local port forwarding.
  • Panah berwarna biru dan biru gelap di tengah adalah dynamic port forwarding.
  • Panah berwarna hijau paling bawah adalah remote port forwarding.
Daripada membuat 3 koneksi ssh untuk masing-masing port forwarding, jauh lebih sederhana dan praktis membuat multi port forwarding pada satu koneksi ssh.
Membuat Local Port Forwarding
Sekarang setelah memahami konseptualnya, kita langsung praktek bagaimana membuat ssh tunnel dengan putty di Windows dan command line ssh di Linux.Command untuk membuat local port forwarding secara umum adalah:
ssh -L localport:servertujuan:porttujuan user@ssh_server
Contohnya adalah:
ssh -L 8888:www.kompas.com:80 admin@serverku.com
Perintah di atas akan membuat semua koneksi ke port 8888 di localhost, dialihkan ke www.kompas.com port 80 melalui serverku.com. Titik masuknya adalah localhost:8888 dan titik keluarnya adalah serverku.com. Bila kita membuka browser ke URL http://localhost:8888, request HTTP tersebut akan sampai di www.kompas.com:80 melalui serverku.com, artinya dari sudut pandang www.kompas.com koneksi berasal dari serverku.com, bukan dari komputer yang menjalankan perintah tersebut. Dalam log web server www.kompas.com, IP address visitor adalah ip address serverku.com, bukan ip address komputer yang menjalankan perintah tersebut.
Kalau dalam windows, kita bisa gunakan putty.exe untuk membuat local port forwarding tunnel. Gambar di bawah ini adalah setting untuk forward koneksi localhost:8888 ke www.kompas.com:80. Caranya adalah dengan memasukkan 8888 ke dalam field “Source port”, dan memasukkan www.kompas.com:80 ke dalam field “Destination”. Setelah itu klik “Add”. Anda bisa menambahkan port forwarding yang lain sebanyak yang anda butuhkan dengan mengulang cara yang sama lalu klik “Add” lagi.

Membuat Remote Port Forwarding
Command untuk membuat remote port forwarding di Linux secara umum adalah:
ssh -R remoteport:servertujuan:porttujuan user@ssh_server
Contohnya adalah:
ssh -R 8080:192.168.1.1:80 admin@serverku.com
Perintah di atas akan membuat setiap koneksi ke serverku.com:8080 akan dialihkan ke 192.168.1.1 melalui komputer yang menjalankan perintah tersebut. Pada log server tujuan (192.168.1.1:80) yang terlihat dari koneksi yang masuk bukan ip address serverku.com. Server 192.168.1.1:80 akan melihat koneksi berasal dari komputer yang menjalankan perintah di tersebut (komputer ssh client).
Kalau dengan putty caranya masukkan 9999 ke dalam kolom “Source port”, kemudian masukkan 192.168.1.1:80 sebagai kolom “Destination”, lalu klik Add. Anda bisa menambahkan banyak port forwarding dalam satu koneksi ssh, dengan cara yang sama, lalu klik Add sebanyak yang anda butuhkan.

Remote port forwarding ini sangat cocok dipakai sebagai backdoor. Bila seorang hacker telah berhasil menyusup hingga “behind enemy lines”, dia bisa membuat remote port forwarding tunnel dari “behind enemy lines” ke server di luar milik hacker. Ini artinya hacker telah membuat terowongan, dengan pintu masuk di luar, dan pintu keluar di “behind enemy lines”. Ingat pada Remote port forwarding, titik/pintu masuk adalah di sisi ssh server, dan titik/pintu keluar di ssh sisi client. Dengan memakai terowongan ini, hacker bisa masuk melalui pintu di servernya sendiri yang berada di luar, dan secara otomatis hacker tersebut masuk ke “behind enemy lines” karena pintu keluar dari terowongan ini ada di “behind enemy lines”.
Chaining Tunnel
Terkadang ketika melakukan penetrasi, di dunia nyata keadaan tidaklah semulus dan seindah teori atau dalam lab. Firewall seringkali membuat kita tidak bisa bebas membuat koneksi ke server yang kita inginkan. Dalam situasi seperti ini kita harus berputar-putar melalu beberapa server, sampai kita bisa mencapai server target.
Perhatikan gambar di atas, target yang akan diserang hacker adalah server D.D.D.D port 3389, yaitu Remote Desktop connection, hacker ingin melakukan remote desktop komputer tersebut. Namun server D hanya bisa diakses oleh server C, dan server C hanya bisa diakses dari A. Hacker sudah menguasai penuh server A dan C, bagaimana caranya hacker tersebut bisa remote desktop ke D ?
Tujuan akhirnya adalah hacker ingin koneksi ke localhost:9999 di laptop backtracknya, akan diforward ke D.D.D.D:3389. Jadi nanti dia tinggal menjalankan RDP client dengan memasukkan localhost:9999, dan dia otomatis akan terkoneksi ke RDP di server D. Sebagai info tambahan, komputer A dan C adalah linux dengan ssh service diaktifkan.
Mari kita coba membuat semua tunnel ini purely hanya dengan ssh.
1. Buat port forwarding localhost:9999 –> C.C.C.C:8888 via A.A.A.A.
Hacker menjalankan ssh client di backtracknya untuk membuat koneksi ke ssh server A.A.A.A. Dalam koneksi ssh ini, dia membuat local port forwarding 9999:C.C.C.C:8888, yang artinya adalah koneksi ke port 9999 di backtrack si hacker akan diforward ke C.C.C.C:8888 via A.A.A.A.
2. Buat port forwarding C.C.C.C:8888 –> D.D.D.D:3389 via C.C.C.C
Di komputer C, hacker membuat koneksi ssh ke localhost (ke C itu sendiri). Dalam koneksi ssh ke diri sendiri ini dia membuat local port forwarding 8888:D.D.D.D:3389. Artinya adalah koneksi ke C.C.C.C:8888 akan diforward ke D.D.D.D:3389 (via C.C.C.C itu sendiri).
Kita membuat 2 tunnel, yang pertama adalah tunnel dengan pintu masuk di backtrack hacker dan pintu keluar di A.A.A.A. Tunnel kedua adalah denngan pintu masuk dan pintu keluar di C juga.
Pada tunnel pertama, koneksi ke pintu masuk di backtrack hacker (localhost:9999), akan diforward ke C.C.C.C:8888 via A.A.A.A Sedangkan pada server C.C.C.C sudah dibuat port forwarding sehingga semua koneksi yang masuk ke C.C.C.C:8888 akan diforward menuju D.D.D.D:3389.
Jadi akhirnya nanti alurnya adalah:
localhost:9999 –> C.C.C.C:8888 –> D.D.D.D:3389

Gambar di atas menunjukkan chain tunnel yang dibuat. Koneksi ke localhost:9999 akan diteruskan ke C.C.C.C:888 dan koneksi ke C.C.C.C:8888 akan diteruskan ke D.D.D.D:3389. Jadi sama artinya dengan koneksi ke localhost:9999 diteruskan ke D.D.D.D:3389.