17 KiB
11211 - Kupima Usalama wa Memcache
Jifunze kuhusu kudukua AWS kutoka mwanzo hadi mtaalamu na htARTE (Mtaalamu wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako inatangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi ya PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa HackTricks na HackTricks Cloud repos za github.
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:
- Kupata slabs na vitu vilivyopo
- Pata majina ya funguo za slabs zilizogunduliwa hapo awali
- 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:
- Sakinisha Memcached kwenye seva yako.
- Sanidi Memcached kwa kusikiliza kwenye bandari ya 11211.
- 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:
-
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. -
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:
-
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.
-
Tumia firewall: Weka firewall kwenye seva yako ili kuzuia upatikanaji usioidhinishwa kwenye bandari ya Memcached.
-
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:
- Funguo zinaweza kudondoshwa tu kwa darasa la slab, kwa kuchanganya funguo zenye ukubwa sawa wa maudhui.
- Kuna kikomo cha ukurasa mmoja kwa darasa la slab, sawa na 1MB ya data.
- 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 Programu | Vifaa | Uwezo | ||
---|---|---|---|---|
PHP | script rahisi | Inachapisha majina ya funguo. | ||
Perl | script rahisi | Inachapisha majina na thamani za funguo. | ||
Ruby | script rahisi | Inachapisha majina ya funguo. | ||
Perl | memdump | Zana katika moduli ya CPAN | Memcached-libmemcached | ached/) |
PHP | memcache.php | Kiolesura cha Ufuatiliaji cha Memcache ambacho pia kinaruhusu kudumu kwa funguo | ||
libmemcached | peep | 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
{% content-ref url="memcache-commands.md" %} memcache-commands.md {% endcontent-ref %}
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:
- Ikiwa unataka kuona kampuni yako inatangazwa katika HackTricks au kupakua HackTricks kwa muundo wa PDF Angalia MPANGO WA KUJIUNGA!
- Pata swag rasmi wa PEASS & HackTricks
- Gundua The PEASS Family, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PR kwa HackTricks na HackTricks Cloud github repos.