11211 - Pentesting Memcache

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

프로토콜 정보

wikipedia에서 가져온 내용:

Memcached(발음: mem-cashed, mem-cash-dee)는 일반적인 분산 메모리 캐싱 시스템입니다. 데이터와 객체를 RAM에 캐싱하여 동적 데이터베이스 기반 웹 사이트의 속도를 높이는 데 자주 사용되며, 외부 데이터 소스(데이터베이스 또는 API와 같은)를 읽는 횟수를 줄입니다.

Memcached는 SASL을 지원하지만 대부분의 인스턴스는 인증 없이 노출됩니다.

기본 포트: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

열거

수동

memcache 인스턴스에 저장된 모든 정보를 유출하려면 다음을 수행해야 합니다:

  1. 활성 항목이 있는 슬랩 찾기

  2. 이전에 감지된 슬랩의 키 이름 가져오기

  3. 키 이름을 사용하여 저장된 데이터를 유출하기

이 서비스는 단순히 캐시이므로 데이터가 나타나고 사라질 수 있음을 기억하세요.

echo "version" | nc -vn -w 1 <IP> 11211      #Get version
echo "stats" | nc -vn -w 1 <IP> 11211        #Get status
echo "stats slabs" | nc -vn -w 1 <IP> 11211  #Get slabs
echo "stats items" | nc -vn -w 1 <IP> 11211  #Get items of slabs with info
echo "stats cachedump <number> 0" | nc -vn -w 1 <IP> 11211  #Get key names (the 0 is for unlimited output size)
echo "get <item_name>" | nc -vn -w 1 <IP> 11211  #Get saved info

#This php will just dump the keys, you need to use "get <item_name> later"
sudo apt-get install php-memcached
php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );'

매뉴얼2

Memcached는 분산 메모리 객체 캐싱 시스템으로, 네트워크 서비스 펜테스팅 중에 자주 사용됩니다. Memcached는 기본적으로 11211 포트에서 실행되며, 일반적으로 웹 애플리케이션에서 데이터베이스 쿼리나 다른 계산 집약적인 작업의 결과를 캐시하는 데 사용됩니다.

Memcached 서버에 대한 정보를 수집하기 위해 다음 명령을 사용할 수 있습니다.

nmap -p 11211 <target>

Memcached 서버에 연결하기 위해 telnet 명령을 사용할 수 있습니다.

telnet <target> 11211

Memcached 서버에 연결되면 다양한 명령을 실행할 수 있습니다. 일부 유용한 명령은 다음과 같습니다.

  • stats: Memcached 서버의 통계 정보를 표시합니다.

  • get <key>: 지정된 키에 해당하는 값을 가져옵니다.

  • set <key> <flags> <exptime> <bytes> [noreply]: 지정된 키에 값을 설정합니다.

  • delete <key> [noreply]: 지정된 키의 값을 삭제합니다.

Memcached 서버에서 데이터를 누출하는 취약점을 찾기 위해 다음 명령을 사용할 수 있습니다.

stats items
stats slabs
stats cachedump <slab_id> <limit>

Memcached 서버에 대한 액세스 권한을 얻은 경우, 다음과 같은 공격을 시도할 수 있습니다.

  • Memcached 서버를 사용하여 DDoS 공격을 수행합니다.

  • Memcached 서버를 사용하여 데이터베이스나 다른 서비스에 대한 인증 우회를 시도합니다.

  • Memcached 서버를 사용하여 데이터를 조작하거나 삭제합니다.

Memcached 서버를 펜테스트하는 동안 주의해야 할 몇 가지 사항이 있습니다.

  • Memcached 서버에 대한 액세스 권한을 얻은 경우, 적절한 동의 없이 데이터를 조작하거나 삭제하지 마십시오.

  • Memcached 서버를 사용하여 DDoS 공격을 수행할 때는 법적인 제한 사항을 준수하십시오.

  • Memcached 서버를 펜테스트하기 전에 적절한 권한과 동의를 얻으십시오.

sudo apt install libmemcached-tools
memcstat --servers=127.0.0.1 #Get stats
memcdump --servers=127.0.0.1 #Get all items
memccat  --servers=127.0.0.1 <item1> <item2> <item3> #Get info inside the item(s)

자동

Memcached는 분산 메모리 객체 캐싱 시스템으로, 네트워크 서비스 펜테스팅 중에 자주 사용됩니다. Memcached 서버는 11211 포트에서 실행되며, 일반적으로 TCP 프로토콜을 사용하여 클라이언트와 통신합니다.

Memcached 서버에 대한 자동화된 공격은 Memcrashed라고도 알려져 있습니다. 이 공격은 UDP 프로토콜을 사용하여 Memcached 서버에 대량의 데이터를 요청하여 서버를 과부하시키는 것입니다. 이를 통해 서비스 거부 (DoS) 공격을 수행할 수 있습니다.

Memcrashed 공격을 실행하기 위해 memcrashed.py 스크립트를 사용할 수 있습니다. 이 스크립트는 Python 2.7에서 실행되며, scapy 라이브러리를 사용하여 UDP 패킷을 생성합니다. 스크립트를 실행하기 전에 Memcached 서버의 IP 주소를 확인하고, 목표 서버에 대한 악의적인 요청을 보내기 위해 스크립트를 수정해야 할 수도 있습니다.

Memcrashed 공격은 서비스 거부 공격을 수행하기 때문에, 합법적인 목적으로만 사용해야 합니다. 서비스 제공자의 동의 없이 이러한 공격을 수행하는 것은 불법입니다.

nmap -n -sV --script memcached-info -p 11211 <IP>   #Just gather info
msf > use auxiliary/gather/memcached_extractor      #Extracts saved data
msf > use auxiliary/scanner/memcached/memcached_amp #Check is UDP DDoS amplification attack is possible

Memcache 키 덤프

Memcache의 영역에서, 데이터를 슬랩으로 구성하는 프로토콜인 memcache에는 저장된 데이터를 검사하기 위한 특정 명령이 있습니다. 그러나 몇 가지 주목할만한 제약 사항이 있습니다:

  1. 키는 슬랩 클래스별로만 덤프 할 수 있으며, 비슷한 내용 크기의 키를 그룹화합니다.

  2. 슬랩 클래스당 한 페이지의 제한이 있으며, 이는 1MB의 데이터에 해당합니다.

  3. 이 기능은 비공식적이며 언제든지 중단될 수 있습니다. 커뮤니티 포럼에서 논의되었습니다.

잠재적으로 기가바이트의 데이터에서 1MB만 덤프 할 수 있다는 제한은 특히 중요합니다. 그러나 이 기능은 특정 요구에 따라 키 사용 패턴에 대한 통찰력을 제공할 수 있습니다. 메커니즘에 덜 관심이 있는 사람들을 위해 도구 섹션을 방문하면 포괄적인 덤프를 위한 유틸리티를 찾을 수 있습니다. 또는 memcached 설정과 직접 상호 작용하기 위해 telnet을 사용하는 과정은 아래에 설명되어 있습니다.

작동 방식

Memcache의 메모리 구성은 중요합니다. "-vv" 옵션으로 memcache를 초기화하면 생성되는 슬랩 클래스가 표시됩니다. 아래에 표시된 것과 같습니다:

$ memcached -vv
slab class   1: chunk size        96 perslab   10922
[...]

현재 존재하는 모든 슬랩을 표시하려면 다음 명령을 사용합니다:

stats slabs

memcached 1.4.13에 키 하나를 추가하는 것은 슬랩 클래스가 어떻게 생성되고 관리되는지를 보여줍니다. 예를 들어:

set mykey 0 60 1
1
STORED

"stats slabs" 명령을 실행하면 키 추가 후 슬랩 활용에 대한 상세한 통계가 제공됩니다:

stats slabs
[...]

이 출력은 활성 슬랩 유형, 사용 중인 청크 및 운영 통계를 나타내어 읽기 및 쓰기 작업의 효율성에 대한 통찰력을 제공합니다.

또 다른 유용한 명령인 "stats items"는 제거, 메모리 제약 및 항목 수명 주기에 대한 데이터를 제공합니다:

stats items
[...]

이러한 통계는 캐싱된 컨텐츠의 크기, 메모리 할당 및 대용량 객체 캐싱을 위한 용량을 포함하여 응용 프로그램 캐싱 동작에 대한 교육적인 가정을 가능하게 합니다.

키 덤프

1.4.31 이전 버전에서는 키를 슬랩 클래스별로 덤프합니다. 사용하는 명령어는 다음과 같습니다:

stats cachedump <slab class> <number of items to dump>

예를 들어, 클래스 #1에서 키를 덤프하려면 다음과 같이 합니다:

stats cachedump 1 1000
ITEM mykey [1 b; 1350677968 s]
END

이 방법은 슬랩 클래스를 반복하며 키 값을 추출하고 선택적으로 덤프하는 방법입니다.

MEMCACHE 키 덤프 (버전 1.4.31 이상)

Memcache 버전 1.4.31 이상에서는 릴리스 노트에 자세히 설명된 대로, 프로덕션 환경에서 키를 덤프하기 위한 새로운, 안전한 방법이 도입되었습니다. 이 접근 방식은 상세한 출력을 생성하므로 효율성을 위해 'nc' 명령을 사용하는 것을 권장합니다. 예시는 다음과 같습니다:

echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | head -1
echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | grep ee6ba58566e234ccbbce13f9a24f9a28

덤프 도구

여기에서 가져옴.

프로그래밍 언어도구기능

PHP

키 이름을 출력합니다.

Perl

키와 값을 출력합니다.

Ruby

키 이름을 출력합니다.

Perl

CPAN 모듈의 도구

ached/)

PHP

덤프 키를 허용하는 Memcache 모니터링 GUI

libmemcached

메모리 캐시 프로세스를 멈춥니다!!! 이를 사용할 때는 제품 환경에서 주의해야 합니다. 그래도 사용하면 1MB 제한을 우회하고 모든 키를 덤프할 수 있습니다.

문제 해결

1MB 데이터 제한

memcached 1.4 이전에는 기본 최대 슬랩 크기로 인해 1MB보다 큰 객체를 저장할 수 없습니다.

타임아웃을 30일 이상으로 설정하지 마세요!

허용된 최대값보다 큰 타임아웃으로 "set" 또는 "add" 키를 설정하면 memcached가 값을 Unix 타임스탬프로 처리하기 때문에 예상한 대로 동작하지 않을 수 있습니다. 또한 타임스탬프가 과거에 있는 경우 아무 작업도 수행하지 않습니다. 명령이 무음으로 실패합니다.

따라서 최대 수명을 사용하려면 2592000을 지정하십시오. 예시:

set my_key 0 2592000 1
1

오버플로우로 인한 키의 사라짐

64비트를 초과하는 값에 대해 "incr"을 사용하여 오버플로우를 발생시키면 값이 사라집니다. "add" 또는 "set"을 사용하여 다시 생성해야 합니다.

복제

memcached 자체는 복제를 지원하지 않습니다. 실제로 필요한 경우 3rd party 솔루션을 사용해야 합니다:

명령어 치트 시트

pageMemcache Commands

Shodan

  • port:11211 "STAT pid"

  • "STAT pid"

참고 자료

htARTE (HackTricks AWS Red Team Expert) 로 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

Last updated