11211 - Pentesting Memcache

Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na htARTE (Mtaalamu wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Taarifa za Itifaki

Kutoka wikipedia:

Memcached (matamshi: mem-cashed, mem-cash-dee) ni mfumo wa kusambaza kumbukumbu ya kawaida ya kumbukumbu ya kache. Mara nyingi hutumiwa kuongeza kasi ya tovuti za wavuti zinazotumia hifadhidata za kudumu kwa kuhifadhi data na vitu kwenye RAM ili kupunguza idadi ya mara ambazo chanzo cha data nje (kama vile hifadhidata au API) inapaswa kusomwa.

Ingawa Memcached inasaidia SASL, sehemu nyingi zina hazina uthibitisho.

Bandari ya chaguo-msingi: 11211

PORT      STATE SERVICE
11211/tcp open  unknown

Uchambuzi

Kwa Mkono

Ili kuchukua habari zote zilizohifadhiwa ndani ya kifaa cha memcache unahitaji:

  1. Kupata slabs na vitu vilivyopo

  2. Pata majina ya funguo za slabs zilizogunduliwa hapo awali

  3. Chukua data iliyohifadhiwa kwa kupata majina ya funguo

Kumbuka kuwa huduma hii ni tu hifadhi, kwa hivyo data inaweza kuonekana na kutoweka.

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() );'

Mwongozo2

Memcached ni mfumo wa kuhifadhi data ya kumbukumbu ya kati (in-memory caching) ambayo inaweza kutumiwa kuboresha utendaji wa tovuti na programu. Katika mwongozo huu, tutajifunza jinsi ya kufanya pentesting kwenye seva ya Memcached ili kugundua udhaifu na kufanya mashambulizi.

Kuanzisha Mazingira

Kabla ya kuanza pentesting, tunahitaji kuwa na mazingira ya Memcached yaliyosanidiwa. Unaweza kufanya hivyo kwa kufuata hatua zifuatazo:

  1. Sakinisha Memcached kwenye seva yako.

  2. Sanidi Memcached kwa kusikiliza kwenye bandari ya 11211.

  3. Hakikisha kuwa Memcached inaruhusu upatikanaji kutoka kwa anwani ya IP ya mtandao wako.

Kugundua Memcached

Kabla ya kuanza kufanya mashambulizi, tunahitaji kugundua seva ya Memcached inayopatikana. Tunaweza kutumia zana kama nmap au masscan kufanya hivyo. Kwa mfano, unaweza kutumia amri ifuatayo:

nmap -p 11211 --script memcached-info <target>

Mashambulizi ya Memcached

Kuna aina kadhaa za mashambulizi ambayo tunaweza kufanya kwenye seva ya Memcached. Hapa kuna baadhi yao:

  1. Mashambulizi ya kufurika (Flood Attacks): Tunaweza kutumia zana kama memcrashed kufanya mashambulizi ya kufurika kwa kutuma maombi mengi ya kumbukumbu kwa seva ya Memcached. Hii inaweza kusababisha kuzidiwa kwa rasilimali na kusababisha kukwama kwa seva.

  2. Mashambulizi ya kumbukumbu (Memory Attacks): Tunaweza kutumia zana kama memcrashed kufanya mashambulizi ya kumbukumbu kwa kuchukua faida ya udhaifu katika itifaki ya Memcached. Hii inaweza kusababisha kuvuja kwa data nyeti au hata kuchukua udhibiti wa seva.

Kujilinda dhidi ya Mashambulizi ya Memcached

Ili kujilinda dhidi ya mashambulizi ya Memcached, unaweza kuchukua hatua zifuatazo:

  1. Sanidi Memcached kwa usalama: Hakikisha kuwa Memcached imefungwa kwa anwani za IP zinazofaa na bandari zinazofaa. Pia, hakikisha kuwa Memcached haipatikani kutoka kwa mtandao wote.

  2. Tumia firewall: Weka firewall kwenye seva yako ili kuzuia upatikanaji usioidhinishwa kwenye bandari ya Memcached.

  3. Fanya upya ufungaji wa Memcached: Ikiwa una wasiwasi kuwa seva yako imeathiriwa, fanya upya ufungaji wa Memcached na sanidi upya mipangilio yote.

Kwa kufuata hatua hizi, unaweza kujilinda dhidi ya mashambulizi ya Memcached na kuhakikisha usalama wa seva yako.

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)

Kiotomatiki

Memcached is a widely used in-memory caching system that is often deployed in web applications to improve performance. However, misconfigurations in Memcached can lead to security vulnerabilities that can be exploited by attackers.

One common misconfiguration is leaving the Memcached service exposed to the internet without any authentication. This allows anyone to connect to the Memcached service and perform various operations, including retrieving and modifying data.

To automate the process of identifying and exploiting misconfigured Memcached instances, you can use tools like memcrashed or Memcrashed-DDoS-Exploit. These tools leverage the Memcached protocol to send a large number of UDP packets to the target Memcached server, causing it to amplify the traffic and potentially overload the target's network.

To use these tools, you need to provide the IP address of the target Memcached server and specify the port on which the Memcached service is running (usually port 11211). The tools will then send a series of commands to the Memcached server, such as stats, get, or set, to gather information or manipulate data.

It is important to note that exploiting misconfigured Memcached instances without proper authorization is illegal and unethical. These tools should only be used for legitimate purposes, such as penetration testing or security research, with the explicit permission of the target organization.

To protect your own Memcached instances from being exploited, make sure to follow best practices such as enabling authentication, restricting access to trusted networks, and regularly updating and patching the Memcached software.

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

Kudondosha Funguo za Memcache

Katika ulimwengu wa memcache, itifaki inayosaidia kuandaa data kwa njia ya slabs, amri maalum zipo kwa ajili ya kuangalia data iliyohifadhiwa, ingawa kuna vikwazo muhimu:

  1. Funguo zinaweza kudondoshwa tu kwa darasa la slab, kwa kuchanganya funguo zenye ukubwa sawa wa maudhui.

  2. Kuna kikomo cha ukurasa mmoja kwa darasa la slab, sawa na 1MB ya data.

  3. Kipengele hiki ni kisicho rasmi na kinaweza kuachwa wakati wowote, kama ilivyozungumziwa katika majadiliano ya jamii.

Kikwazo cha kuweza kudondosha tu 1MB kutoka kwenye data inayoweza kuwa gigabytes ni muhimu sana. Walakini, kazi hii bado inaweza kutoa ufahamu juu ya mifumo ya matumizi ya funguo, kulingana na mahitaji maalum. Kwa wale ambao hawana nia kubwa na uhandisi, kutembelea sehemu ya zana kunafunua zana za kudondosha kwa kina. Vinginevyo, mchakato wa kutumia telnet kwa mwingiliano moja kwa moja na mipangilio ya memcached imeelezewa hapa chini.

Jinsi Inavyofanya Kazi

Utaratibu wa kumbukumbu ya memcache ni muhimu. Kuanzisha memcache na chaguo la "-vv" kunafunua darasa za slab inazozalisha, kama inavyoonyeshwa hapa chini:

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

Kutazama slabs zote zilizopo kwa sasa, tumia amri ifuatayo:

stats slabs

Kuongeza ufunguo mmoja kwa memcached 1.4.13 inaonyesha jinsi darasa za slab zinavyojazwa na kusimamiwa. Kwa mfano:

set mykey 0 60 1
1
STORED

Kutekeleza amri ya "stats slabs" baada ya kuongeza funguo hutoa takwimu za kina kuhusu matumizi ya slabu:

stats slabs
[...]

Hii matokeo inaonyesha aina za slab zilizopo, vipande vilivyotumika, na takwimu za uendeshaji, zinazotoa ufahamu juu ya ufanisi wa operesheni za kusoma na kuandika.

Amri nyingine muhimu, "stats items", hutoa data juu ya kuondolewa, mipaka ya kumbukumbu, na mzunguko wa vitu:

stats items
[...]

Takwimu hizi zinaruhusu makadirio yenye elimu kuhusu tabia ya kuhifadhi programu, ikiwa ni pamoja na ufanisi wa kuhifadhi kwa ukubwa tofauti wa yaliyomo, ugawaji wa kumbukumbu, na uwezo wa kuhifadhi vitu vikubwa.

Kuweka Njia za Kuhifadhi

Kwa toleo kabla ya 1.4.31, njia za kuhifadhi hutiwa kwa kutumia darasa la slab kwa kutumia:

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

Kwa mfano, kumwaga ufunguo katika darasa #1:

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

Mbinu hii inarudia darasa za slab, ikitoa na ikidump muhimu za ufunguo.

KUDUMP MEMCACHE UFUNGUO (VER 1.4.31+)

Kuanzia toleo la memcache 1.4.31 na zaidi, njia mpya na salama ya kudump muhimu katika mazingira ya uzalishaji imeletwa, ikitumia hali ya kutofungwa kama ilivyoelezwa katika taarifa za kutolewa. Njia hii inazalisha matokeo mengi, hivyo inapendekezwa kutumia amri ya 'nc' kwa ufanisi. Mifano ni pamoja na:

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

VIFAA VYA KUDUMU

Jedwali kutoka hapa.

Lugha za ProgramuVifaaUwezo

PHP

Inachapisha majina ya funguo.

Perl

Inachapisha majina na thamani za funguo.

Ruby

Inachapisha majina ya funguo.

Perl

Zana katika moduli ya CPAN

ached/)

PHP

Kiolesura cha Ufuatiliaji cha Memcache ambacho pia kinaruhusu kudumu kwa funguo

libmemcached

Inafungia mchakato wako wa memcached!!! Kuwa makini unapotumia hii katika uzalishaji. Hata hivyo, unaweza kuzunguka kizuizi cha 1MB na kudumu kweli funguo zote.

Kutatua Matatizo

Kikomo cha Data cha 1MB

Tafadhali kumbuka kuwa kabla ya memcached 1.4 huwezi kuhifadhi vitu vikubwa kuliko 1MB kutokana na ukubwa wa kawaida wa slab.

Kamwe Usiweke Muda wa Mwisho > Siku 30!

Ikiwa unajaribu "kuweka" au "kuongeza" funguo na muda wa mwisho mkubwa kuliko kiwango kilichoruhusiwa, huenda usipate matokeo unayotarajia kwa sababu memcached itachukulia thamani hiyo kama alama ya wakati ya Unix. Pia, ikiwa alama ya wakati iko nyuma, haitafanya chochote kabisa. Amri yako itashindwa kimya kimya.

Kwa hivyo, ikiwa unataka kutumia muda wa maisha wa kiwango cha juu, taja 2592000. Mfano:

set my_key 0 2592000 1
1

Vipengele Vinavyotoweka kwa Kujaa

Licha ya nyaraka kusema kitu kuhusu kuzunguka kwa 64bit kwa kujaa kwa thamani kwa kutumia "incr" husababisha thamani kutoweka. Inahitaji kuundwa tena kwa kutumia "add" / "set".

Ulinganishaji

memcached yenyewe haishikilii ulinganishaji. Ikiwa unahitaji kweli, unahitaji kutumia suluhisho za tatu:

  • repcached: Ulinganishaji wa asinkroni wa multi-master (seti ya patch ya memcached 1.2)

  • Kioo cha Couchbase memcached: Tumia CouchBase kama mbadala wa memcached

  • yrmcds: Uhifadhi wa thamani ya ufunguo wa Mwalimu-Mtumwa unaofanana na memcached

  • twemproxy (inayojulikana pia kama nutcracker): proksi yenye msaada wa memcached

Orodha ya Amri za Kudanganya

pageMemcache Commands

Shodan

  • port:11211 "STAT pid"

  • "STAT pid"

Marejeo

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks:

Last updated