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

破解

开发平台:

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. ''' <summary>
  19. ''' HTTP Response 
  20. ''' </summary>
  21. ''' <remarks></remarks>
  22. Public Class HttpResponse
  23. #Region "Constants"
  24.     Private Const HTTPEndLine As String = vbNewLine & vbNewLine
  25.     ''' <summary>
  26.     ''' Failed Response Body
  27.     ''' </summary>
  28.     ''' <remarks></remarks>
  29.     Private Const FailedResponse As String = "<html><head><title>XSS Tunnel Failed!</title></head><body><div style=""text-align:center""><strong>XSS Tunnel</strong> failed to get request. <br />You can refresh page and retry to do request.</div></body></html>"
  30. #End Region
  31. #Region "Properties"
  32.     Private _Cached As Boolean
  33.     ''' <summary>
  34.     ''' Is Response coming from cache
  35.     ''' </summary>
  36.     ''' <value></value>
  37.     ''' <returns></returns>
  38.     ''' <remarks></remarks>
  39.     Public Property Cached() As Boolean
  40.         Get
  41.             Return _Cached
  42.         End Get
  43.         Set(ByVal value As Boolean)
  44.             _Cached = value
  45.         End Set
  46.     End Property
  47.     Private _Status As Integer
  48.     ''' <summary>
  49.     ''' Status
  50.     ''' </summary>
  51.     ''' <value></value>
  52.     ''' <returns></returns>
  53.     ''' <remarks></remarks>
  54.     Public Property Status() As Integer
  55.         Get
  56.             Return _Status
  57.         End Get
  58.         Set(ByVal value As Integer)
  59.             _Status = value
  60.         End Set
  61.     End Property
  62.     Private _StatusText As String
  63.     ''' <summary>
  64.     ''' HTTP Status Text
  65.     ''' </summary>
  66.     ''' <value></value>
  67.     ''' <returns></returns>
  68.     ''' <remarks></remarks>
  69.     Public Property StatusText() As String
  70.         Get
  71.             Return _StatusText
  72.         End Get
  73.         Set(ByVal value As String)
  74.             _StatusText = value
  75.         End Set
  76.     End Property
  77.     Private _Headers As Dictionary(Of String, String)
  78.     ''' <summary>
  79.     ''' HTTP Headers
  80.     ''' </summary>
  81.     ''' <value></value>
  82.     ''' <returns></returns>
  83.     ''' <remarks></remarks>
  84.     Public ReadOnly Property Headers() As Dictionary(Of String, String)
  85.         Get
  86.             If _Headers Is Nothing Then _Headers = New Dictionary(Of String, String)
  87.             Return _Headers
  88.         End Get
  89.     End Property
  90.     Private _Body() As Byte
  91.     ''' <summary>
  92.     ''' Response Body (decoded)
  93.     ''' </summary>
  94.     ''' <value></value>
  95.     ''' <returns></returns>
  96.     ''' <remarks></remarks>
  97.     Public Property Body() As Byte()
  98.         Get
  99.             If _Body Is Nothing Then _Body = New Byte() {0}
  100.             Return _Body
  101.         End Get
  102.         Set(ByVal value As Byte())
  103.             _Body = value
  104.         End Set
  105.     End Property
  106. #End Region
  107. #Region "Generate Response"
  108.     ''' <summary>
  109.     ''' Get as valid HTTP Response Buffer (ready to send)
  110.     ''' </summary>
  111.     ''' <value></value>
  112.     ''' <returns></returns>
  113.     ''' <remarks></remarks>
  114.     Public ReadOnly Property GetServerResponse() As Byte()
  115.         Get
  116.             Dim ResponseHeaderBuffer() As Byte = Text.Encoding.UTF8.GetBytes(ServerResponseHeaders)
  117.             'Add content as byte and return
  118.             Dim ResponseBuffer(ResponseHeaderBuffer.Length + Body.Length) As Byte
  119.             Array.Copy(ResponseHeaderBuffer, 0, ResponseBuffer, 0, ResponseHeaderBuffer.Length)
  120.             Array.Copy(Body, 0, ResponseBuffer, ResponseHeaderBuffer.Length, Body.Length)
  121.             Return ResponseBuffer
  122.         End Get
  123.     End Property
  124.     ''' <summary>
  125.     ''' Generate Headers
  126.     ''' </summary>
  127.     ''' <value></value>
  128.     ''' <returns></returns>
  129.     ''' <remarks></remarks>
  130.     Private ReadOnly Property ServerResponseHeaders() As String
  131.         Get
  132.             Dim RetHeaders As New Text.StringBuilder(500)
  133.             RetHeaders.AppendLine("HTTP/1.1 " & Me.Status.ToString & " " & Me.StatusText)
  134.             'Add Custom Headers
  135.             Try
  136.                 Me.Headers.Add("Via-Server", "XSS Tunnel")
  137.                 If Not Body Is Nothing Then Me.Headers.Add("Content-Length", Body.Length.ToString)
  138.             Catch ex As System.ArgumentException
  139.             End Try
  140.             For Each Header As KeyValuePair(Of String, String) In Me.Headers
  141.                 RetHeaders.AppendLine(Header.Key & ": " & Header.Value)
  142.             Next Header
  143.             'Double Newline
  144.             RetHeaders.AppendLine()
  145.             Debug.WriteLine("Response to Browser - Headers Only")
  146.             Debug.WriteLine("====================")
  147.             Debug.WriteLine(RetHeaders.ToString)
  148.             Debug.WriteLine("====================")
  149.             Return RetHeaders.ToString
  150.         End Get
  151.     End Property
  152.     Dim HeaderLocker As New Object
  153.     ''' <summary>
  154.     ''' Add new HTTP Header
  155.     ''' </summary>
  156.     ''' <param name="key"></param>
  157.     ''' <param name="value"></param>
  158.     ''' <remarks></remarks>
  159.     Public Sub AddHeader(ByVal key As String, ByVal value As String)
  160.         SyncLock HeaderLocker
  161.             If Not Me.Headers.ContainsKey(key) Then
  162.                 If CheckHeader(key) AndAlso CheckHeader(value) Then
  163.                     'Choose which headers to add
  164.                     'We hardcode here for accetable keys to make this process a bit secure
  165.                     Select Case key
  166.                         Case "Content-Length", "Via-Server", "Transfer-Encoding"
  167.                             'Never accept these
  168.                             'Transfer-Encoding:
  169.                         Case Else
  170.                             Me.Headers.Add(key, value)
  171.                     End Select
  172.                 End If
  173.             End If
  174.         End SyncLock
  175.     End Sub
  176.     ''' <summary>
  177.     ''' Check Value for potential injections
  178.     ''' </summary>
  179.     ''' <param name="value"></param>
  180.     ''' <returns></returns>
  181.     ''' <remarks>
  182.     ''' This is still not safe, because of victim virtually can inject any header so we are totally open to http spltting variations. Eventually it's safe because we are running under victim's credentials so victim will hack himself (in theory). Still not perfect.
  183.     ''' </remarks>
  184.     Private Function CheckHeader(ByVal value As String) As Boolean
  185.         If value.IndexOf(Chr(10)) > -1 OrElse value.IndexOf(Chr(13)) > -1 Then
  186.             Return False
  187.         End If
  188.         Return True
  189.     End Function
  190. #End Region
  191. End Class