예를 들어 netcat 수신기를 사용하십시오.
nc -l <port> < ~/.bashrc
다음을 사용하여 새 시스템(LDAP 없이)에서 nc
내 .bashrc를 가져올 수 있습니다.
cat < /dev/tcp/<ip>/<port> > ~/.bashrc
nc -l <port>
내 질문은: 첫 번째 줄의 기능을 모방하지 않고 /dev/tcp를 사용할 수 있는 방법이 있습니까 nc
?
내가 사용하고 있는 머신은 극도로 강화된 랩/샌드박스 환경 RHEL입니다(Ssh 없음, NC 없음, LDAP 없음, yum 없음, 새 소프트웨어를 설치할 수 없고 인터넷에 연결되어 있지 않음).
답변1
불행히도 이는 bash만으로는 불가능합니다. /dev/tcp/<ip>/<port>
가상 파일이 구현되는 방식은 bash가 지정된 <ip>:<port>
사용 connect(2)
함수에 연결을 시도하는 것입니다. 청취 소켓을 생성하려면 bind(2)
함수를 호출해야 합니다.
소스코드를 다운로드하여 살펴보시면 bash
확인 하실 수 있습니다. 이는 lib/sh/netopen.c
파일의 함수 _netopen4
(또는 IPv6도 지원하는 _netopen6)에서 구현됩니다. 이 함수는 동일한 파일의 래퍼 함수에 의해 사용되며 , 이는 가상 리디렉션을 구현하기 위해 netopen
파일 redir.c
( 함수)에서 직접 사용됩니다.redir_special_open
컴퓨터에서 청취 소켓을 생성할 수 있는 다른 응용 프로그램을 찾아야 합니다.
답변2
Perl이 설치된 경우(RHEL 시스템에 설치됨):
perl -MIO::Socket::INET -ne 'BEGIN{$l=IO::Socket::INET->new(
LocalPort=>1234,Proto=>"tcp",Listen=>5,ReuseAddr=>1);
$l=$l->accept}print $l $_' < ~/.bashrc
예, 로컬 방화벽이 들어오는 1234 연결을 허용하지 않는 한 가능합니다.
socat이 설치된 경우:
socat -u - tcp-listen:1234,reuseaddr < ~/.bashrc
zsh가 설치된 경우:
zmodload zsh/net/tcp
ztcp -ld3 1234 && # start listening socket on fd 3
ztcp -ad4 3 && # accept connection on fd 4
ztcp -c 3 && # close the listening socket that is no longer needed
cat < ~/.bashrc >&4 && # send the data
ztcp -c 4 # close the communication socket to tell the other end we're finished
답변3
Adamski가 지적한 것처럼 듣기가 bash에 있지 않기 때문에들을 방법이 없습니다.
그러나 클라이언트 측에서 모니터링할 필요가 없으므로 클라이언트는 파일을 전송하기 위해 netcat이 필요하지 않습니다. 예를 들면 다음과 같습니다.
## To send a file to the locked down computer:
## Local server where you do have netcat
cat ~/.bashrc | nc -l -q 1 -p 8998
## Remote locked down computer without netcat
cat < /dev/tcp/local.server.ip.addr/8998 > latest.bashrc
## To grab a file from the locked down computer:
## First - on the local server run
nc -l -p 8998 -q 1 > remote.bashrc < /dev/null
## Then on the locked down computer run:
cat ~/.bashrc > /dev/tcp/local.server.ip.addr/8998 0<&1 2>&1
답변4
당신이 말한 것처럼 bash로 /dev/tcp를 요청할 수 있습니다:
</dev/tcp/host/port
즉시 실행되면 청취 중이므로 어느 쪽이든 시간 초과됩니다.