난 방금 끝났어OverTheWire Bandit War 게임, 레벨 18.
이것은 놀라운 일입니다. 아래는 이 레벨에 대한 설명입니다.
다음 레벨의 비밀번호는 파일에 저장됩니다.읽어보기 파일홈 디렉토리에 있습니다. 누가 수정한게 아쉽네요.bashrcSSH를 사용하여 로그인하면 로그아웃됩니다.
쉘이 구매를 건너뛰도록 하는 방법을 생각 중입니다 .bashrc
. 하지만 해결책을 찾을 때까지는 단순히 서버에 대한 SFTP 연결을 시작하고 싶은 유혹이 듭니다. 나는 그것이 작동할 것이라고 기대하지 않았습니다. 하지만 그랬습니다. 이유를 알고 싶습니다. SFTP가 SSH를 통해 실행되는 줄 알았는데.
분명히 말하자면, 예상대로 서버에 SSH로 연결하면 서버에서 쫓겨납니다.
답변1
Bash에 대한 일반 정보
Bash의 시작 파일 디자인은 꽤 이상합니다. Bash는 .bashrc
관련되지 않은 두 가지 상황에서 로드됩니다.
- 대화형 쉘일 때, 그렇지 않은 경우로그인 쉘(로 호출되지 않는 한
sh
). 그렇기 때문에.bash_profile
일반 부하.bashrc
. 배쉬가 있을 때아니요Interactive는 로그인 셸도 아니고 as에 대한 호출도 아니지만
sh
실행할 명령이 제공되고-c
설정SHLVL
되지 않거나 1보다 작거나 같고 다음 중 하나가 true입니다.- 표준 입력이 소켓인 경우. 실제로 이것은 bash가 호출될 때 주로 발생합니다.
rshd
, 즉 실행 중입니다rsh remotehost.example.com somecommand
. 컴파일 타임에 활성화된 경우(Debian 및 그 파생 제품과 같은 일부 배포판의 경우)
SSH_CLIENT
환경 변수 중 하나가 정의됩니다.SSH2_CLIENT
사실상 이는sshd
Internet Explorer에서 bash를 호출한다는 의미입니다ssh remotehost.example.com somecommand
.
Bash가 어떻게 컴파일되는지 모르는 경우 바이너리에 다음 문자열이 포함되어 있는지 확인하여 이 옵션이 설정되어 있는지 확인할 수 있습니다SSH_CLIENT
.strings /bin/bash | grep SSH_CLIENT
- 표준 입력이 소켓인 경우. 실제로 이것은 bash가 호출될 때 주로 발생합니다.
SSH에 대한 일반 정보
SSH 프로토콜을 통해 명령을 실행하면 명령이 문자열로 연결을 통해 전달됩니다. 이 문자열은 원격 쉘에 의해 실행됩니다. 을 실행하면 ssh example.com somecommand
원격 사용자의 로그인 셸이 이면 /bin/bash
SSH 서버가 실행됩니다 /bin/bash -c somecommand
. 로그인 셸을 우회할 수 있는 방법은 없습니다. 이는 다음과 같은 제한된 로그인 쉘을 허용합니다.파일 복사만 허용일반적인 명령 실행 대신.
한 가지 예외가 있습니다. SSH 프로토콜을 사용하면 클라이언트가 특정 하위 시스템을 요청할 수 있습니다. 클라이언트가 이 sftp
하위 시스템을 요청하면 기본적으로 OpenSSH 서버는 /usr/lib/openssh/sftp-server
사용자의 로그인 셸(위치는 다를 수 있음)을 통해 이 프로그램을 호출합니다. 그러나 유선을 통해 내부 SFTP 서버를 실행하도록 구성할 수도 있습니다.
Subsystem sftp internal-sftp
sshd_config
파일 에서 . 내부 SFTP 서버의 경우, 이 경우에만 사용자의 로그인 셸이 우회됩니다.
이 도전을 위해
OverTheWire Bandit 18 .bashrc
용 포함
…
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
…
echo 'Byebye !'
exit 0
따라서 bash를 비대화형으로 만드는 모든 작업을 수행하여 이 수준을 해결할 수 있습니다.
발견한 대로 SFTP가 작동합니다.
그러나 그것은 또한 작동합니다. 그대로. 대화형 로그인 중에 Ctrl+C를 시기 적절하게 눌러도 작동합니다. bash가 중단되므로 완전히 실행되지는 않습니다. Bash는 시작하는 데 거시적인 시간이 걸리므로 신뢰할 수는 없지만 실제로는 수행할 수 있습니다.ssh [email protected] cat readme
echo 'cat readme' | ssh [email protected]
.bashrc
답변2
.bashrc
쉘을 시작할 때만 실행됩니다.
Subsystem internal-sftp
서버 파일에 명령을 제공하여 SFTP 프로토콜에 대한 셸을 시작하지 않도록 SSH 서버를 구성할 수 있습니다 sshd_config
.
추측: OverTheWire Bandit 전쟁 게임이 실제로 구성되는 방식은 조정이 아니라 이와 같을 가능성이 높습니다. .bashrc
그렇지 않으면 동일한 제한 사항으로 인해 서버 명령 ssh
도 차단되기 때문입니다 .sftp
답변3
sftp는 동일한 자격 증명을 사용하지만 원격 시스템에서 대화형 셸을 실행하지 않습니다.
예를 들어 관리자는 sftp 사용자가 ssh를 실행하는 것을 방지할 수 있습니다.SSH 대신 SFTP만 사용하도록 사용자를 제한하는 방법