Jumat, 15 Juli 2016

Belajar forensic dengan python ke-1

Hmm......Sudah lama sekali ga nulis di blog :( ...
Ok kali ini saya akan mencoba untuk berbagi cara melakukan forensic terhadap 'cache' di  browser firefox dengan OS Kali linux dengan menggunakan script python. Sebenarnya cara ini sudah ada di internet, hanya saja ini adalah materi belajar experimen saya ;)

File 'cache' tersebut dalam bentuk database sqlite yang tersimpan di dalam folder profile firefox (/root/.mozilla/firefox/)

Berikut ini script yang di gunakan untuk menampilkan data pencarian yang pernah di input oleh pengguna di google.

Simpan nama file firefoxForensic.py
#!/usr/bin/python

import sqlite3
import os
import re

def printGoogle(googleDB):
    conn = sqlite3.connect(googleDB)
    c = conn.cursor()
    c.execute('select url, datetime(visit_date/1000000, \'unixepoch\') from moz_places, moz_historyvisits where visit_count > 0 and moz_places.id == moz_historyvisits.place_id;')
    print '[*] --- Files Google ---'
   
    for baris in c:
        url = str(baris[0])
        date = str(baris[1])

        if 'google' in url.lower():
            r = re.findall(r'q=.*\&', url)
            if r:
                search = r[0].split('&')[0]
                search = search.replace('q=', '').replace('+', ' ')
                print '[+] ' + date + '- Searched For : ' + search

def main():
    pathName = '/root/.mozilla/firefox/s9n3cmwv.default/'
    firefoxDB = os.path.join(pathName, 'places.sqlite')
    printGoogle(firefoxDB)

if __name__ == "__main__":
    main()

Jika script tersebut di jalankan, maka harusnya akan menampilkan seperti gambar di bawah ini.

Tapi script di atas bisa juga di modifikasi untuk melakukan analisa forensic terhadap file database sqlite lain yang berada di folder firefox (/root/.mozilla/firefox/).

Jadi selamat mencoba dan bereksperimen dengan file lain nya ;)

Selasa, 13 Januari 2015

Oprek2 python ke-5

Sekarang kita belajar contoh-contoh python untuk scanning port, semoga bisa di ikuti ya ;)
Ok langsung saja kita mulai, seperti berikut.

Contoh di bawah ini, kita mencoba untuk scanning port dari suatu target IP address dengan menggunakan socket di python.

Simpan nama file portscanner.py
#!/usr/bin/python
import socket

target = input("Masukan IP address: ")
portrange = input("Masukan range port (ex: 1-10): ")

lowport = int(portrange.split('-')[0])
highport = int(portrange.split('-')[1])

print ("Scanning host ", target, "from port ", lowport, " to port ", highport)

for port in range(lowport, highport):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    status = s.connect_ex((target, port))

    if (status == 0):
        print("Port ", port, "- open")
    else:
        print("Port ", port, "- closed")
    s.close()


Hasil skrinsut nya dari coding di atas sebagai berikut:



Di atas tampak jika socket kita bisa mendeteksi port mana saja yang terbuka dan tertutup.

Ok cukup sampe disini dulu belajar mengenali  cara kerja socket untuk scanning port ;)
Semoga sedikit mulai paham dengan cara kerja socket :D

Oprek2 python ke-4

Sekarang kita belajar contoh-contoh python yang berhubungan dengan socket dan cara kerja nya, semoga bisa di ikuti ya ;)
Ok langsung saja kita mulai, seperti berikut.

Contoh di bawah ini, kita mencoba membuat socket server nya. Cara kerja nya, si server akan mengirimkan pesan ke client, jika memang ada koneksi yang terhubung antara client dan server, serta jika si client yang memutuskan koneksi, maka server akan merespon dengan menampilkan error nya.

Simpan nama file server.py
#!/usr/bin/python
import socket, errno, time

# setup socket untuk listen koneksi yang masuk ke socketnya
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('192.168.229.128', 4444))
s.listen(1)
remote, address = s.accept()
print "Got connections from: ", address

while 1:
    # Jika koneksi berhasil, maka server akan mengirimkan pesan ke client
    try:
        remote.send("message to peer\n")
        time.sleep(1)
    # jika koneksi terputus dari client
    except socket.error, e:
        if isinstance(e.args, tuple):
            print "errno is %d" % e[0]
            if e[0] == errno.EPIPE:
                # remote peer disconnected
                print "Detected remote disconnected"
            else:
                # determine and handle different error
                pass
        else:
            print "socket error ", e
        remote.close()
        break
    # jika socket ada masalah
    except IOError,e:
        print "Got IOError: ", e
        break


Hasil skrinsut nya dari coding di atas sebagai berikut:


Di atas tampak jika koneksi dari client berhasil terhubung ke server, maka secara otomatis server akan mengirimkan pesan ke client 'message to peer'.

Tapi jika client memutuskan koneksi ke server, maka server akan meresponnya dengan error code 32, yang artinya disconnected.

Ok cukup sampe disini dulu belajar mengenali  cara kerja socketnya ;)
Semoga sedikit mulai paham dengan cara kerja socket :D

Rabu, 30 April 2014

Oprek2 python ke-3

Sekarang kita belajar contoh-contoh python yang berhubungan dengan network, semoga bisa di ikuti ya ;)
Ok langsung saja kita mulai, seperti berikut.

Contoh di bawah ini, kita mencoba membuat socket Server dan Client. Cara kerja nya, si client akan mengirimkan pesan ke server, dan server akan menerima pesan tersebut dan menampilkan ke layar

Simpan nama file Server.py
#!/usr/bin/python

import socket

host = "0.0.0.0"
port = 8000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(2)

print "waiting for a client ..."
(client, (ip, sock)) = s.accept()

print "received connection from: ", ip
print "starting ECHO output ..."

data = 'dummy'
while len(data):
    data = client.recv(2048)
    print "client sent: ", data
    client.send(data)

print "closing connection ..."
client.close()

print "shutting down server"
s.close()


Simpan nama file Client.py
#!/usr/bin/python

import socket
import sys

port = 8000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((sys.argv[1], port))

while 1:
    userInput = raw_input("please enter a string: ")
    s.send(userInput)
    print s.recv(2048)

s.close()

Hasil skrinsut nya dari coding di atas sebagai berikut:

Gimana, masih bisa di ikuti ya :)
Contoh di bawah ini adalah contoh lain dari socket server dan client, tapi beda nya kita hanya menyiapkan server aja, untuk client nya kita menggunakan perintah "nc" di linux.


Simpan nama file TcpServer.py
#!/usr/bin/python

import SocketServer
import socket

host = "0.0.0.0"
port = 9000

class EchoHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        print "Got connection from: ", self.client_address
        data = "dummy"

        while len(data):
            data = self.request.recv(1024)
            print "Client sent: ", data
            self.request.send(data)

        print "Client kabur :)"

s = SocketServer.TCPServer((host, port), EchoHandler)
s.serve_forever()

Hasil skrinsut nya dari coding di atas sebagai berikut:

Berikut nya kita belajar untuk membuat sebuah web server sederhana dengan menggunakan python, kemudian kita akan mencoba mengakses nya melalui browser ;)

Simpan nama file WebServer.py
#!/usr/bin/python

""" Membuat HTTP Server sederhana """

import SocketServer
import SimpleHTTPServer

host = ""
port = 10000

class HttpRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    def do_GET(self):
        if self.path == "/admin":
            self.wfile.write("This page is only for Admins !")
            self.wfile.write(self.headers)
        else:
            SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self)

httpServer = SocketServer.TCPServer((host, port), HttpRequestHandler)
httpServer.serve_forever()

Hasil skrinsut nya dari coding di atas sebagai berikut:





Berikut nya kita belajar gimana caranya melakukan sniffing di network dengan menggunakan python.
Perhatikan contoh di bawah ini.

Simpan nama file sniff.py
#!/usr/bin/python

import socket
import struct
import binascii

# PF_PACKET : packet interface
# SOCK_RAW : raw socket
# htons(0x800) : pilih internet protocol packet ke kernel, ref /usr/include/linux/if_ether.h

rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))
packet = rawSocket.recvfrom(2048)
print 'packet: ', packet

ethernetHeader = packet[0][0:14]
eth_hdr = struct.unpack('!6s6s2s', ethernetHeader) # !6s6s2s: 6 byte type string, 6 byte type string, 2 byte type string
print 'eth_hdr: ', eth_hdr

binascii.hexlify(eth_hdr[0]) # mac dst
binascii.hexlify(eth_hdr[1]) # mac src
binascii.hexlify(eth_hdr[2]) # eth type 0x800

ipHeader = packet[0][14:34]
ip_hdr = struct.unpack('!12s4s4s', ipHeader)
print "ip_hdr: ", ip_hdr

print "Source IP Address: ", socket.inet_ntoa(ip_hdr[1]) # ntoa : network to ascii
print "Destination IP Address: ", socket.inet_ntoa(ip_hdr[2])

# initial part of the tcp header
tcpHeader = packet[0][34:54]
tcp_hdr = struct.unpack('!HH16s', tcpHeader) # 1 byte port dest, 1 byte port src, 16 byte packet
print 'tcp_hdr: ', tcp_hdr

Hasil skrinsut nya dari coding di atas sebagai berikut:

Berikut nya kita belajar gimana caranya melakukan inject mengirimkan sebuah pesan ke dalam traffic di network.
Perhatikan contoh di bawah ini.

Simpan nama file injector.py 
#!/usr/bin/python

import socket
import struct

rawSocket = socket.socket(socket.PF_PACKET, socket.SOCK_RAW, socket.htons(0x0800))
rawSocket.bind(("eth0", socket.htons(0x800)))

packet = struct.pack("!6s6s2s", '\xaa\xaa\xaa\xaa\xaa\xaa', '\xbb\xbb\xbb\xbb\xbb\xbb', '\x08\x00')

rawSocket.send(packet + "Hello there")

Hasil skrinsut nya dari coding di atas sebagai berikut:

Lanjut lagi belajarnya, sekarang kita belajar untuk membuat arp scanner dengan menggunakan scapy di python

Perhatikan contoh di bawah ini.

Simpan nama file ArpScanner.py 
#!/usr/bin/python

from scapy.all import *

# Subnet Scanner
for lsb in range(1,50):
    ip = "10.8.9." + str(lsb)
    arpRequest = Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip,hwdst="ff:ff:ff:ff:ff:ff")
    arpResponse = srp1(arpRequest, timeout=1, verbose=0)
    if arpResponse:
        print "IP: " + arpResponse.psrc + " MAC: " + arpResponse.hwsrc


Hasil skrinsut nya dari coding di atas sebagai berikut:

Ok cukup sampe disini dulu belajar nya ;)
Semoga ga pusing :D