iT邦幫忙

2023 iThome 鐵人賽

DAY 2
0

This series of tutorials is aimed to share the notes taken while I was learning python for cybersecurity with the books - Black Hat Python.
這系列教學文章為學習筆記+延伸資源,旨在分享學習書籍 Black Hat Python時所思所學,也希望能幫助想了解Python和資安的大大們入門。

This tutorail has also been written in English in Medium.


目錄

  • Netcat III

看文前, 你應該要具備以下基礎能力:


Let's get started! 開始吧!


Netcat III

class NetCat:
    def __init__(self,args,buffer=None):
        self.args = args
        self.buffer = buffer
        self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  • 使用一些命令列(the command line)和buffer的引數(arguments),以便初始化(Initialize)Netcat物件
  • 創建Socket物件
def run(self):
    if self.args.listen:
        self.listen()
    else:
        self.send()
  • 這是入口點,可用來管理Netcat

If 我們正在設置一個聆聽者(a listener), 呼叫方法listen(call the listen method),
else 呼叫方法send(call the send method)

def send(self):
        self.socket.connect((self.args.target , self.args.port))
        if self.buffer:
            self.socket.send(self.buffer)
            try:
                while True:
                    recv_len = 1
                    response = ''
                    while recv_len:
                        data = self.socket.recv(4096)
                        recv_len = len(data)
                        response += data.decode()
                        if recv_len < 4096:
                            break
                        if response:
                            print(response)
                            buffer = input('>')
                            buffer += '\n'
                            self.socket.send(buffer.encode())
            except KeyboardInterrupt:
                print('User terminated.')
                self.socket.close()
                sys.exit()
  • 如果我們有Buffer,連接到目標和連接埠(Connect to the target and port)
  • Try/Catch區塊允許我們手動關掉連接,輸入"Ctrl + C"即可
  • 開始一個迴圈,以便去接收資料(receive the data)
  • If 沒有任何資料,從迴圈(break out the loop)
  • else 印出回應的資料(response data ),並暫停以便得到有互動性的輸入結果(interactive input),然後傳送input,接著繼續迴圈
def listen(self):
        self.socket.bind((self.args.target, self.args.port))
        self.socket.listen(5)
        while True:
            client_socket, _ = self.socket.accept()
            client_thread = threading.Thread(target=self.handle, args=(client_socket,))
            client_thread.start()

當程式以listener的身分( a listener)執行時,方法listen會開始執行。


Reference參考資料

推薦影片
絕讚! Youtube 教學影片 | Elevate Cyber

原始碼
Github - Python For Cybersecurity | Monles


上一篇
Day 07 - Netcat II
下一篇
Day 09 -Netcat IV
系列文
為駭而生 - Python 18
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言