来源于: www.gnucitizen.org
作者: Petko Petkov
使用javascript可以打造一个端口扫描器,可以作为渗透的“先锋”在XSS中对目标网址进行扫描
首先构造表单
<form>
<label for="target">target</label>
<input type="text" name="target" value="www.baidu.com" /><br />
<label for="port">port</label>
<input type="text" name="port" value="80" /><br />
<label for="timeout">timeout</label>
<input type="text" name="timeout" value="1000" /><br />
<label for="result">result</label>
<textarea name="result" id="result" cols="50" rows="10"></textarea><br />
<input type="button" value="scan" οnclick="scan(this.form)" />
</form>
javascript脚本
var AttackAPI = {
PortScanner: {}
};
AttackAPI.PortScanner.scanPort = function (callback, target, port, timeout) {
var timeout = (timeout == null)?100:timeout;
var img = new Image();
img.onerror = function () {
if (!img) {
return;
}
img = undefined;
callback(target, port, 'open');
};
img.onload = img.onerror;
img.src = 'http://' + target + ':' + port;
setTimeout(function () {
if (!img) {
return;
}
img = undefined;
callback(target, port, 'closed');
}, timeout);
};
AttackAPI.PortScanner.scanTarget = function (callback, target, ports, timeout) {
for (index = 0; index < ports.length; index++) {
AttackAPI.PortScanner.scanPort(callback, target, ports[index], timeout);
}
};
var result = document.getElementById('result');
var callback = function (target, port, status) {
result.value += target + ':' + port + ' ' + status + "\n";
};
var scan = function (form) {
result.value = "";
AttackAPI.PortScanner.scanTarget(callback, form.target.value, form.port.value.split(','), form.timeout.value);
};