"netcat -e"는 표준 출력을 릴레이하지 않습니다.

"netcat -e"는 표준 출력을 릴레이하지 않습니다.

나는 netcat을 사용하여 백도어를 생성하고 다음 명령을 사용하여 Python 스크립트를 실행했습니다.

netcat -l -p 1234 -e 'python /script.py'

그런 다음 다른 셸을 사용하여 백도어에 연결합니다.

netcat localhost 1234

script.py는 입력을 읽고, 파일에 저장하고, 다시 인쇄하는 간단한 루프입니다. 이제 두 번째 셸에서 작성한 모든 내용이 스크립트로 들어가 성공적으로 파일에 저장됩니다. 그러나 두 번째 셸의 스크립트에서는 출력이 표시되지 않습니다. Python print과 메소드를 시도했지만 sys.stdout.write 둘 다 실패한 것 같습니다. 다음 명령을 사용하면 출력이 두 번째 셸로 다시 전달되는 이유를 모르겠습니다.

netcat localhost 1234 /bin/bash

하지만 내 대본은 아닙니다. 분명히 중요한 것을 놓치고 있습니다. 이것은 내 스크립트입니다.

import sys

while 1:
    kbInput = sys.stdin.readline()
    sys.stdout.write( 'Input: '+kbInput)
    f  = open("output.txt", "w")
    f.write(kbInput)
    f.close()
    print

답변1

stdout에 대한 쓰기는 Python에 의해 버퍼링되며 버퍼가 가득 찬 경우에만 기록됩니다. 2가지 간단한 수정 사항이 있습니다.

  1. -u버퍼링되지 않은 출력을 요청하는 옵션을 python 명령에 추가합니다 ( 'python -u /script.py').

  2. 또는 각 쓰기 후에 출력을 플러시합니다. 귀하의 예에서 sys.stdout.write( 'Input: '+kbInput)해당 줄 뒤에 다음 줄을 추가하십시오.

    sys.stdout.flush()
    

관련 정보