저는 Linux 애플리케이션에 대한 다양한 익스플로잇 연습을 따라해 왔습니다. 나는 이것을 꽤 잘 이해하지만 어떤 사람들은 "파이프를 열어 두기" 위해 cat을 사용한다고 언급했습니다.여기.
예를 들어:
(python2 exploit.py ; cat) | ./programToExploit
실제로 "파이프를 열어 두는 것"은 실제로 무엇을 의미하며, 위 명령처럼 파이프를 열어 두는 방법은 무엇입니까?
답변1
차이점 보기
echo 'ls' | sh -s
그리고
( echo 'ls'; cat ) | sh -s
또는,
{ echo 'ls'; cat; } | sh -s
여기서 sh -s
표준 입력( )에서 실행할 명령을 읽어 쉘 세션이 시작됩니다 -s
.
첫 번째 예에서는 쉘이 실행 ls
되고 종료됩니다(더 이상 입력이 없기 때문에).
두 번째 및 세 번째 예에서는 쉘이 실행되고 ls
더 이상 입력이 없을 때까지 기다립니다. 입력 스트림은 sh -s
먼저 명령에 의해 생성된 echo
다음 cat
인계받습니다. 프로세스 cat
는 상위 셸 세션에서 데이터를 읽고 명령 을 sh -s
.ls
cat
이는 입력 종료를 알리기 위해 빈 줄을 눌러 프로세스를 종료할 때까지 계속됩니다 .Ctrl+D
나는 이것이 "파이프를 열어 두는 것"이 의미하는 바라고 믿습니다.