나는 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가지 간단한 수정 사항이 있습니다.
-u
버퍼링되지 않은 출력을 요청하는 옵션을 python 명령에 추가합니다 ('python -u /script.py'
).또는 각 쓰기 후에 출력을 플러시합니다. 귀하의 예에서
sys.stdout.write( 'Input: '+kbInput)
해당 줄 뒤에 다음 줄을 추가하십시오.sys.stdout.flush()