17 May 2016

Percobaan Implementasi 6 Dof Robotic Arms (Lengan Robot)

Pagi yang cerah secerah hatiku...
Halo para pembaca sekalian apa khabar? Semoga dalam kondisi sehat dan damai sejahtera. Kembali Saya mau bercerita tentang uji coba Saya terhadap perangkat embedded system. Kebetulan Saya ada sedikit dana untuk membeli set perangkat ini yang terdiri dari 6 servo, serta rangkaian lengan disertai penjepitnya. Melalui rangkaian ini rencananya Saya mau membuat sebuah kamera CCTV dapat dikontrol arahnya. Namun lebih dari itu, Saya juga akan menggunakan komputer untuk mengontrol arahnya. Dengan adanya PC sebagai otak utama, maka Saya dapat memperluas imajinasi Saya untuk bermain-main dengan rangkaian yang sudah Saya siapkan ini. Harapan Saya bisa membuat sebuah kamera dapat menyorot objek target yang bergerak kemanapun dia pergi. Kalau ini berhasil, bisa dibikin berbagai macam :)

Sebagai percobaan tahap awal, Saya membuat aplikasi dengan bahasa pemrograman C# untuk mengontrol pergerakan lengan yang Saya rakit. Komunikasi yang Saya gunakan antara perangkat embedded system dengan PC adalah serial com (RS232). Dan Saya buat interface yang lebih dinamis dimana terdapat beberapa tombol-tombol yang mengatur arah perputaran setiap sudut-sudut dari pada lengan itu tadi, diantaranya memutar arah kiri atau ke kanan, turun naik setiap level, memutar lengan hingga buka tutup jepitan / genggaman.




Gambar: Interface (GUI) Aplikasi Pengontrol
 
Setelah pemrograman selesai lanjut compiledan deploy. Saya hubungkan perangkat lengan dengan embedded system ke komputer yang Saya gunakan. Lalu Saya coba melakukan koneksi dengan port yang sudah terbuka melalui tombol yang tersedia pada aplikasi. Dan sesuai yang Saya inginkan, semua berjalan dengan normal seperti yang ditunjukkan pada video ini.



Video:  6 Dof Robotic Arm: Demo With Serial Control

Demikianlah cerita nyata Saya kali ini :) Saya tahu ini kurang jelas, maklum karena keterbatasan waktu Saya hingga Saya hanya bisa menulis dengan rentang waktu yang lama dengan artikel sebelumnya. Namun jika ada pertanyaan, jangan sungkan untuk disampaikan ;)

Salam damai... Sampai ketemu kembali...

22 January 2016

Aplikasi Bantuan e Faktur Untuk Mempermudah Proses Import Pajak Keluaran dan Masukan

Tidak terasa hampir beberapa bulan Saya tidak sempat menulis, karena kesibukan Saya untuk membangun sistem ERP untuk perusahaan hingga lupa mengucapkan "SELAMAT NATAL 2015 DAN TAHUN BARU 2016" pada blog Saya ini, semoga melalui tulisan Saya di awal bulan tahun 2016 ini, bisa menjadi pelepas rindu dari Saya untuk para pembaca sekalian.

Beberapa bulan yang lalu, di tempat Saya bekerja khususnya bagian akunting/pajak mengalami sedikit kewalahan. Mereka mengatakan di awal 2016 untuk pelaporan pajak harus menggunakan aplikasi dari Pemerintah yaitu eFaktur. Jadi mereka sibuk mencari tutorial cara penggunaan aplikasi tersebut dan tentunya Saya juga turut turun bekerja untuk melakukan instalasi aplikasi eFaktur tersebut.

Selama perjalanan mengerjakan eFaktur memang belum ada kendala, dan mereka orang akunting/pajak yang sudah terbiasa dengan urusan pajak tidak begitu sulit untuk memahami aplikasi buatan Pemerintah tersebut. Namun seiring berjalan waktu, oleh karena jumlah transaksi yang tidak menentu seiring laris atau tidaknya penjualan atau pembelian terkadang akan mengakibatkan penumpukan. Dilema pada karyawan/i akhirnya terjadi. Banyak yang curhat kalau mereka lelah menginput satu per satu transaksi pajak ke e Faktur. Apalagi kebijakan Perusahaan yang mengurangi jatah lembur, atau malah karyawan/i yang tidak mau lembur akibat kelelahan maupun takut pulang malam, hehehehe :D

Akhirnya selidik punya selidik, Saya mencoba membuatkan aplikasi pembantu proses pengerjaan pajak keluaran dan masukan dengan beberapa fitur salah satunya yang terpenting adalah pembuatan file CSV agar mudah di import ke e Faktur. Berikut Video demonya:


Demo Video Aplikasi Pembantu e Faktur

Dari demo di atas, terlihat proses penginputan tidak lagi dilakukan satu per satu yang memakan waktu lama. Dari komentar salah satu pemakai/user yang telah menggunakan berpendapat "Secara manual mereka biasanya menyelesaikan 2 hari, dengan aplikasi ini, mereka dapat menyelesaikan hanya dengan 10 menit!!!!" Cukup senang mendengar komentar tersebut apalagi bisa membantu pekerjaan Perusahaan, jadi tambah semangat!

Baiklah, Akhir kata melalui tulisan ini Saya ingin menyampaikan, jika para pembaca ingin juga menggunakan aplikasi ini, jangan sungkan untuk menghubungi Saya. Salam manis. :D






17 September 2015

Instalasi Dan Konfigurasi Nginx Web Server, PHP, MYSQL, Web Application Firewall Naxsi Dan Web Testing Damn Vulnerable Web App Pada Sistem Operasi Linux Mint (Ubuntu)

Sebagai Developer yang namanya teknologi baru harus dicoba terus, walaupun hasilnya belum tentu memuaskan. Namun kali ini Saya sudah memperhitungkannya lebih dulu, apakah pantas untuk dicoba. Kebetulan Saya lagi penasaran dengan web server NGINX, karena selama ini dipasaran menggunakan Apache. Karena penasaran tersebut, sekalian deh Saya mau integrasikan dengan Web Application Firewall (WAF) dengan nama NAXSI, sekalian coba-coba keamanan WAF dan juga kekuatan Web Servernya :D.

Baiklah, Saya mau jelaskan dulu beberapa nama aplikasi yang akan kita gunakan pada tutorial kali ini:

  1.  NGINX, Web Server
  2. NAXSI
  3. Damn Vulnerable Web App (DVWA)
  4. PHP, Intrepreter Programming untuk dapat menggunakan DVWA
  5. MYSQL, Database Server untuk dapat menggunakan DVWA
Sebelum melakukan instalasi adapun yang perlu diketahui bahwa proses instalasi berada pada lingkungan Linux Mint, dan kemungkinan semua sintax/command yang ada pada saat instalasi akan mirip pada distro lain misalnya Linux Ubuntu. Proses instalasi akan banyak bermain pada terminal/console dan jangan lupa untuk mengaktifkan layanan Internet. So.... mari kita mulai :)



  1. Instalasi paket NGINX dan NAXSI
    Command:
    sudo apt-get install nginx-naxsi python-twisted python-mysqldb nginx-naxsi-ui

    Tunggu hingga proses instalasi selesai... dan bila instalasi sudah selesai, lakukan perngubahan konfigurasi terhadap beberapa file dibawah ini.

    • /etc/nginx/nginx.conf
      Untuk mengubah file, silahkan ketikkan perintah/command berikut:
      sudo nano /etc/nginx/nginx.conf

      Lalu silahkan copy paste isi context berikut (atau lihat perubahannya saja):
      user www-data;
      worker_processes 1;
      pid /run/nginx.pid;
      
      events {
       worker_connections 768;
       # multi_accept on;
      }
      
      http {
      
       ##
       # Basic Settings
       ##
      
       sendfile on;
       tcp_nopush on;
       tcp_nodelay on;
       keepalive_timeout 65;
       types_hash_max_size 2048;
       # server_tokens off;
      
       # server_names_hash_bucket_size 64;
       # server_name_in_redirect off;
      
       include /etc/nginx/mime.types;
       default_type application/octet-stream;
      
       ##
       # Logging Settings
       ##
      
       access_log /var/log/nginx/access.log;
       error_log /var/log/nginx/error.log;
      
       ##
       # Gzip Settings
       ##
      
       gzip on;
       gzip_disable "msie6";
      
       # gzip_vary on;
       # gzip_proxied any;
       # gzip_comp_level 6;
       # gzip_buffers 16 8k;
       # gzip_http_version 1.1;
       # gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
      
       ##
       # nginx-naxsi config
       ##
       # Uncomment it if you installed nginx-naxsi
       ##
      
       include /etc/nginx/naxsi_core.rules;
      
       ##
       # nginx-passenger config
       ##
       # Uncomment it if you installed nginx-passenger
       ##
       
       #passenger_root /usr;
       #passenger_ruby /usr/bin/ruby;
      
       ##
       # Virtual Host Configs
       ##
      
       include /etc/nginx/conf.d/*.conf;
       include /etc/nginx/sites-enabled/*;
      }
      
      
      #mail {
      # # See sample authentication script at:
      # # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
      # 
      # # auth_http localhost/auth.php;
      # # pop3_capabilities "TOP" "USER";
      # # imap_capabilities "IMAP4rev1" "UIDPLUS";
      # 
      # server {
      #  listen     localhost:110;
      #  protocol   pop3;
      #  proxy      on;
      # }
      # 
      # server {
      #  listen     localhost:143;
      #  protocol   imap;
      #  proxy      on;
      # }
      #}
      

      Lalu jangan lupa disimpan. :)
    • /etc/nginx/sites-available/default
      Sama dengan perintah sebelumnya, "sudo nano nama_file", silahkan ubah juga context nya.
      # You may add here your
      # server {
      # ...
      # }
      # statements for each of your virtual hosts to this file
      
      ##
      # You should look at the following URL's in order to grasp a solid understanding
      # of Nginx configuration files in order to fully unleash the power of Nginx.
      # http://wiki.nginx.org/Pitfalls
      # http://wiki.nginx.org/QuickStart
      # http://wiki.nginx.org/Configuration
      #
      # Generally, you will want to move this file somewhere, and start with a clean
      # file but keep this around for reference. Or just disable in sites-enabled.
      #
      # Please see /usr/share/doc/nginx-doc/examples/ for more detailed examples.
      ##
      
      server {
       listen 80 default_server;
       listen [::]:80 default_server ipv6only=on;
      
       root /usr/share/nginx/html;
       index index.php index.html index.htm;
      
       # Make site accessible from http://localhost/
       server_name localhost;
      
       location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;
        # Uncomment to enable naxsi on this location
        include /etc/nginx/naxsi.rules;
       }
      
       # Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
       location /RequestDenied {
       # proxy_pass http://127.0.0.1:8080;
        return 418;    
       }
      
       error_page 418 /418.php;
      
       # redirect server error pages to the static page /50x.html
       #
       #error_page 500 502 503 504 /50x.html;
       #location = /50x.html {
       # root /usr/share/nginx/html;
       #}
      
       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
       #
       location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
       # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
       #
       # # With php5-cgi alone:
       # fastcgi_pass 127.0.0.1:9000;
       # # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
       # include fastcgi.conf;
       }
      
       # deny access to .htaccess files, if Apache's document root
       # concurs with nginx's one
       #
       #location ~ /\.ht {
       # deny all;
       #}
      }
      
      
      # another virtual host using mix of IP-, name-, and port-based configuration
      #
      #server {
      # listen 8000;
      # listen somename:8080;
      # server_name somename alias another.alias;
      # root html;
      # index index.html index.htm;
      #
      # location / {
      #  try_files $uri $uri/ =404;
      # }
      #}
      
      
      # HTTPS server
      #
      #server {
      # listen 443;
      # server_name localhost;
      #
      # root html;
      # index index.html index.htm;
      #
      # ssl on;
      # ssl_certificate cert.pem;
      # ssl_certificate_key cert.key;
      #
      # ssl_session_timeout 5m;
      #
      # ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
      # ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
      # ssl_prefer_server_ciphers on;
      #
      # location / {
      #  try_files $uri $uri/ =404;
      # }
      #}
      
    • /etc/nginx/naxsi.rules
      # Sample rules file for default vhost.
      
      #LearningMode;
      SecRulesEnabled;
      #SecRulesDisabled;
      DeniedUrl "/RequestDenied";
      
      ## check rules
      CheckRule "$SQL >= 8" BLOCK;
      CheckRule "$RFI >= 8" BLOCK;
      CheckRule "$TRAVERSAL >= 4" BLOCK;
      CheckRule "$EVADE >= 4" BLOCK;
      CheckRule "$XSS >= 8" BLOCK;
      
    • /usr/share/nginx/html/418.php
      <HTML>
      <BODY>
      <CENTER>
      <h1 style="color: red; margin-top: 30px;">BLOCKED BY NAXSI</h1>
      <p>Reguest url : <?php echo $_SERVER['HTTP_REFERER']; ?></p>
      <p>Queries : <?php echo $_SERVER['HTTP_ORIG_ARGS']; ?></p>
      <p>
      <b>Naxsi Blocked Information</b>
      <pre>
      <?php
              $naxsi_sigs = explode('&', $_SERVER['HTTP_NAXSI_SIG']);
              foreach($naxsi_sigs as $naxsi_sig)
              {
                      echo $naxsi_sig . "\r\n";
              }
      ?>
      </pre>
      </p>
      </CENTER>
      </BODY>
      </HTML>
      
  2.  INSTALL PHP
    Command:
    sudo apt-get install php5 php5-fpm php5-mysql

    Tunggu hingga proses selesai...

    Jika selesai, lalu lanjutkan dengan melakukan konfigurasi file /etc/php5/fpm/php.ini.
    Cari baris yang terdapat code ; cgi.fix_pathinfo=1
    Seperti gambar berikut:

    Lalu ganti menjadi : cgi.fix_pathinfo=0
    Ingat tanda kutip (;) sebelum code harus dihapus! Lalu jangan lupa disimpan.
    Silahkan restart php dengan command:
    sudo service php5-fpm restart
    

    Lalu kita akan mencoba memeriksa apakah file PHP sudah bisa dijalankan pada webserver nginx, maka itu kita akan membuat file contohnya. Maka itu ketik baris berikut dan simpan di /usr/share/nginx/html/phpinfo.php.
    
    
    Coba buka browser, dan masukkan alamat:
    http://localhost
    Maka seharusnya akan tampak sebagai berikut:


    Lalu coba kita jalankan file PHP yang sudah kita buat tadi, dengan alamat:
    http://localhost/phpinfo.php
    Maka sudah seharusnya tampilannya mirip seperti dibawah ini:


  3. INSTALL MYSQL
    Command:
    sudo apt-get install mysql-server mysql-client
    

    Akan tampak seperti berikut pada saat proses instalasi:


    Pada saat instalasi sedang berjalan, kita akan diminta untuk memasukkan password untuk login sebagai user “root”. Silahkan masukkan password sesuai keinginan. Dalam contoh ini kita masukkan passwordnya adalah “salamdamai” (tanpa tanda kutip).


    Setelah itu, kita diminta mengulangi password yang sudah kita input tadi.


    Tunggu hingga selesai, hingga akhir instalasi akan tampak seperti berikut:


    Mari kita test login ke mysql.
    Command:
    mysql –u root –p
    setelah perintah di atas, maka mysql akan meminta kita untuk memasukkan password.

    Jika password login ke mysql tidak salah, maka akan tampak seperti berikut.

    Sementara ini ketik “quit”, dan enter untuk mengakhiri MySQL, karena kita belum memerlukannya.
  4. INSTALL DVWA (WEB VURN TESTING)
    Command:
    cd /usr/share/nginx/html
    sudo wget https://github.com/RandomStorm/DVWA/archive/v1.0.8.zip
    

    Lanjutkan lagi command berikut:
    sudo unzip v1.0.8.zip
    sudo mv DVWA-1.0.8/ dvwa/
    cd dvwa/config/
    sudo nano config.inc.php
    

    lalu ganti potongan baris code PHP menjadi seperti berikut ini:
    $_DVWA[ 'db_database' ] = 'dvwa';
    $_DVWA[ 'db_user' ] = 'root';
    $_DVWA[ 'db_password' ] = 'salamdamai';
    

    Setelah itu ketik lagi command untuk masuk ke MySQL (lihat kembali perintahnya di atas). Lalu ketik perintah ini pada mysql.
    create database dvwa;
    

    Sehingga tampak hasil sebegai berikut:


    Lalu ketik “quit” untuk keluar. Selanjutnya akses alamat berikut ini pada browser:
    http://localhost/dvwa/setup.php


    Lalu tekan tombol “Create / Reset Database”. Sehingga tampak hasilnya sebagai berikut:


    Terakhir sebelum testing, restart nginx dengan command:
    sudo service nginx restart
    
  5. TESTING
    Buka browser dan akses ke alamat berikut:
    http://localhost/dvwa/
    Kita akan diminta login terlebih dahulu, masukkan user: admin dan password: password.


    Test 1 : Command Execution
    Masukan teks berikut pada input yang tersedia.
    eval('unlink("index.php");')



    Dan hasil setelah diproses...

    Kamu bisa melihat hasil dari blocking script di atas, terdapat hasil dengan parameter sebagai berikut yang Saya berikan keterangan juga:
    ip=127.0.0.1 <=== Alamat IP yang diserang
    server=localhost <=== Alamat host yang diserang
    url=/dvwa/vulberbilities/exec/ <=== URL yang diserang
    learning=0 <=== status configurasi naxsi.rules untuk variable learning
    total_processed=28 <=== jumlah akses yang diproses
    total_blocked=14 <=== jumlah akses yang diblokir
    zone0=BODY <=== tipe zona, dalam hal ini adalah BODY karena tipe pengiriman data adalah POST
    id0=1001 <== kode atau id serangan yang terdapat pada konfiguras naxsi
    var_name0=ip <=== variable yang digunakan attacker untuk melakukan serangan


    Test 2: SQL Injection
    Masukan teks berikut pada input yang tersedia.
    1' = '1'='1



    Lalu tekan submit. Hasilnya adalah seperti berikut:



    Test 3: XSS
    Masukan teks sesuai yang tampak pada gambar berikut.


    Lalu tekan tombol “Sign Guestbook”. Apa yang terjadi? Tadaaaaaaa!
Huhfffff... selanjutnya??? no.. no.. no.. biarlah kalian-kalian yang membaca tutorial ini yang melanjutkan dan bereksperimen sendiri yachhh!?, Supaya tertantang, hehehhehe... oke deh, sekian dulu untuk tutorial kali ini. Salam damai, Tongam Meyer R. Tampubolon :)