CTF에서 SSH로 피벗

에서 저는 CTF 중에 역방향 터널을 구축하는 데 사용할 수 있는 매우 편리한 바이너리인 Chisel에 대해 몇 단락을 썼습니다.

이 도구는 주로 네트워크 피벗에 사용되며 훌륭하게 작동하지만 다른 방법도 있습니다.

짧게 피벗



이전 게시물에서 보았듯이 네트워크 피벗은 대상 시스템과 공격자의 시스템 간의 포워딩 포트로 구성될 수 있습니다.

공격자는 Chisel(또는 다른 도구)로 만든 불량 채널(터널)을 사용하여 자신의 컴퓨터에서 네트워크의 특정 인스턴스(예: Mysql 또는 Mongodb 데이터베이스)에 액세스할 수 있습니다.

아이디어는 네트워크 외부에 노출되지 않은 내부 인스턴스에 도달하기 위해 네트워크에 액세스할 수 있는 첫 번째 손상된 시스템을 사용하는 것입니다.

짧은 SSH



CTF를 플레이하고 있다면 서버에 ssh 연결하는 방법을 이미 알고 있을 것입니다. 가장 기본적인 형태의 연결은 로그인과 암호를 사용하여 서버에 액세스하는 것으로 구성됩니다.

# "user" is the username and "server" can be either an IP or a host like website.ctf
ssh user@server


주의: 보안 강화를 위해 암호 대신 키를 사용하는 것이 좋습니다.

SSH는 "보안 셸"을 의미하며 텔넷과 같은 이전 프로토콜에 대한 안전한 대안으로 설계되었습니다. 텔넷은 일반 텍스트로 정보를 전송하는 반면 네트워크 인프라와 관계없이 통신을 암호화하기 때문에 더 안전합니다.

구성 오류와 인적 오류가 발생하기 때문에 완벽하지는 않지만 충분히 강력합니다.

로컬 포트 ​​포워딩



SSH는 실제로 피벗을 위한 일반적인 프로토콜입니다. 일부 CTF는 시나리오에 보안 셸이 포함되어 있지 않거나 익스플로잇이 다른 계층에 집중하기 때문에 플레이어가 보안 셸을 쉽게 얻는 것을 허용하지 않습니다.

SSH로 피벗하려면 -L 옵션을 사용하여 원격 및 로컬을 바인딩할 수 있습니다. 예를 들면 다음과 같습니다.

# on the attacker's machine
ssh -L {LOCAL_PORT}:127.0.0.1:{REMOTE_PORT} user@server


꽤 직설적 인! 그런 다음 http://127.0.0.1:{LOCAL_PORT}에 로컬로 연결할 수 있습니다.

그런데 왜 그런 전진이 필요한가요?
{REMOTE_PORT}는 대상 서버에서 브로드캐스트되지 않으므로 로컬 시스템에서 이 인스턴스에 액세스하려면 터널을 만들어야 합니다.

그게 다야?!



꽤 많이! 하지만 Chisel과 마찬가지로 상황에 따라 더 복잡한 사용법과 명령어가 있습니다.

CTF는 너무 멀리 가지 않으므로 프록시와 양말을 사용하여 동적으로 포트를 전달할 필요가 없지만 실제로 다른 옵션을 사용하면 가능합니다.

많은 CTF는 이 접근 방식을 사용하여 내부 인스턴스를 탐색하고 암호 또는 다른 사용자의 SSH 키와 같은 추가 정보를 얻어 권한을 에스컬레이션할 수 있도록 "초대"합니다.

좋은 웹페이지 즐겨찾기