11211 - Memcache ํŽœํ…Œ์ŠคํŒ…

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ

ํ”„๋กœํ† ์ฝœ ์ •๋ณด

From wikipedia:

Memcached (๋ฐœ์Œ: mem-cashed, mem-cash-dee)๋Š” ์ผ๋ฐ˜ ๋ชฉ์ ์˜ ๋ถ„์‚ฐ ๋ฉ”๋ชจ๋ฆฌ ์บ์‹ฑ ์‹œ์Šคํ…œ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์™€ ๊ฐ์ฒด๋ฅผ RAM์— ์บ์‹œํ•˜์—ฌ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค(์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋˜๋Š” API)๋ฅผ ์ฝ์–ด์•ผ ํ•˜๋Š” ํšŸ์ˆ˜๋ฅผ ์ค„์ž„์œผ๋กœ์จ ๋™์  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ธฐ๋ฐ˜ ์›น์‚ฌ์ดํŠธ์˜ ์†๋„๋ฅผ ๋†’์ด๋Š” ๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Memcached๋Š” SASL์„ ์ง€์›ํ•˜์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ์ธ์Šคํ„ด์Šค๋Š” ์ธ์ฆ ์—†์ด ๋…ธ์ถœ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ํฌํŠธ: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

Enumeration

Manual

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

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)

์ž๋™ํ™”

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 ์˜์—ญ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์Šฌ๋žฉ์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ, ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•œ ํŠน์ • ๋ช…๋ น์ด ์กด์žฌํ•˜์ง€๋งŒ, ์ฃผ๋ชฉํ•  ๋งŒํ•œ ์ œ์•ฝ์ด ์žˆ์Šต๋‹ˆ๋‹ค:

  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 ํ‚ค ๋คํ”„ (VER 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

DUMPING TOOLS

Table from here.

Programming LanguagesToolsFunctionality
PHPsimple scriptํ‚ค ์ด๋ฆ„์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
Perlsimple scriptํ‚ค์™€ ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
Rubysimple scriptํ‚ค ์ด๋ฆ„์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
PerlmemdumpCPAN ๋ชจ๋“ˆ์˜ ๋„๊ตฌMemcached-libmemcachedached/)
PHPmemcache.phpํ‚ค ๋คํ”„๋„ ๊ฐ€๋Šฅํ•œ Memcache ๋ชจ๋‹ˆํ„ฐ๋ง GUI
libmemcachedpeepmemcached ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๋‹จ์‹œํ‚ต๋‹ˆ๋‹ค!!! ํ”„๋กœ๋•์…˜์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•˜์„ธ์š”. ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•˜๋ฉด 1MB ์ œํ•œ์„ ์šฐํšŒํ•˜๊ณ  ๋ชจ๋“  ํ‚ค๋ฅผ ๋คํ”„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Troubleshooting

1MB Data Limit

memcached 1.4 ์ด์ „์—๋Š” ๊ธฐ๋ณธ ์ตœ๋Œ€ ์Šฌ๋žฉ ํฌ๊ธฐ๋กœ ์ธํ•ด 1MB๋ณด๋‹ค ํฐ ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Never Set a Timeout > 30 Days!

ํ—ˆ์šฉ๋œ ์ตœ๋Œ€๊ฐ’๋ณด๋‹ค ํฐ ํƒ€์ž„์•„์›ƒ์œผ๋กœ ํ‚ค๋ฅผ โ€œ์„ค์ •โ€ํ•˜๊ฑฐ๋‚˜ โ€œ์ถ”๊ฐ€โ€ํ•˜๋ ค๊ณ  ํ•˜๋ฉด memcached๊ฐ€ ๊ฐ’์„ Unix ํƒ€์ž„์Šคํƒฌํ”„๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํƒ€์ž„์Šคํƒฌํ”„๊ฐ€ ๊ณผ๊ฑฐ์— ์žˆ์œผ๋ฉด ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์ด ์กฐ์šฉํžˆ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ตœ๋Œ€ ์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด 2592000์„ ์ง€์ •ํ•˜์„ธ์š”. ์˜ˆ:

set my_key 0 2592000 1
1

Disappearing Keys on Overflow

๋ฌธ์„œ์—์„œ๋Š” โ€œincrโ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 64๋น„ํŠธ ๊ฐ’์ด ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋  ๋•Œ ๊ฐ’์ด ์‚ฌ๋ผ์ง„๋‹ค๊ณ  ์–ธ๊ธ‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ โ€œaddโ€/โ€setโ€์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Replication

memcached ์ž์ฒด๋Š” ๋ณต์ œ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ •๋ง ํ•„์š”ํ•˜๋‹ค๋ฉด 3rd party ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค:

  • repcached: ๋‹ค์ค‘ ๋งˆ์Šคํ„ฐ ๋น„๋™๊ธฐ ๋ณต์ œ (memcached 1.2 ํŒจ์น˜ ์„ธํŠธ)
  • Couchbase memcached interface: CouchBase๋ฅผ memcached ๋“œ๋กญ์ธ์œผ๋กœ ์‚ฌ์šฉ
  • yrmcds: memcached ํ˜ธํ™˜ ๋งˆ์Šคํ„ฐ-์Šฌ๋ ˆ์ด๋ธŒ ํ‚ค ๊ฐ’ ์ €์žฅ์†Œ
  • twemproxy (aka nutcracker): memcached ์ง€์› ํ”„๋ก์‹œ

Commands Cheat-Sheet

Memcache Commands

Shodan

  • port:11211 "STAT pid"
  • "STAT pid"

References

Tip

AWS ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ:HackTricks Training AWS Red Team Expert (ARTE)
GCP ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training GCP Red Team Expert (GRTE) Azure ํ•ดํ‚น ๋ฐฐ์šฐ๊ธฐ ๋ฐ ์—ฐ์Šตํ•˜๊ธฐ: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks ์ง€์›ํ•˜๊ธฐ