telnet -l에는 여전히 로그인이 필요합니다.

telnet -l에는 여전히 로그인이 필요합니다.

텔넷 서버가 있는 봇에 연결하고 대화하기 위한 C 라이브러리를 작성하려고 합니다.

서버정보는 다음과 같습니다.

  • 사용자:as
  • IP:192.168.0.1
  • 포트:23
  • 비밀번호가 없어

robots_init() 함수에서 로봇에 연결하고 다음 코드를 사용하여 이를 수행하려고 합니다.

FILE *telnet = popen("telnet -l as 192.168.0.1 23", "w");

에서 man telnet:

SYNOPSIS
     telnet [-468ELadr] [-S tos] [-b address] [-e escapechar] [-l user]
            [-n tracefile] [host [port]]

[...]
     -l user
             Specify user as the user to log in as on the remote system. This
             is accomplished by sending the specified name as the USER envi‐
             ronment variable, so it requires that the remote system support
             the TELNET NEW-ENVIRON option. This option implies the -a option,
             and may also be used with the open command.

하지만 C 코드를 작성하기 전에 도커 컨테이너에 텔넷 서버를 설정하고 클라이언트로서 다른 도커를 통해 통신을 시도했습니다.

서버를 실행합니다:

sudo docker container run --name telnet-server --publish 2323:23 --detach --restart unless-stopped secobau/telnetd:alpine-1.1

서버에 사용자= user;ip= 172.17.0.1;port= 2323;가 있고 비밀번호가 없습니다.

클라이언트를 실행합니다:

sudo docker run --interactive --tty --name=telnet-client debian:testing bash
apt-get update
apt-get install telnet --yes
telnet -l user 172.17.0.1 2323

나는 이것이 이미 로그인된 텔넷 연결을 제공하기를 바랐지만(또는 적어도 나에게 직접 비밀번호를 물어보는 것) 계속 로그인을 요청합니다.

텔넷 버그인가요? 이것을 어떻게 자동화해야 합니까?

그래도 작동하지 않으면 telnet -l다음과 같이 파이프해야 할 것 같습니다.

fprintf(telnet, "as\n");  // user
fprintf(telnet, "\n"); // password (no password)

답변1

흥미로운 질문입니다. Docker를 사용하여 서로 완전히 격리된 여러 서비스를 빠르게 설정하는 것이 얼마나 쉬운지 보여줍니다.

내 생각엔 telnetd가 여전히 비밀번호를 요구하는 것 같은데, -l /bin/login당신이 했던 것처럼 서버 측에 플래그가 지정되어 있기 때문입니다.secobau/telnetd:alpine-1.1용 Dockerfile:

ARG LOGIN=/bin/login
ARG PORT=23
ARG USER=user

ENV CMD "/usr/sbin/telnetd -p $PORT -b $ADDR -l $LOGIN -F"

매우 유사한 Dockerfile을 만들 수 있지만 대체 /bin/login하면 /bin/sh작동합니다. 예를 들어 새 Dockerfile은 다음과 같을 수 있습니다.

FROM alpine

ARG ADDR=0.0.0.0
ARG LOGIN=/bin/login
ARG PORT=23
ARG USER=user

ENV CMD "/usr/sbin/telnetd -p $PORT -b $ADDR -l /bin/sh -F"

EXPOSE $PORT

RUN apk update && apk upgrade && apk add busybox-extras
RUN adduser -D $USER && echo -e "\n\n" | passwd $USER

RUN echo "$CMD" | tee cmd.sh && chmod +x cmd.sh
CMD ./cmd.sh

빌드하세요:

docker build -t my/telnet .

달리다:

docker container run --name my-telnet-server --publish 2323:23 --detach --restart unless-stopped  my/telnet

이제 클라이언트 컨테이너에서 사용자 이름과 비밀번호를 입력하지 않고도 로그인할 수 있습니다.

root@e55f8f1f3e55:/# telnet -l user 172.17.0.1 2323
Trying 172.17.0.1...
Connected to 172.17.0.1.
Escape character is '^]'.

/ #

그건 그렇고, docker를 실행하기 위해 sudo를 사용할 필요는 없으며 docker 그룹에 자신을 추가하기만 하면 됩니다.

관련 정보