[L2H] – Python Basic Netwoking

ပထမဆံုး မေလ့လာခင္ ဒါကိုေလ့လာထားရင္ ဘယ္ေနရာေတြသံုးလို႕ရမလဲ ဆိုတာေလးကို အရင္ဆံုးသိေစခ်င္တယ္။

1.Exploit Development အတြက္ Remote Exploit အတြက္ python နဲ႕ေရးမယ္ဆို သံုးလို႕ရတယ္။

2.အျခား Network နဲ႕ပတ္သတ္တာေတြလဲသံုးလို႕ရတယ္။

3.Bind Shell , Reverse Shell အေနနဲ႕လဲသံုးလို႕ရတယ္။

4.အက်ိဳးရွိသလိုသံုးလို႕ရတဲ့ေနရာေတြ ေတာ္ေတာ္မ်ားပါတယ္။

ဒီထက္ပိုသိခ်င္ရင္ေတာ့ Black Hat python စာအုပ္ကိုဖတ္ေပါ့။

https://nostarch.com/blackhatpython

Python မွာ Socket Module ကိုသံုးလို႕ရပါတယ္။ PHP မွာလဲရွိတယ္။ ထားပါေတာ့

ဒီေတာ့ python ကဘယ္ဟာကိုသံုးမွာလဲ?

Python 2.7

https://docs.python.org/2/library/socket.html

Python 3

https://docs.python.org/3/library/socket.html

Documentation ရွိေနတဲ့အတြက္ ဘယ္ဟာကိုပဲသံုးသံုး ျပသနာမရွိပါဘူး။

Mine 

Importing Module

import socket

socket module ကိုသံုးမယ္

Server Information

က်ေနာ္ကေတာ့ nc နဲ႕ ပဲ Server လုပ္မွာမို႕ အဆင္ေျပသလိုလုပ္လိုက္တယ္။

server_host="192.168.43.234"
server_port=1234

Creating Object

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

client ဆိုတဲ့ Object တစ္ခုေဆာက္လုပ္တာျဖစ္တယ္။ AF_INET ကဘာကိုေျပာတာလဲ? SOCK_STREAM ဆိုတာကဘာကိုေျပာတာလဲ ?

IPv4 address ျဖစ္တယ္ဆိုတာကိုေျပာတာပါ။SOCK_STREAM က TCP ျဖစ္တယ္လို႕ေျပာတာျဖစ္တယ္။

ဒါက Documentation ကို ဖတ္ရင္သိနိုင္ပါတယ္။

Connecting

Object တစ္ခုအရင္ဆံုးဖန္တီးျပီးျပီဆိုရင္ သံုးလို႕ရတာေတြအမ်ားၾကီးရွိသြားျပီျဖစ္ပါတယ္။ ပထမဆံုး Connect လုပ္ၾကည့္တာေပါ့။

client.connect((server_host,server_port))

Connect ျပီးျပီဆိုရင္ တစ္ခုခုပို႕လိုက္မယ္။

client.send("Hello from the other side !")

Run မယ္။

Wow ! Error

Connection refused တဲ့ ဟုတ္တယ္ေလ ရွိမွမရွိေသးတာ။

nc -lvp 1234

Hello from the other side !

ဒီထက္ပိုျပီးစမ္းခ်င္တယ္ဆိုရင္ေတာ့ Documentation ကိုဖတ္ျပီးလိုက္စမ္းလို႕ရတယ္။ ကိုယ္လုပ္ခ်င္တာ အေပၚမူတည္ျပီးသံုးေပါ့ ။ ဥပမာ Google ရဲ႕ ip ကို သိခ်င္တယ္ဆိုပါေတာ့။

Documentation အရ gethostbyname ကိုသံုလို႕ရတယ္။ ဒီေတာ့စမ္းလိုက္မယ္။

hostname=socket.gethostbyname("www.google.com")

print hostname

nslookup နဲ႕တစ္ခ်က္ျပန္ၾကည့္ၾကည့္မယ္

ဒီေတာ့ သံုးလို႕ရတာေတြအမ်ားၾကီးရွိတယ္ဆိုတာသိသြားျပီ။ ခုနက Server ကို ကိုယ္က Connect လုပ္တာျဖစ္တယ္ဆိုရင္ ဒီတစ္ခါ ကုိယ္က Listen ျပန္လုပ္ၾကည့္မယ္။

import socket

our_ip="0.0.0.0"
our_port=1337

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind((our_ip,our_port))
server.listen(5)

print "Listening %s:%d ..."%(our_ip,our_port)

while True:
	client,addr = server.accept()

	print " %s:%d is Connected " % (addr[0],addr[1])

0.0.0.0 က local ip ကိုဆိုလိုတာျဖစ္တယ္။ port ကေတာ့ အဆင္ေျပတာဖြင့္ေပါ့။ listen လုပ္မယ္။ Connect လုပ္တဲ့ Client ကိုျပမယ္။ while True: ဘာလို႕ထည့္ထားလဲဆိုရင္ ဒီတိုင္းဆိုရင္ ထြက္သြားမွာစိုးလို႕ျဖစ္ပါတယ္။

Client ဆီက data ကိုယူတဲ့အခါမွာေတာ့ threading ကိုသံုးရေတာ့မွာျဖစ္ပါတယ္။

တစ္ခုျပီးမွတစ္ခုဆို ဒီလိုေနရာေတြမွာအဆင္မေျပေတာ့တာေတြ႕ရမွာျဖစ္ပါတယ္။ Threading အေၾကာင္းကိုေတာ့ ေနာက္ပိုင္း တစ္ခုခုနဲ႕ ဥပမာေပးျပီးေလ့လာၾကတာေပါ့

Threading Doc

https://docs.python.org/2/library/threading.html

threading ကို import လုပ္မယ္။

import threading

Client ဆီကလာတဲ့ data ကို ျပန္ျပမယ္။ client_thread ဆိုတဲ့ function တစ္ခုအေနနဲ႕ထားလိုက္မယ္။ ဒါကို thread တစ္ခုအေနနဲ႕ျပန္ေခၚမယ္။

def client_thread(client_socket):
      
      request = client_socket.recv(1024)
      print "[*] Received: %s" % request
      
      client_socket.send("Hello , its me!")
      client_socket.close()

ဒီေတာ့ Connect လုပ္ျပီးတဲ့အခါ ဒီ thread ကို လွမ္းေခၚမယ္။

call_client_thread = threading.Thread(target=client_thread,args=(client,))

thread ကိုစမယ္

call_client_thread.start()

Full code

import socket
import threading

our_ip="0.0.0.0"
our_port=1337

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server.bind((our_ip,our_port))
server.listen(5)

print "Listening %s:%d ..."%(our_ip,our_port)

def client_thread(client_socket):
      
      request = client_socket.recv(1024)
      print "Received: %s" % request
      
      client_socket.send("Hello ! Its me ")
      client_socket.close()

while True:
	client,addr = server.accept()

	print " %s:%d is Connected " % (addr[0],addr[1])
	
	call_client_thread = threading.Thread(target=client_thread,args=(client,))

	call_client_thread.start()

Thanks

3 Comments

  1. အကို ျပတဲ့အတိုင္းလိုက္ လုပ္ တာ ကို nc က ခ်ိတ္မရဘူး။nc -lvp ကို သံုးခ်င္ေနတာ ၂ႏွစ္ေလာက္ရိွဘီ တစ္ခါ မွခ်ိတ္မရ ဖူး ဘူး 😢။ေတာ္ ေတာ္ ပိန္းတဲ့ က်ေနာ္။nc -lvp ကို ခ်ိတ္ ေအာင္ဘယ္ လို လုပ္ရမလဲ အကို။

1 Trackback / Pingback

  1. [L2H] – Threading in Python for Parallelism – Legion of LOL

Comments are closed.