PyDbg – Client Server

Setelah melakukan instalasi dan membuat script sederhana untuk PyDbg pada tulisan sebelumnya, maka berikutnya kita bisa melihat betapa sederhananya menggunakan PyDbg melalui koneksi network. Implementasi yang lebih advanced sebetulnya sudah dilakukan oleh beberapa tools (bahkan PaiMei itu sendiri) seperti Immunity Debugger, namun contoh sederhana berikut ini dapat menunjukan bentuk dasar komunikasi client-server untuk proses debugging.

Pada pengembangan selanjutnya, tehnik ini akan dapat digunakan sebagai bagian dari implementasi tools fuzzer (we’ll talk about this later) dimana salah satu kebutuhan adalah proses debugging secara remote.

Sebagaimana implementasi client-server maka akan dijalankan dua buah program, yang pertama bertindak sebagai client dan yang kedua bertindak sebagai server. Contoh program ini memperlihatkan bahwa suatu client tidak terbatas pada mesin yang akan di debug, client dapat berada pada mesin lain yang berbeda sistem operasi dan terpisah secara physical. Program yang berfungsi sebagai server (dalam bentuk lain biasa disebut sebagai agent) berada pada mesin yang akan di debug (aplikasi yang di debug biasa disebut debugee), dan program yang berfungsi sebagai client berada pada mesin manapun yang ingin berinteraksi dengan debugee.


import socket
import sys
from pydbg import *
from pydbg.defines import *

# net_pydbg1.py
# the server / agent

# Open socket, wait for any connection on port 4321
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = '10.150.1.12'
port = 4321
s.bind((host, port))
s.listen(1)
print "Waiting for any connection on port %s" % str(port)

conn, addr = s.accept()
print "Client connected from %s" % addr[0]
print "Sending the list of process to client..."

# PyDbg part
processes = []
dbg = pydbg()

for (pid, pname) in dbg.enumerate_processes():
processes.append([pid, pname])

data = "PID Process Name\n"
data += "--- ----------------\n"
for item in processes:
data += "%s %s\n" % (item[0], item[1])

# Send PyDbg result to client via network connection
conn.send(data)
conn.close()


#!/usr/bin/env python

import socket
import sys

# netcli_pydbg1.py
# Connect to net_pydbg1.py on port 4321
# usage: ./netcli_pydbg1.py 4321
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = sys.argv[1]
port = int(sys.argv[2])
s.connect((host, port))
data = s.recv(1000)

print data
s.close()

net_pydbg1.py akan dijalankan pada sistem microsoft windows dan menunggu koneksi pada port 4321. Begitu client dijalankan, maka net_pydbg1.py akan menerima koneksi dan menggunakan pydbg untuk me-list active process dalam mesin windows saat itu dan mengirimkan hasilnya kepada client melalui network.


C:\Documents and Settings\mrs\infosec-id\pydbg>python.exe net_pydbg1.py
Waiting for any connection on port 4321
Client connected from 10.150.1.172
Sending the list of process to client...


$ uname -v
Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386
$ ./netcli_pydbg1.py 10.150.1.12 4321
PID Process Name
--- ----------------
0 [System Process]
4 System
564 smss.exe
628 csrss.exe
652 winlogon.exe
696 services.exe
708 lsass.exe
868 vmacthlp.exe
884 svchost.exe
960 svchost.exe
1056 svchost.exe
1100 svchost.exe
1168 svchost.exe
1392 spoolsv.exe
1536 svchost.exe
1600 jqs.exe
1680 vmtoolsd.exe
1788 VMUpgradeHelper.exe
844 alg.exe
536 explorer.exe
1164 wscntfy.exe
1580 VMwareTray.exe
1644 VMwareUser.exe
832 jusched.exe
1700 Updater.exe
388 daemon.exe
1992 wuauclt.exe
2140 svchost.exe
3772 notepad++.exe
3424 CesarFTP.exe
3536 Server.exe
2148 Adobe_Updater.exe
552 firefox.exe
1156 cmd.exe
3932 notepad++.exe
1836 cmd.exe
2968 cmd.exe
280 cmd.exe
3524 python.exe

Dengan contoh sederhana ini tentunya kita dapat memahami bahwa proses debugging suatu aplikasi (mis: aplikasi microsoft windows) dapat dilakukan secara remotely menggunakan sistem operasi apapun.

Kebebasan ini juga tidak terbatas pada python, kita bisa menggunakan bahasa pemrograman apapun untuk berinteraksi dengan debugee. Namun tentu saja dengan catatan aplikasi client yang kita buat dapat berkomunikasi dengan aplikasi server. Berikut ini contoh menggunakan netcat untuk mendapatkan hasil yang sama,


$ nc 10.150.1.12 4321
PID Process Name
--- ----------------
0 [System Process]
4 System
564 smss.exe
628 csrss.exe
652 winlogon.exe
696 services.exe
708 lsass.exe
868 vmacthlp.exe
884 svchost.exe
960 svchost.exe
1056 svchost.exe
1100 svchost.exe
1168 svchost.exe
1392 spoolsv.exe
1536 svchost.exe
1600 jqs.exe
1680 vmtoolsd.exe
1788 VMUpgradeHelper.exe
844 alg.exe
536 explorer.exe
1164 wscntfy.exe
1580 VMwareTray.exe
1644 VMwareUser.exe
832 jusched.exe
1700 Updater.exe
388 daemon.exe
1992 wuauclt.exe
2140 svchost.exe
3772 notepad++.exe
3424 CesarFTP.exe
3536 Server.exe
2148 Adobe_Updater.exe
552 firefox.exe
1156 cmd.exe
3932 notepad++.exe
1836 cmd.exe
2968 cmd.exe
280 cmd.exe
3916 python.exe

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s