Monday, February 20, 2017

Highcharts Get Data From URL With Codeigniter

It's tutorial access data json from URL with Codeigniter .

  1. Your have data from your tables/database
  2. Create Models, sample i try highchart to My Dashboard.
  3. defined('BASEPATH') OR exit('No direct script access allowed');
    
    class DashboardModel extends CI_Model {
    
     public function dataAccount()
     {
      $sql = "
       SELECT
       *
       FROM
       (SELECT COUNT(ACCOUNT_USERNAME) AS HRMANAGER FROM MST_ACCOUNT WHERE ACCOUNT_LEVEL = '1'),
       (SELECT COUNT(ACCOUNT_USERNAME) AS HRADMIN FROM MST_ACCOUNT WHERE ACCOUNT_LEVEL = '2'),
       (SELECT COUNT(ACCOUNT_USERNAME) AS TRAINING FROM MST_ACCOUNT WHERE ACCOUNT_LEVEL = '3'),
       (SELECT COUNT(ACCOUNT_USERNAME) AS SUPERVAISOR FROM MST_ACCOUNT WHERE ACCOUNT_LEVEL = '4')
      ";
    
      $result = $this->db->query($sql)->result();
    
      return $result;
     }
    
    }
    
    /* End of file DashboardModel.php */
    /* Location: ./application/models/DashboardModel.php */
    
  4. In the controller
  5. defined('BASEPATH') or exit('No direct script access allowed');
    
    class Dashboard extends CI_Controller
    {
    
        public $page = 'Dashboard';
    
        public function __construct()
        {
            parent::__construct();
            //Load Dependencies
    
            $this->load->model('DashboardModel');
        }
    
        public function index()
        {
            $this->content = 'dashboard/HrManagerIndexView';
    
            $this->layout(
                (!empty($data)) ? $data : null,
                $addCss = array(
                    'assets/css/ace.min.css',
                    'assets/css/ace-rtl.min.css',
                ),
                $addJs = array(
                    'assets/js/callJsMobile.js',
                    'assets/js/bootstrap.min.js',
                    'assets/plugin/highcharts/highcharts.js',
                    'assets/plugin/highcharts/modules/exporting.js',
                    'assets/plugin/highcharts/modules/data.js',
                    'assets/plugin/highcharts/modules/drilldown.js',
                    'assets/js/ace-elements.min.js',
                    'assets/js/ace.min.js',
                    'assets/js/custome/DashboardManager.js',
                )
            );
        }
    
        /*    Dashboard Data Report    */
        public function getDataAccount()
        {
            $list = $this->DashboardModel->dataAccount();
    
            $total       = array($list[0]->HRMANAGER, $list[0]->HRADMIN, $list[0]->TRAINING, $list[0]->SUPERVAISOR);
            $resultTotal = array_sum($total);
    
            foreach ($list as $value) {
                $data = array(
                    'name'         => 'Total Data',
                    'colorByPoint' => true,
                    'data'         => array(
                        array('name' => 'HRMANAGER', 'y' => $this->nameformat->chartCeil($value->HRMANAGER, $resultTotal)),
                        array('name' => 'HRADMIN', 'y' => $this->nameformat->chartCeil($value->HRADMIN, $resultTotal)),
                        array('name' => 'TRAINING', 'y' => $this->nameformat->chartCeil($value->TRAINING, $resultTotal)),
                        array('name' => 'SUPERVAISOR', 'y' => $this->nameformat->chartCeil($value->SUPERVAISOR, $resultTotal)),
                    ),
                );
            }
    
            echo json_encode($data, JSON_PRETTY_PRINT);
        }
    
    }
    
    /* End of file Dashboard.php */
    /* Location: ./application/controllers/Dashboard.php */
    
  6. In View

  7. In Javascript
  8. $(document).ready(function() {
        var chartAccount = {
            chart: {
                renderTo: 'chartAccount',
                plotBackgroundColor: null,
                plotBorderWidth: null,
                plotShadow: false,
                type: 'pie'
            },
            title: {
                text: 'Summary Data Account Academy'
            },
            tooltip: {
                pointFormat: '{series.name}: {point.percentage:.1f}%'
            },
            plotOptions: {
                pie: {
                    allowPointSelect: true,
                    cursor: 'pointer',
                    dataLabels: {
                        enabled: false
                    },
                    showInLegend: true
                }
            },
            series: [{}]
        };
    
        var urlChartAccount = base_dash + 'getDataAccount';
        $.getJSON(urlChartAccount, function(data) {
            chartAccount.series[0] = data;
            var chart = new Highcharts.Chart(chartAccount);
        });
    });
    

Refrensi: http://www.highcharts.com/docs/working-with-data/getting-data-across-domains-jsonp

Friday, February 17, 2017

Writeup CTF AgriHack

Ini adalah kali kedua saya mengikuti CTF (Capture The Flag) yang diadakan oleh IPB yang bernama AgriHack, sebelumnya pernah ikut juga CTF yang diselengarakan oleh Noosc pada tahun 2014 lalu . Saya memang tidak pernah menang dan selalu gagal ditengah-tengah soal karena minimnya ilmu pengetahuan saya dalam dunia keamanan komputer. Tapi saya tidak pernah menyerah untuk terus belajar dan belajar dari apa yang telah saya lalui selama ini, semoga dalam CTF selanjutnya saya bisa menjadi Finalis 😄 . Yap, langsung saja ini adalah writeup pertama saya juga tentang CTF yang saya ikuti, jadi maaf kalau memang ini tidak bagus dan juga ini tentang soal yang saya kerjakan. Tidak banyak rata-rata hanya soal basic saja yang saya dapat kerjakan 😄 .

  1. Kategori Basic:
    • Welcome
      • Soal: 
"Baca dengan seksama laman petunjuk dan submit flag yang ada di halaman itu. Soal ini cuma buat mengetes submission, jadi poinnya nol.”
      • Penyelesaian:
        • Buka halaman “Petunjuk “
        • Lalu copy “AGRI{selamat_datang!}”

    • Robots:
      • Soal:
“Cari 'robot' yang ada di web ini (challs.agrihack.party)”
      • Penyelesaian:
        • Sesuai instruksi yang diberikan, buka halaman http://challs.agrihack.party/ dengan ditambah “robots.txt” dibelakangnya.
        • Maka akan muncul tampilan seperti ini

        • Block text “flag-260516d19070365109bba49f69bfdcb1” kemudian ganti pada url “robots.txt” dengan text tersebut. Setelah itu akan muncul flag seperti gambar dibawah ini.


    • Header
      • Soal:
“Dapatkah kamu melihat header pada web ini ? “
      • Penyelesaian:
        • Buka web developer > network 
        • Reload halaman, kemudian pilih pada bagian URL halaman. Klik “Raw Headers”, cek pada kolom “Response headers:”
        • Maka akan muncul flag seperti gambar berikut
 


    • Xtract:
      • Soal:
“Pada linux kamu dapat mengekstraksi sebuah file yang terkompresi gzip dengan tools 'gzip'
$~ gzip -d (nama file).gz “
      • Penyelesaian:
        • Diberi file flag.txt.gz
        • Kemudian extract file dengan perintah yang telah diberi tahu
~/CTF$ gzip -d flag.txt.gz
        • Cek file dengan perintah cat lalu akan muncul flagnya, seperti dibawah ini
~/CTF$ cat flag.txt
AGRI{gzip_memang_ajib}


    • So easy
      • Soal:
“Carilah flag pada file executable ini. Program 'strings' pada linux dapat melakukan print 'printable characters' pada suatu file.
$ strings (nama file) "
      • Penyelesaian:
        • Diberi file soeasy.gz 
        • Langkah-langkah seperti sebelumnya yaitu extract file terlebih dahulu lalu untuk cek data seseuai informasi yang disampaikan
        • Untuk mempercepat mendapatkan flag tambahkan perintah “ | grep AGRI “ maka akan muncul hasil seperti ini 
~/CTF$ strings soeasy | grep AGRI
AGRI{d3lic1ou5_0m}

    • Source
      • Soal:
“Pak Agri sedang belajar membuat website, sepertinya ada sesuatu di website barunya tersebut.
http://cangkul.agrihack.party:40005/65a902ed680660a92d8b95509bada4bd-source”
      • Penyelesaian:
        • Buka link yang diberikan lalu klik kanan view source
        • Find kata “AGRI”, didapat flag pada komentar source 



    • MD5
      • Soal:
“MD5 merupakan fungsi satu arah. Pesan yang sudah diubah menjadi message digest tidak dapat dikembalikan lagi menjadi pesan semula.

Flag adalah hasil dari MD5 hash dari kata 'Ilmu Komputer IPB' (tanpa newline), jangan lupa format flagnya.”
      • Penyelesaian:
        • Maaf untuk soal ini saya lupa cara mengerjakannya :D

    • Base64
      • Soal:
“Base64 adalah metode yang digunakan untuk melakukan encoding terhadap data binary sehingga menjadi printable
Decode-lah string base64 ini: "YmFzZTY0X0VuY29kaW5nX0RhdGFfQmluYXJ5"
Jika kamu menggunakan linux kamu dapat menggunakan command berikut:
$~ echo -n (string base64) | base64 -d”
      • Penyelesaian:
        •  Lalu seperti yang diinformasikan maka akan muncul hasil flag seperti ini
~/CTF$ echo -n YmFzZTY0X0VuY29kaW5nX0RhdGFfQmluYXJ5 | base64 -d
base64_Encoding_Data_Binary
    • Bash
      • Soal:
“Bash adalah bahasa pemrograman yang ada linux. Pada Bash kamu dapat membuat folder, edit file, menghapus dan lainnya.
Pada soal ini terdapat 4096 file yang nama filenya adalah base64 suatu string acak. Flagnya terdapat disalah satu nama file.
Flag = base64decode(salah satu nama file)
Contoh membuat loop di bash
$~ for i in `seq 1 10`; do echo $i; done
$~ COUNTER=0; while [ $COUNTER -lt 10 ]; do echo "Ini nomer: $COUNTER"; let COUNTER=COUNTER+1 ; done”
      • Penyelesaian:
        • Diberi file bash.tar.gz
        • Extract file tersebut 
        • Dikarenakan saya kurang bisa untuk bash jadi saya menggunakan script PHP ^^
        • Okeh langsung saya buat file php untuk ambil datanya kurang lebih seperti ini
~/CTF$ cat /var/www/html/coret2/sendiri/tester.php 
<?php
$dir    = 'soal/';
$files1 = scandir($dir);

foreach ($files1 as $row) {
echo base64_decode($row) . "<br>";
}
    • Spectogram
      • Soal:
“Spectogram di audio bisa dipakai untuk menyimpan data. Carilah data pada tersembunyi pada audio ini.
NB: Hati-hati dengan volume suara audio ini. ”
      • Penyelesaian:
        • Install dahulu “Audacity”
        • Open file, silahkan rubah format audio ke “Spectrogram” maka akan muncul flag seperti gambar dibawah ini
 

    • Netcat
      • Soal:
“Pak Agri sangat kesal dengan anak bungsunya yang berumur 3 bulan. Ia kesal karena si anak tidak bisa menjawab pertanyaan matematika.
Pak Agri: Nak, berapa 143 + 217 ?
Anak bungsu: gugu gaga, paaaa paaa
Pak Agri: Dasar anak *****!. Belajar sana!!
Akhirnya pak Agri membuat sebuah service untuk anaknya belajar matematika.
kandang.agrihack.party 30001”
      • Penyelesaian:
        • Pertama install dahulu netcat
        • Lalu akses kandang.agrihack.party 30001
~/CTF$ netcat kandang.agrihack.party 30001
Berapa 189 + 49 ?
238
AGRI{netcat_itu_bagai_swiss_army_knifenya_hacker} 

  1. Kategori Forensic:
    • Portal Agria
      • Soal:
“Bu Agria penasaran dengan apa yang ada di portal Pak Agria. Temukan passwordnya. "
      • Penyelesaian:
        • Install wireshark 
        • Open file yang telah diberikan
        • Untuk mempercepat bagaimana kita untuk mendapatkannya silahkan masukan filter  http.request.method == "POST"   
        • Maka akan muncul dua baris setelah dicek ada dua flag, tapi satu yang valid berikut hasilnya


Refrensi: http://stackoverflow.com/questions/3410505/sniff-http-packets-for-get-and-post-requests-from-an-application


Sebelumnya saya ucapkan banyak terimakasih kepada Panitia Penyelengara CTF ini, semoga tahun depan ada lagi dan saya bisa ikut kembali. Sebagai informasi tambahan untuk memahami tentang permainan CTF ini atau dunia computer security bisa belajar di channel Youtube Cyber Security IPB.

Thursday, February 16, 2017

How to access database in custom library codeigniter

  1. Create your library, example “sample.php”
  2. defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Sample
    {
     protected $ci;
    
     public function __construct()
     {
            $this->ci =& get_instance();
     }
    
     public function debug($id)
     {
      $table = $this->ci->db->get_where('table', array('id' => $id))->num_rows();
    
      if (empty($table)) {
       $result = 'table is empty';
      } else {
       $result = $table;
      }
    
      return $result;
     }
    
    }
    
  3. Load your library in controller
  4. defined('BASEPATH') OR exit('No direct script access allowed');
    
    class Testing extends READY_Controller {
    
     public $page = 'Training';
    
     public function __construct()
     {
      parent::__construct();
    
      //Load Dependencies
      $this->load->library('sample');
     }
    
     public function index()
     {
      $data['result'] = $this->db->get('table')->result();
    
      $this->load->view('sampleView', $data); 
     }
    
    }
    
  5. So, call function library in your views.
  6. foreach ($result as $row) {
    
    echo $this->sample->debug($row->id) . “\n\n\n”;
    
    }