# 11211 - Pentesting Memcache {{#include ../../banners/hacktricks-training.md}} ## Protocol Information From [wikipedia](https://en.wikipedia.org/wiki/Memcached): > **Memcached** (matamshi: mem-cashed, mem-cash-dee) ni mfumo wa [memory caching](https://en.wikipedia.org/wiki/Memory_caching) wa kusambaza kwa matumizi ya jumla. Mara nyingi hutumiwa kuongeza kasi ya tovuti zinazotegemea hifadhidata za kidinamikia kwa kuhifadhi data na vitu katika RAM ili kupunguza idadi ya nyakati chanzo cha data cha nje (kama vile hifadhidata au API) kinapaswa kusomwa. Ingawa Memcached inasaidia SASL, mifano mingi ni **iliyowekwa wazi bila uthibitisho**. **Bandari ya kawaida:** 11211 ``` PORT STATE SERVICE 11211/tcp open unknown ``` ## Uainishaji ### Mikono Ili kuhamasisha taarifa zote zilizohifadhiwa ndani ya mfano wa memcache unahitaji: 1. Kupata **slabs** zenye **vitu vilivyo hai** 2. Kupata **majina ya funguo** ya slabs zilizogunduliwa kabla 3. Kuhamasisha **data iliyohifadhiwa** kwa **kupata majina ya funguo** Kumbuka kwamba huduma hii ni **cache** tu, hivyo **data inaweza kuonekana na kup消**. ```bash echo "version" | nc -vn -w 1 11211 #Get version echo "stats" | nc -vn -w 1 11211 #Get status echo "stats slabs" | nc -vn -w 1 11211 #Get slabs echo "stats items" | nc -vn -w 1 11211 #Get items of slabs with info echo "stats cachedump 0" | nc -vn -w 1 11211 #Get key names (the 0 is for unlimited output size) echo "get " | nc -vn -w 1 11211 #Get saved info #This php will just dump the keys, you need to use "get later" sudo apt-get install php-memcached php -r '$c = new Memcached(); $c->addServer("localhost", 11211); var_dump( $c->getAllKeys() );' ``` ### Manual2 ```bash 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 #Get info inside the item(s) ``` ### Kiotomatiki ```bash nmap -n -sV --script memcached-info -p 11211 #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 ``` ## **Kutoa Funguo za Memcache** Katika eneo la memcache, protokali inayosaidia katika kuandaa data kwa slabs, amri maalum zipo kwa ajili ya kukagua data iliyohifadhiwa, ingawa kwa vizuizi vya kutambulika: 1. Funguo zinaweza tu kutolewa kwa darasa la slab, zikikundi funguo za ukubwa sawa wa maudhui. 2. Kuna kikomo cha ukurasa mmoja kwa darasa la slab, kinacholingana na 1MB ya data. 3. Kipengele hiki si rasmi na kinaweza kusitishwa wakati wowote, kama ilivyojadiliwa katika [mijadala ya jamii](https://groups.google.com/forum/?fromgroups=#!topic/memcached/1-T8I-RVGKM). Kikomo cha kutoa tu 1MB kutoka kwa data inayoweza kuwa gigabytes ni muhimu sana. Hata hivyo, kazi hii bado inaweza kutoa mwanga juu ya mifumo ya matumizi ya funguo, kulingana na mahitaji maalum. Kwa wale wasiokuwa na hamu sana na mitambo, kutembelea [sehemu ya zana](https://lzone.de/cheat-sheet/memcached#tools) kunaonyesha zana za kutoa kwa kina. Vinginevyo, mchakato wa kutumia telnet kwa mwingiliano wa moja kwa moja na mipangilio ya memcached umeelezwa hapa chini. ### **Inavyofanya Kazi** Organizasheni ya kumbukumbu ya memcache ni muhimu. Kuanzisha memcache kwa chaguo "-vv" kunaonyesha madarasa ya slab yanayozalishwa, kama inavyoonyeshwa hapa chini: ```bash $ memcached -vv slab class 1: chunk size 96 perslab 10922 [...] ``` Ili kuonyesha slabs zote zilizopo kwa sasa, amri ifuatayo inatumika: ```bash stats slabs ``` Kuongeza ufunguo mmoja kwa memcached 1.4.13 inaonyesha jinsi madarasa ya slab yanavyojazwa na kusimamiwa. Kwa mfano: ```bash set mykey 0 60 1 1 STORED ``` Kutekeleza amri "stats slabs" baada ya kuongeza ufunguo kunatoa takwimu za kina kuhusu matumizi ya slab: ```bash stats slabs [...] ``` Hii taarifa inaonyesha aina za slab zinazofanya kazi, vipande vinavyotumika, na takwimu za uendeshaji, ikitoa mwanga juu ya ufanisi wa operesheni za kusoma na kuandika. Amri nyingine muhimu, "stats items", inatoa data kuhusu kufukuzwa, vikwazo vya kumbukumbu, na mizunguko ya vitu: ```bash stats items [...] ``` Takwimu hizi zinaruhusu dhana za kielimu kuhusu tabia ya caching ya programu, ikiwa ni pamoja na ufanisi wa cache kwa saizi tofauti za maudhui, ugawaji wa kumbukumbu, na uwezo wa kuhifadhi vitu vikubwa. ### **Kutoa Funguo** Kwa toleo la kabla ya 1.4.31, funguo zinatolewa kwa kutumia darasa la slab: ```bash stats cachedump ``` Kwa mfano, kutoa funguo katika darasa #1: ```bash stats cachedump 1 1000 ITEM mykey [1 b; 1350677968 s] END ``` Hii mbinu inarudiarudia madarasa ya slab, ikitoa na kwa hiari kutupa thamani za funguo. ### **KUTUPA THAMANI ZA MEMCACHE (VER 1.4.31+)** Kwa toleo la memcache 1.4.31 na juu, mbinu mpya, salama zaidi ya kutupa funguo katika mazingira ya uzalishaji imeanzishwa, ikitumia hali isiyozuia kama ilivyoelezwa katika [release notes](https://github.com/memcached/memcached/wiki/ReleaseNotes1431). Njia hii inazalisha matokeo makubwa, hivyo mapendekezo ya kutumia amri 'nc' kwa ufanisi. Mifano ni pamoja na: ```bash 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](https://lzone.de/blog). | Programming Languages | Tools | Functionality | | | | --------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ------- | | PHP | [simple script](http://snipt.org/xtP) | Inachapisha majina ya funguo. | | | | Perl | [simple script](https://wiki.jasig.org/download/attachments/13572172/memcached-clean.pl?version=1&modificationDate=1229693957401) | Inachapisha funguo na thamani | | | | Ruby | [simple script](https://gist.github.com/1365005) | Inachapisha majina ya funguo. | | | | Perl | [memdump](https://search.cpan.org/~dmaki/Memcached-libmemcached-0.4202/src/libmemcached/docs/memdump.pod) | Chombo katika moduli ya CPAN | [Memcached-libmemcached](https://search.cpan.org/~dmaki/Memcached-libmemc) | ached/) | | PHP | [memcache.php](http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/) | GUI ya Ufuatiliaji wa Memcache ambayo pia inaruhusu kutupa funguo | | | | libmemcached | [peep](http://blog.evanweaver.com/2009/04/20/peeping-into-memcached/) | **Inaf freeze mchakato wako wa memcached!!!** Kuwa makini unapoitumia katika uzalishaji. Hata hivyo, ukiitumia unaweza kuzunguka kikomo cha 1MB na kweli kutupa **yote** funguo. | | | ## Troubleshooting ### 1MB Data Limit Kumbuka kwamba kabla ya memcached 1.4 huwezi kuhifadhi vitu vikubwa kuliko 1MB kutokana na ukubwa wa slab wa kawaida. ### Never Set a Timeout > 30 Days! Ikiwa unajaribu “kweka” au “kuongeza” funguo yenye muda wa kukatika zaidi ya kile kilichoruhusiwa, huenda usipate kile unachotarajia kwa sababu memcached kisha inachukulia thamani kama alama ya wakati wa Unix. Pia ikiwa alama ya wakati iko katika zamani haitafanya chochote kabisa. Amri yako itashindwa kimya. Hivyo ikiwa unataka kutumia muda wa juu kabisa, eleza 2592000. Mfano: ``` set my_key 0 2592000 1 1 ``` ### Funguo Zinazotoweka kwenye Overflow Licha ya hati kusema kitu kuhusu kuzunguka 64bit inayozidi thamani kwa kutumia “incr” inasababisha thamani kutoweka. Inahitaji kuundwa tena kwa kutumia “add”/”set”. ### Urejeleaji memcached yenyewe haisaidii urejeleaji. Ikiwa unahitaji kweli, unahitaji kutumia suluhisho za upande wa tatu: - [repcached](http://repcached.lab.klab.org/): Urejeleaji wa multi-master async (memcached 1.2 patch set) - [Couchbase memcached interface](http://www.couchbase.com/memcached): Tumia CouchBase kama memcached drop-in - [yrmcds](https://cybozu.github.io/yrmcds/): duka la funguo thamani linalofanana na memcached Master-Slave - [twemproxy](https://github.com/twitter/twemproxy) (pia inajulikana kama nutcracker): proxy yenye msaada wa memcached ### Orodha ya Amri {{#ref}} memcache-commands.md {{#endref}} ### **Shodan** - `port:11211 "STAT pid"` - `"STAT pid"` ## Marejeleo - [https://lzone.de/cheat-sheet/memcached](https://lzone.de/cheat-sheet/memcached) {{#include ../../banners/hacktricks-training.md}}