11211 - Pentesting Memcache
Last updated
Last updated
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE) GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
wikipedia에서:
Memcached (발음: mem-cashed, mem-cash-dee)는 일반 목적의 분산 메모리 캐싱 시스템입니다. 데이터와 객체를 RAM에 캐시하여 외부 데이터 소스(예: 데이터베이스 또는 API)를 읽어야 하는 횟수를 줄임으로써 동적 데이터베이스 기반 웹사이트의 속도를 높이는 데 자주 사용됩니다.
Memcached는 SASL을 지원하지만, 대부분의 인스턴스는 인증 없이 노출되어 있습니다.
기본 포트: 11211
memcache 인스턴스에 저장된 모든 정보를 유출하려면 다음을 수행해야 합니다:
활성 항목이 있는 슬랩 찾기
이전에 감지된 슬랩의 키 이름 가져오기
키 이름을 가져와서 저장된 데이터 유출하기
이 서비스는 단지 캐시라는 점을 기억하세요, 그래서 데이터가 나타나고 사라질 수 있습니다.
memcache 영역에서, 데이터를 슬랩으로 조직하는 데 도움을 주는 프로토콜로, 저장된 데이터를 검사하기 위한 특정 명령이 존재하지만, 주목할 만한 제약이 있습니다:
키는 슬랩 클래스별로만 덤프할 수 있으며, 유사한 콘텐츠 크기의 키를 그룹화합니다.
슬랩 클래스당 한 페이지의 제한이 있으며, 이는 1MB의 데이터에 해당합니다.
이 기능은 비공식적이며, 커뮤니티 포럼에서 논의된 바와 같이 언제든지 중단될 수 있습니다.
잠재적으로 기가바이트의 데이터에서 1MB만 덤프할 수 있다는 제한은 특히 중요합니다. 그러나 이 기능은 특정 요구 사항에 따라 키 사용 패턴에 대한 통찰력을 제공할 수 있습니다. 메커니즘에 덜 관심이 있는 경우, 도구 섹션을 방문하면 포괄적인 덤프를 위한 유틸리티를 확인할 수 있습니다. 또는, memcached 설정과의 직접 상호작용을 위한 telnet 사용 과정은 아래에 설명되어 있습니다.
memcache의 메모리 조직은 중요합니다. "-vv" 옵션으로 memcache를 시작하면 생성되는 슬랩 클래스를 확인할 수 있습니다, 아래와 같이:
현재 존재하는 모든 슬랩을 표시하려면 다음 명령을 사용합니다:
Adding a single key to memcached 1.4.13는 슬랩 클래스가 어떻게 채워지고 관리되는지를 보여줍니다. 예를 들어:
"stats slabs" 명령을 키 추가 후 실행하면 슬랩 활용에 대한 자세한 통계를 제공합니다:
이 출력은 활성 슬랩 유형, 사용된 청크 및 운영 통계를 보여주며, 읽기 및 쓰기 작업의 효율성에 대한 통찰력을 제공합니다.
또 다른 유용한 명령어인 "stats items"는 퇴출, 메모리 제약 및 항목 생애 주기에 대한 데이터를 제공합니다:
이 통계는 다양한 콘텐츠 크기에 대한 캐시 효율성, 메모리 할당 및 대형 객체 캐싱 용량을 포함하여 애플리케이션 캐싱 동작에 대한 교육된 가정을 가능하게 합니다.
1.4.31 이전 버전에서는 키가 슬랩 클래스별로 덤프됩니다:
예를 들어, 클래스 #1에서 키를 덤프하려면:
이 방법은 슬랩 클래스를 반복하여 키 값을 추출하고 선택적으로 덤프합니다.
memcache 버전 1.4.31 이상에서는 프로덕션 환경에서 키를 덤프하기 위한 새로운 안전한 방법이 도입되었으며, 이는 릴리스 노트에서 자세히 설명된 비차단 모드를 활용합니다. 이 접근 방식은 방대한 출력을 생성하므로 효율성을 위해 'nc' 명령을 사용하는 것이 권장됩니다. 예시로는:
Table from here.
libmemcached
memcached 프로세스를 중단시킵니다!!! 프로덕션에서 사용할 때 주의하세요. 여전히 사용하면 1MB 제한을 우회하고 모든 키를 덤프할 수 있습니다.
memcached 1.4 이전에는 기본 최대 슬랩 크기 때문에 1MB보다 큰 객체를 저장할 수 없습니다.
허용된 최대값보다 큰 타임아웃으로 키를 “설정”하거나 “추가”하려고 하면 memcached가 값을 Unix 타임스탬프로 처리하기 때문에 예상한 대로 되지 않을 수 있습니다. 또한 타임스탬프가 과거에 있으면 아무 작업도 수행하지 않습니다. 명령이 조용히 실패합니다.
따라서 최대 수명을 사용하려면 2592000을 지정하세요. 예:
문서에서는 “incr”를 사용하여 64비트 값이 오버플로우되면 값이 사라진다고 언급하고 있습니다. 다시 “add”/”set”을 사용하여 생성해야 합니다.
memcached 자체는 복제를 지원하지 않습니다. 정말 필요하다면 3rd party 솔루션을 사용해야 합니다:
repcached: 다중 마스터 비동기 복제 (memcached 1.2 패치 세트)
Couchbase memcached interface: CouchBase를 memcached 드롭인으로 사용
yrmcds: memcached 호환 마스터-슬레이브 키 값 저장소
twemproxy (aka nutcracker): memcached 지원 프록시
port:11211 "STAT pid"
"STAT pid"
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)