በሌላ ቀን በአገልጋዩ በኩል የጥያቄዎችን ፊርማ የሚያረጋግጥ አገልግሎት አገኘሁ። ለእያንዳንዱ ጥያቄ በተጠቃሚው ከአሳሹ የተላከውን የተወሰነ እሴት የሚፈትሽ ትንሽ የመስመር ላይ ካሲኖ ነበር። በካዚኖው ውስጥ ምን እየሰሩ ነበር ምንም ይሁን ምን: ውርርድ ማድረግ ወይም ተቀማጭ ማድረግ, በእያንዳንዱ ጥያቄ ላይ ተጨማሪ መለኪያ "ምልክት" እሴት ነበር, የዘፈቀደ የሚመስሉ ገጸ-ባህሪያትን ያካትታል. ያለሱ ጥያቄ ለመላክ የማይቻል ነበር - ጣቢያው ስህተት መለሰ, እና የራሴን ብጁ ጥያቄዎችን እንዳልልክ ከልክሎኛል.
ለዚህ እሴት ባይሆን ኖሮ በዛን ጊዜ ጣቢያውን ለቅቄ ወጣሁ እና ዳግመኛ አላስበውም ነበር። ነገር ግን፣ ከሁሉም ዕድሎች አንጻር፣ ያስደሰተኝ የፈጣን ትርፍ ስሜት ሳይሆን ካሲኖው በሞኝ ማረጋገጫው እየሰጠኝ ያለው የጥናት ፍላጎት እና ፈተና ነው።
ገንቢዎቹ ይህንን ግቤት ሲጨምሩ ያሰቡት አላማ ምንም ይሁን ምን፣ ጊዜ ማባከን ይመስለኛል። ከሁሉም በላይ, ፊርማው ራሱ በደንበኛው በኩል ይፈጠራል, እና ማንኛውም የደንበኛ-ጎን እርምጃ ለተቃራኒ-ምህንድስና ሊጋለጥ ይችላል.
በዚህ ጽሑፍ ውስጥ እንዴት እንደ ቻልኩ እወያይበታለሁ-
ደህንነታቸው የተጠበቁ ፕሮጀክቶችን ለመስራት ፍላጎት ያለው ገንቢ ከሆኑ ይህ ጽሑፍ ውድ ጊዜዎን እንዴት እንደሚቆጥቡ እና የማይጠቅሙ መፍትሄዎችን ውድቅ እንደሚያደርግ ያስተምርዎታል። እና ፔንቴስተር ከሆኑ, ይህን ጽሑፍ ካነበቡ በኋላ, ለማረም አንዳንድ ጠቃሚ ትምህርቶችን መማር እና ለስዊስ የደህንነት ቢላዋ የራስዎን ቅጥያዎች ፕሮግራም ማዘጋጀት ይችላሉ. ባጭሩ ሁሉም ሰው በጎ ጎን ነው።
በመጨረሻ ወደ ነጥቡ እንግባ።
ስለዚህ አገልግሎቱ የክላሲክ ጨዋታዎች ስብስብ ያለው የመስመር ላይ ካሲኖ ነው።
ከአገልጋዩ ጋር ያለው ግንኙነት ሙሉ በሙሉ በኤችቲቲፒ ጥያቄዎች ላይ ይሰራል። የመረጡት ጨዋታ ምንም ይሁን ምን፣ እያንዳንዱ የPOST የአገልጋዩ ጥያቄ መፈረም አለበት - ይህ ካልሆነ አገልጋዩ ስህተት ይፈጥራል። በእያንዳንዳቸው ጨዋታዎች ላይ የመፈረም ጥያቄዎች በተመሳሳይ መርህ ላይ ይሰራሉ - አንድ አይነት ስራ ሁለት ጊዜ እንዳላደርግ ለመመርመር አንድ ጨዋታ ብቻ እወስዳለሁ.
እና ድራጎን እስር ቤት የሚባል ጨዋታ ልወስድ ነው።
የዚህ ጨዋታ ፍሬ ነገር በቤተ መንግሥቱ ውስጥ በሮች በ ባላባት ሚና ውስጥ በቅደም ተከተል መምረጥ ነው። ከእያንዳንዱ በር በስተጀርባ ውድ ሀብት ወይም ዘንዶ ይደብቃል። ተጫዋቹ ከበር ጀርባ ዘንዶ ካጋጠመው ጨዋታው ይቆማል እና ገንዘብ ያጣል። ሀብቱ ከተገኘ - የመጀመርያው ውርርድ መጠን ይጨምራል እና ተጫዋቹ ድሉን እስኪወስድ ድረስ፣ እስኪሸነፍ ወይም ሁሉንም ደረጃዎች እስኪያልፍ ድረስ ጨዋታው ይቀጥላል።
ጨዋታውን ከመጀመሩ በፊት ተጫዋቹ የመጫወቻውን መጠን እና የድራጎኖች ብዛት መግለጽ አለበት።
ቁጥር 10ን እንደ ድምር አስገባለሁ, አንድ ድራጎን ትቼ የሚላከውን ጥያቄ ተመልከት. ይህ በማንኛውም አሳሽ ውስጥ ካሉ የገንቢ መሳሪያዎች ሊከናወን ይችላል ፣ በ Chromium ውስጥ የአውታረ መረብ ትር ለዚህ ተጠያቂ ነው።
እዚህ በተጨማሪ ጥያቄው ወደ /srv/api/v1/dungeon
መጨረሻ ነጥብ እንደተላከ ማየት ይችላሉ።
የPayload ትሩ የጥያቄውን አካል ራሱ በJSON ቅርጸት ያሳያል
የመጀመሪያዎቹ ሁለት መለኪያዎች ግልጽ ናቸው - ከ UI መረጥኳቸው; የመጨረሻው፣ እርስዎ እንደሚገምቱት፣ timestamp
ወይም ከጃንዋሪ 1, 1970 ጀምሮ ያለፈው ጊዜ ነው፣ በተለመደው የጃቫስክሪፕት ትክክለኛነት ሚሊሰከንዶች።
ያ አንድ ያልተፈታ ግቤት እና, - እና ያ ፊርማው ራሱ ነው. እንዴት እንደሚፈጠር ለመረዳት ወደ ምንጮች ትር እሄዳለሁ - ይህ ቦታ አሳሹ የጫነውን አገልግሎት ሁሉንም ሀብቶች ይዟል. ለሁሉም የጣቢያው ደንበኛ ክፍል አመክንዮ ተጠያቂ የሆነውን ጃቫስክሪፕትን ጨምሮ።
ይህንን ኮድ ለመረዳት በጣም ቀላል አይደለም - የተቀነሰ ነው። ሁሉንም ግልጽ ለማድረግ መሞከር ይችላሉ - ግን ብዙ ጊዜ የሚወስድ ረጅም እና አሰልቺ ሂደት ነው (የምንጩን ኮድ መጠን ግምት ውስጥ በማስገባት) እኔ ይህን ለማድረግ ዝግጁ አይደለሁም.
ሁለተኛው እና ቀላሉ አማራጭ የኮዱን አስፈላጊ ክፍል በቁልፍ ቃል በቀላሉ ማግኘት እና አራሚውን መጠቀም ነው። ያ ነው የማደርገው፣ ምክንያቱም አጠቃላይ ጣቢያው እንዴት እንደሚሰራ ማወቅ ስለማልፈልግ፣ ፊርማው እንዴት እንደሚፈጠር ማወቅ ብቻ ነው ያለብኝ።
ስለዚህ ኮዱን የማመንጨት ሃላፊነት ያለበትን የኮዱ ክፍል ለማግኘት የ CTRL+SHIFT+F
የቁልፍ ጥምርን በመጠቀም በሁሉም ምንጮች ፍለጋ መክፈት እና ለሚላከው sign
ቁልፍ ዋጋ መስጠትን መፈለግ ይችላሉ። በጥያቄው ውስጥ.
እንደ እድል ሆኖ, አንድ ግጥሚያ ብቻ ነው, ይህም ማለት በትክክለኛው መንገድ ላይ ነኝ ማለት ነው.
ግጥሚያ ላይ ጠቅ ካደረጉ፣ ፊርማው ራሱ ወደሚገኝበት ኮድ ክፍል መድረስ ይችላሉ። ኮዱ እንደበፊቱ ተሸፍኗል፣ስለዚህ አሁንም ለማንበብ አስቸጋሪ ነው።
ከኮዱ መስመር ተቃራኒ ነጥብ አስቀምጫለሁ ፣ ገጹን አድስ እና በ “ድራጎኖች” ውስጥ አዲስ ጨረታ አወጣሁ - አሁን ስክሪፕቱ በትክክል ፊርማ በሚፈጠርበት ጊዜ ሥራውን አቁሟል ፣ እና የአንዳንድ ተለዋዋጮችን ሁኔታ ማየት ይችላሉ።
የተጠራው ተግባር አንድ ፊደል፣ ተለዋዋጮችም ያካትታል - ግን ምንም ችግር የለም። ወደ ኮንሶል መሄድ እና የእያንዳንዳቸውን እሴቶች ማሳየት ይችላሉ. ሁኔታው ይበልጥ ግልጽ መሆን ይጀምራል.
የመጀመሪያው ዋጋ እኔ የሚወጣው የተለዋዋጭ H
እሴት ነው, እሱም ተግባር ነው. ከኮንሶሉ ላይ ጠቅ ማድረግ እና በኮዱ ውስጥ ወደተገለጸበት ቦታ መሄድ ይችላሉ, ከዚህ በታች ያለው ዝርዝር ነው.
ይህ ፍንጭ ያየሁበት በጣም ትልቅ የኮድ ቅንጣቢ ነው - SHA256። ይህ የሃሺንግ ስልተ ቀመር ነው። እንዲሁም ሁለት መለኪያዎች ወደ ተግባር ሲተላለፉ ማየት ይችላሉ፣ ይህም SHA256 ብቻ ሳይሆን HMAC SHA256 ከሚስጥር ጋር ሊሆን እንደሚችል ይጠቁማል።
ምናልባት እዚህ የሚተላለፉት ተለዋዋጮች (ወደ መሥሪያው እንዲሁ ይወጣሉ)
10;1;6693a87bbd94061678473bfb;1732817300080;gRdVWfmU-YR_RCuSkWFLCUTly_GZfDx3KEM8
- በቀጥታ የኤችኤምኤሲ SHA256 አሠራር የሚተገበርበት እሴት።31754cff-be0f-446f-9067-4cd827ba8707
ሚስጥራዊ ሆኖ የሚሰራ የማይንቀሳቀስ ቋሚ ነው
ይህንን ለማረጋገጥ, ተግባሩን እደውላለሁ እና የታሰበውን ፊርማ አገኛለሁ
አሁን HMAC SHA256 ወደሚቆጥረው ጣቢያ ሄጄ እሴቶችን አሳልፋለሁ።
እና ጨረታውን ሳቀርብ በጥያቄው ውስጥ ከተላከው ጋር በማወዳደር።
ውጤቱ ተመሳሳይ ነው ፣ ይህ ማለት የእኔ ግምቶች ትክክል ነበሩ ማለት ነው - በእውነቱ HMAC SHA256 ን ከሚለዋወጥ ምስጢር ጋር ይጠቀማል ፣ ይህም በልዩ ሁኔታ የተሠራ ሕብረቁምፊ ከታሪፍ ፣ ከድራጎኖች ብዛት እና ከሌሎች መመዘኛዎች ጋር ተላልፏል ፣ ይህም ስለበለጠ እነግርዎታለሁ። በጽሁፉ ሂደት ውስጥ.
አልጎሪዝም በጣም ቀላል እና ቀላል ነው። ግን አሁንም በቂ አይደለም - በፔንታስት ውስጥ በስራ ፕሮጀክት ውስጥ ያለ ግብ ከሆነ ተጋላጭነቶችን ለማግኘት ፣ Burp Suiteን ተጠቅሜ የራሴን ጥያቄዎች እንዴት እንደምልክ መማር አለብኝ።
እና ይሄ በእርግጠኝነት አውቶሜሽን ያስፈልገዋል፣ እሱም አሁን የማወራው ነው።
የፊርማ ማመንጨት ስልተ ቀመር አውጥቻለሁ። ጥያቄዎችን በሚልኩበት ጊዜ ሁሉንም አላስፈላጊ ነገሮችን ለማስወገድ በራስ-ሰር እንዴት እንደሚያመነጩት ለመማር ጊዜው አሁን ነው።
ZAP፣ Caido፣ Burp Suite እና ሌሎች pentest መሳሪያዎችን በመጠቀም ጥያቄዎችን መላክ ትችላለህ። በጣም ለተጠቃሚ ምቹ እና ከሞላ ጎደል ፍፁም ሆኖ ስላገኘሁት ይህ መጣጥፍ በ Burp Suite ላይ ያተኩራል። የማህበረሰብ እትም ከኦፊሴላዊው ጣቢያ በነፃ ማውረድ ይቻላል, ለሁሉም ሙከራዎች በቂ ነው.
ከሳጥን ውስጥ Burp Suite እንዴት HMAC SHA256 ማመንጨት እንዳለበት አያውቅም። ስለዚህ፣ ይህንን ለማድረግ የ Burp Suiteን ተግባር የሚያሟሉ ቅጥያዎችን መጠቀም ይችላሉ።
ቅጥያዎች በሁለቱም በማህበረሰብ አባላት እና በራሳቸው ገንቢዎች የተፈጠሩ ናቸው። አብሮ በተሰራው ነፃ የBApp ማከማቻ፣ Github ወይም ሌላ የምንጭ ኮድ ማከማቻዎች በኩል ይሰራጫሉ።
ሁለት መንገዶችን መውሰድ ይችላሉ-
እያንዳንዳቸው እነዚህ መንገዶች ጥቅሞቹ እና ጉዳቶች አሏቸው, ሁለቱንም አሳይሻለሁ.
ዝግጁ የሆነ ቅጥያ ያለው ዘዴ በጣም ቀላሉ ነው. ከባፕ ማከማቻ ማውረድ እና ባህሪያቱን ተጠቅሞ sign
መለኪያ እሴት ማመንጨት ነው።
የተጠቀምኩት ቅጥያ ሃክቨርተር ይባላል። በተለዋዋጭ ኢንኮድ/መቀየስ፣ ኢንክሪፕት/ዲክሪፕት ማድረግ፣ የተለያዩ ዳታዎችን ሃሽ ማድረግ እንድትችል እንደ አገባብ ኤክስኤምኤልን እንድትጠቀም ይፈቅድልሃል።
እሱን ለመጫን, Burp ያስፈልገዋል:
ወደ የቅጥያዎች ትር ይሂዱ
በፍለጋው ውስጥ Hackvertor ይተይቡ
በዝርዝሩ ውስጥ የተገኘውን ቅጥያ ይምረጡ
ጫን የሚለውን ጠቅ ያድርጉ
አንዴ ከተጫነ, ተመሳሳይ ስም ያለው ትር በ Burp ውስጥ ይታያል. ወደ እሱ መሄድ እና የቅጥያውን ችሎታዎች እና የሚገኙትን መለያዎች ብዛት መገምገም ይችላሉ, እያንዳንዳቸው እርስ በርስ ሊጣመሩ ይችላሉ.
ለምሳሌ አንድን ነገር በሲሜትሪክ AES ማመስጠር ትችላለህ መለያ <@aes_encrypt('supersecret12356','AES/ECB/PKCS5PADDING')>MySuperSecretText<@/aes_encrypt>
።
ምስጢሩ እና አልጎሪዝም በቅንፍ ውስጥ ናቸው ፣ እና በመለያዎቹ መካከል ጽሑፉ ራሱ መመስጠር አለበት። ማንኛቸውም መለያዎች በRepeater, Intruder እና ሌሎች አብሮ በተሰራው Burp Suite መሳሪያዎች ውስጥ መጠቀም ይቻላል.
በሃክቨርተር ኤክስቴንሽን እገዛ በመለያ ደረጃ ላይ ፊርማ እንዴት መፈጠር እንዳለበት መግለጽ ይችላሉ። በእውነተኛ ጥያቄ ምሳሌ ላይ አደርጋለሁ።
ስለዚህ፣ በድራጎን እስር ቤት ውስጥ ውርርድ እሰራለሁ፣ በዚህ ጽሁፍ መጀመሪያ ላይ የተጠለፍኩትን ተመሳሳይ ጥያቄ ከኢንተርሴፕ ፕሮክሲ ጋር ጣልኩት፣ እና አርትዕ ለማድረግ እና እንደገና ለማስገባት ወደ Repeater አስጨንቀው።
አሁን በ ae04afe621864f569022347f1d1adcaa3f11bebec2116d49c4539ae1d2c825fc
እሴት ምትክ ኤችኤምኤሲ SHA256 በ Hackvertor የተሰጡ መለያዎችን በመጠቀም ስልተ ቀመሩን መተካት አለብን።
Формула генерации у меня получилась следующая <@hmac_sha256('31754cff-be0f-446f-9067-4cd827ba8707')>10;1;6693a87bbd94061678473bfb;<@timestamp/>000;MDWpmNV9-j8tKbk-evbVLtwMsMjKwQy5YEs4<@/hmac_sha256>
.
ሁሉንም መለኪያዎች ግምት ውስጥ ያስገቡ-
10
- ውርርድ መጠን1
- የድራጎኖች ብዛት6693a87bbd94061678473bfb
- ልዩ የተጠቃሚ መታወቂያ ከMongoDB ዳታቤዝ፣ ከአሳሹ ላይ ፊርማውን በመተንተን ላይ ሳየው አየሁት፣ ግን ያኔ አልጻፍኩም። በ Burp Suite ውስጥ ያሉትን የጥያቄዎች ይዘት በመፈለግ ላገኘው ችያለሁ፣ ከ /srv/api/v1/profile/me
የመጨረሻ ነጥብ ጥያቄ ተመልሶ ይመጣል።
<@timestamp/>000
- የጊዜ ማህተም ማመንጨት፣ የመጨረሻዎቹ ሶስት ዜሮዎች ጊዜውን ወደ ሚሊሰከንዶች ያጠራዋልMDWpmNV9-j8tKbk-evbVLtwMsMjKwQy5YEs4
- CSRF ማስመሰያ፣ ከ /srv/api/v1/csrf
መጨረሻ ነጥብ የተመለሰ እና በእያንዳንዱ ጥያቄ የተተካ፣ በ X-Xsrf-Token
ራስጌ።<@hmac_sha256('31754cff-be0f-446f-9067-4cd827ba8707')>
እና <@/hmac_sha256>
- ከተተካው እሴት HMAC SHA256 ለማመንጨት መለያዎችን በመክፈት እና በመዝጊያ ሚስጥራዊነቱ ቋሚ ሆኖ 31754cff-be0f-446f-9067-4cd827ba8707
ትኩረት መስጠት አስፈላጊ ነው: መለኪያዎች በ በኩል እርስ በርስ መያያዝ አለባቸው ;
በጥብቅ ቅደም ተከተል ፣ - አለበለዚያ ፊርማው በስህተት ይፈጠራል - ልክ በዚህ ቅጽበታዊ ገጽ እይታ ላይ መጠኑን እና የድራጎኖችን ብዛት ቀይሬያለሁ።
ይህ ሁሉ አስማት የሚዋሽበት ነው።
አሁን ትክክለኛ ጥያቄ አቀርባለሁ ፣ መለኪያዎችን በትክክለኛው ቅደም ተከተል የገለጽኩበት ፣ እና ሁሉም ነገር የተሳካ እንደነበረ እና ጨዋታው እንደጀመረ መረጃ አገኛለሁ - ይህ ማለት Hackvertor ከቀመር ይልቅ ፊርማ ፈጠረ ፣ በጥያቄው ውስጥ ተተካ እና ሁሉም ነገር ይሰራል ማለት ነው ። .
ይሁን እንጂ, ይህ ዘዴ ከፍተኛ ጉዳት አለው - የእጅ ሥራን ሙሉ በሙሉ ማስወገድ አይችሉም. በJSON ውስጥ የድራጎኖችን መጠን ወይም ቁጥር በቀየሩ ቁጥር፣ እንዲዛመዱ ለማድረግ በራሱ በፊርማው ውስጥ መቀየር አለብዎት።
እንዲሁም አዲስ ጥያቄ ከፕሮክሲ ታብ ወደ ኢንትሪደር ወይም ተደጋጋሚ ከላኩ ፎርሙላውን እንደገና መፃፍ አለቦት ይህም ለተለያዩ የፈተና ጉዳዮች ብዙ ትሮች ሲፈልጉ በጣም በጣም የማይመች ነው።
ይህ ቀመር ሌሎች መለኪያዎች ጥቅም ላይ በሚውሉባቸው ሌሎች መጠይቆች ላይም አይሳካም።
ስለዚህ እነዚህን ጉዳቶች ለማሸነፍ የራሴን ቅጥያ ለመጻፍ ወሰንኩ.
በJava እና Python ውስጥ ለ Burp Suite ቅጥያዎችን መጻፍ ይችላሉ። ሁለተኛውን የፕሮግራም አወጣጥ ቋንቋ ቀላል እና የበለጠ ምስላዊ ስለሆነ እጠቀማለሁ። ነገር ግን እራስዎን አስቀድመው ማዘጋጀት አለብዎት: በመጀመሪያ Jython Standalone ን ከኦፊሴላዊው ድር ጣቢያ ማውረድ ያስፈልግዎታል, እና በ Burp Suite ቅንብሮች ውስጥ ወደ ወረደው ፋይል የሚወስደውን መንገድ.
ከዚያ በኋላ, ከምንጩ ኮድ እራሱ እና ቅጥያው *.py
ጋር ፋይል መፍጠር ያስፈልግዎታል.
መሰረታዊውን አመክንዮ የሚገልጽ ወረቀት አለኝ፣ ይዘቱ እነሆ፡-
ሁሉም ነገር ቀላል እና ቀላል ነው-
getActionName
- ይህ ዘዴ በቅጥያው የሚደረገውን የእርምጃውን ስም ይመልሳል። ቅጥያው ራሱ በማናቸውም ጥያቄዎች ላይ በተለዋዋጭ ሊተገበር የሚችል የክፍለ ጊዜ አያያዝ ህግን ይጨምራል፣ ነገር ግን ከዚያ በኋላ ላይ ተጨማሪ። ይህ ስም ከቅጥያው ስም የተለየ ሊሆን እንደሚችል እና ከበይነገጽ ሊመረጥ እንደሚችል ማወቅ አስፈላጊ ነው።performAction
- በተመረጡት ጥያቄዎች ላይ የሚተገበረው የደንቡ ሎጂክ ራሱ እዚህ ይጻፋል
ሁለቱም ዘዴዎች በ ISessionHandlingAction በይነገጽ መሰረት ይታወቃሉ።
አሁን ወደ IBurpExtender በይነገጽ። ብቸኛው አስፈላጊ ዘዴን ያውጃል registerExtenderCallbacks
, ይህም ቅጥያውን ከተጫነ በኋላ ወዲያውኑ ይፈጸማል, እና ሙሉ በሙሉ እንዲሰራ ያስፈልጋል.
መሰረታዊ ውቅር የሚከናወነው እዚህ ነው-
callbacks.setExtensionName(EXTENSION_NAME)
- የአሁኑን ቅጥያ ክፍለ ጊዜዎችን ለማስተናገድ እንደ እርምጃ ይመዘግባልsys.stdout = callbacks.getStdout()
- መደበኛውን ውፅዓት (stdout) ወደ Burp Suite ውፅዓት መስኮት (የ"ቅጥያዎች" ፓነል) ያዛውራል።self.stderr = PrintWriter(callbacks.getStdout(), True)
- ስህተቶችን ለማውጣት ዥረት ይፈጥራልself.stdout.println(EXTENSION_NAME)
- የቅጥያውን ስም በ Burp Suite ያትማል።self.callbacks = callbacks
- የመመለሻ ጥሪዎችን እንደ ራስ ባህሪ ያስቀምጣቸዋል. ይህ በኋላ ላይ የ Burp Suite API በሌሎች የኤክስቴንሽን ኮድ ክፍሎች ለመጠቀም ያስፈልጋል።self.helpers = callbacks.getHelpers()
- እንዲሁም ቅጥያው ሲሰራ የሚያስፈልጉትን ጠቃሚ ዘዴዎችን ያገኛል
ቅድመ ዝግጅት ሲደረግ፣ ያ ነው። አሁን ቅጥያውን መጫን እና ሙሉ በሙሉ እንደሚሰራ ማረጋገጥ ይችላሉ. ይህንን ለማድረግ ወደ ቅጥያዎች ትር ይሂዱ እና አክል የሚለውን ጠቅ ያድርጉ.
በሚታየው መስኮት ውስጥ ይግለጹ
እና ቀጣይ የሚለውን ጠቅ ያድርጉ.
የምንጭ ኮድ ፋይል በትክክል ከተቀረጸ ምንም ስህተቶች መከሰት የለባቸውም እና የውጤት ትር የቅጥያውን ስም ያሳያል። ይህ ማለት ሁሉም ነገር በትክክል እየሰራ ነው.
ቅጥያው ይጫናል እና ይሰራል - ነገር ግን የተጫነው ምንም አይነት አመክንዮ የሌለበት መጠቅለያ ነበር, አሁን ጥያቄውን ለመፈረም ኮዱ እፈልጋለሁ. አስቀድሜ ጽፌዋለሁ እና ከታች ባለው ቅጽበታዊ ገጽ እይታ ላይ ይታያል.
አጠቃላይ ቅጥያው የሚሰራበት መንገድ ጥያቄው ወደ አገልጋዩ ከመላኩ በፊት በኔ ቅጥያ ይሻሻላል።
በመጀመሪያ ማራዘሚያው የተጠለፈውን ጥያቄ እወስዳለሁ, እና መጠኑን እና የድራጎኖችን ቁጥር, ከአካሉ አገኛለሁ
json_body = json.loads(message_body) amount_currency = json_body["amountCurrency"] dragons = json_body["dragons"]
በመቀጠል፣ የአሁኑን የጊዜ ማህተም አንብቤ የCSRF ቶከን ከተዛማጅ ራስጌ አገኛለሁ።
currentTime = str(time.time()).split('.')[0]+'100' xcsrf_token = None for header in headers: if header.startswith("X-Xsrf-Token"): xcsrf_token = header.split(":")[1].strip()
በመቀጠል፣ ጥያቄው ራሱ HMAC SHA256 በመጠቀም ተፈርሟል
hmac_sign = hmac_sha256(key, message=";".join([str(amount_currency), str(dragons), user_id, currentTime, xcsrf_token]))
ተግባሩ ራሱ እና ምስጢሩን የሚያመለክቱ ቋሚዎች እና የተጠቃሚ መታወቂያ ከላይ አስቀድሞ ታውጇል።
def hmac_sha256(key, message): return hmac.new( key.encode("utf-8"), message.encode("utf-8"), hashlib.sha256 ).hexdigest() key = "434528cb-662f-484d-bda9-1f080b861392" user_id = "zex2q6cyc4ba3gvkyex5f80m"
ከዚያ እሴቶቹ ወደ ጠያቂው አካል ይፃፉ እና ወደ JSON ይቀየራሉ
json_body["sign"] = hmac_sign json_body["t"] = currentTime message_body = json.dumps(json_body)
የመጨረሻው እርምጃ የተፈረመ እና የተሻሻለ ጥያቄ ማመንጨት እና ወደ እሱ መላክ ነው።
httpRequest = self.helpers.buildHttpMessage(get_final_headers, message_body) baseRequestResponse.setRequest(httpRequest)
ያ ብቻ ነው፣ የምንጭ ኮድ ተጽፏል። አሁን ቅጥያውን በ Burp Suite ውስጥ እንደገና መጫን ይችላሉ (ከእያንዳንዱ ስክሪፕት ማሻሻያ በኋላ መከናወን አለበት) እና ሁሉም ነገር መስራቱን ያረጋግጡ።
ነገር ግን መጀመሪያ ጥያቄዎችን ለማስኬድ አዲስ ህግ ማከል ያስፈልግዎታል። ይህንን ለማድረግ ወደ ቅንጅቶች, ወደ ክፍለ-ጊዜዎች ክፍል ይሂዱ. ጥያቄዎችን በሚልኩበት ጊዜ የሚቀሰቀሱትን ሁሉንም የተለያዩ ህጎች እዚህ ያገኛሉ።
በተወሰኑ የጥያቄ ዓይነቶች ላይ የሚቀሰቅስ ቅጥያ ለመጨመር አክል የሚለውን ጠቅ ያድርጉ።
በሚታየው መስኮት ውስጥ ሁሉንም ነገር እንዳለ እተወዋለሁ እና በ Rule ድርጊቶች ውስጥ አክል የሚለውን ምረጥ
ተቆልቋይ ዝርዝር ይታያል. በውስጡ፣ Burp ቅጥያ ይጠይቁ የሚለውን ይምረጡ።
እና ጥያቄዎችን በሚልኩበት ጊዜ የሚጠራውን ቅጥያ ይግለጹ። አንድ አለኝ፣ እና እሱ Burp Extension ነው።
ቅጥያውን ከመረጥኩ በኋላ እሺን ጠቅ አደርጋለሁ። እና ወደ ወሰንኩበት ትር እሄዳለሁ፡
የመሳሪያዎች ወሰን - ተደጋጋሚ (በተደጋጋሚ ጥያቄዎችን በምልክበት ጊዜ ቅጥያው መቀስቀስ አለበት)
የዩአርኤል ወሰን - ሁሉንም ዩአርኤሎች ያካትቱ (በምልክላቸው ሁሉም ጥያቄዎች ላይ እንዲሰራ)።
ከታች ባለው ቅጽበታዊ ገጽ እይታ ውስጥ እንደ መስራት አለበት.
እሺን ጠቅ ካደረጉ በኋላ, የኤክስቴንሽን ደንቡ በአጠቃላይ ዝርዝር ውስጥ ታየ.
በመጨረሻም ሁሉንም ነገር በተግባር መሞከር ይችላሉ! አሁን አንዳንድ መጠይቅን መቀየር እና ፊርማው እንዴት በተለዋዋጭ እንደሚዘምን ማየት ይችላሉ። እና ምንም እንኳን ጥያቄው ባይሳካም, እኔ አሉታዊ ተመን ስለመረጥኩ ነው, በፊርማው ላይ የሆነ ችግር ስላለ አይደለም (ገንዘብ ማባከን አልፈልግም 😀). ቅጥያው ራሱ ይሠራል እና ፊርማው በትክክል ተፈጥሯል.
ሁሉም ነገር ጥሩ ነው, ግን ሶስት ችግሮች አሉ.
ይህንን ለመፍታት ሁለት ተጨማሪ ጥያቄዎችን ማከል አለብን, ይህም አብሮ በተሰራው Burp Suite ቤተ-መጽሐፍት, ከማንኛውም የሶስተኛ ወገን ይልቅ, requests
ይልቅ.
ይህንን ለማድረግ፣ መጠይቆቹን የበለጠ ምቹ ለማድረግ አንዳንድ መደበኛ አመክንዮዎችን ጠቅልያለሁ። በቡርፕ መደበኛ ዘዴዎች፣ ከጥያቄዎች ጋር ያለው መስተጋብር በፕሌይንቴክስት ውስጥ ይከናወናል።
def makeRequest(self, method="GET", path="/", headers=None, body=None): first_line = method + " " + path + " HTTP/1.1" headers[0] = first_line if body is None: body = "{}" http_message = self.helpers.buildHttpMessage(headers, body) return self.callbacks.makeHttpRequest(self.request_host, self.request_port, True, http_message)
እና የሚያስፈልገኝን ውሂብ የማውጣት ሁለት ተግባራት አክለዋል፣ CSRF token እና UserID።
def get_csrf_token(self, headers): response = self.makeRequest("GET", "/srv/api/v1/csrf", headers) message = self.helpers.analyzeRequest(response) raw_headers = str(message.getHeaders()) match = re.search(r'XSRF-TOKEN=([a-zA-Z0-9_-]+)', raw_headers) return match.group(1) def get_user_id(self, headers): raw_response = self.makeRequest("POST", "/srv/api/v1/profile/me", headers) response = self.helpers.bytesToString(raw_response) match = re.search(r'"_id":"([a-f0-9]{24})"', response) return match.group(1)
እና በተላኩ ራስጌዎች ውስጥ ማስመሰያው እራሱን በማዘመን
def update_csrf(self, headers, token): for i, header in enumerate(headers): if header.startswith("X-Xsrf-Token:"): headers[i] = "X-Xsrf-Token: " + token return headers
የፊርማው ተግባር ይህንን ይመስላል። እዚህ በጥያቄው ውስጥ የተላኩትን ሁሉንም ብጁ መመዘኛዎች እወስዳለሁ ፣ መደበኛውን user_id
፣ currentTime
፣ csrf_token
ወደ መጨረሻቸው እጨምራለሁ እና ሁሉንም በአንድ ላይ መፈረም እንዳለብኝ ልብ ሊባል ይገባል ;
እንደ መለያየት.
def sign_body(self, json_body, user_id, currentTime, csrf_token): values = [] for key, value in json_body.items(): if key == "sign": break values.append(str(value)) values.extend([str(user_id), str(currentTime), str(csrf_token)]) return hmac_sha256(hmac_secret, message=";".join(values))
ዋናው ጎርፍ ወደ ጥቂት መስመሮች ተቀነሰ፡-
OrderedDict
እየተጠቀምኩ መሆኔን ልብ ማለት ያስፈልጋል። csrf_token = self.get_csrf_token(headers) final_headers = self.update_csrf(final_headers, csrf_token) user_id = self.get_user_id(headers) currentTime = str(time.time()).split('.')[0]+'100' json_body = json.loads(message_body, object_pairs_hook=OrderedDict) sign = self.sign_body(json_body, user_id, currentTime, csrf_token) json_body["sign"] = sign json_body["t"] = currentTime message_body = json.dumps(json_body) httpRequest = self.helpers.buildHttpMessage(final_headers, message_body) baseRequestResponse.setRequest(httpRequest)
ቅጽበታዊ ገጽ እይታ፣ እርግጠኛ ለመሆን ብቻ
አሁን፣ ብጁ መለኪያዎች ከ2 ይልቅ 3 ወደሆኑበት ሌላ ጨዋታ ከሄዱ እና ጥያቄ ከላኩ በተሳካ ሁኔታ እንደሚላክ ማየት ይችላሉ። ይህ ማለት የእኔ ቅጥያ አሁን ሁለንተናዊ ነው እና ለሁሉም ጥያቄዎች ይሰራል ማለት ነው።
የመለያ መሙላት ጥያቄን የመላክ ምሳሌ
ቅጥያዎች የ Burp Suite ዋና አካል ናቸው። ብዙ ጊዜ አገልግሎቶች እርስዎ ከማንም በቀር እርስዎ አስቀድመው የማይጽፉትን ብጁ ተግባር ይተገብራሉ። ለዚህም ነው ዝግጁ የሆኑ ቅጥያዎችን ማውረድ ብቻ ሳይሆን የራስዎን መጻፍም አስፈላጊ የሆነው በዚህ ጽሑፍ ውስጥ እርስዎን ለማስተማር የሞከርኩት ነው.
ለአሁን ያ ብቻ ነው፣ እራስህን አሻሽል እና አትታመም።
የቅጥያው ምንጭ ኮድ አገናኝ ፡ * ጠቅ አድርግ * .