   ______   ______   ______   ______   ______   ______   ______   ______
  |  ____| |  ____| |  ____| |  ____| |  ____| |  ____| |  ____| |  ____|      
__| |______| |______| |______| |______| |______| |______| |______| |________
----------------------------------------------------------------------------
Codigo     Titulo                                                Autor
SWP05-03   Como desarrollar un scaner de vulnerabilidades        CraCkman
----------------------------------------------------------------------------


1:  Introduccion.- Muchas son  las veces  que vemos  scanner para  fallas que 
circulan  en la  red, pero  que tan  dificil es  hacer uno;  bueno,  no estan
dificil como  pensamos, para  desarrollar uno usaremos  el visual basic  y lo
componentes vb ( Winsock, COMDLG32 ).  y como falla a tratar usaremos una muy
conocida falla de extensiones de frontpage.

2.- Como Funcionara:
Para  eso hablaremos  mas de  las extensiones  de frontpage  y como  se puede
localizar una.  Para localizar esta falla  solo hace falta  usar el navegador
haciendo  un get  al siguiente  string:  "/_vti_bin/_vti_aut/author.dll" este
string nos dara una respuesta la cual  nos dira si tiene o tiene la siguiente
dll. 

$: Desarrollando el scanner:

Controles usados

1. Nombre: inicio (form1.form)
2. Nombre: insertar (form2.form)

Lo primero que  tenemos que desarrollar el inicio  los controles que usaremos 
son los siguiente:

:.: Winsock.- este componente es muy usado casi en todo lo que son conexiones
con estructuras tcp/ip en este caso  usaremos mas de uno para poder tener asi
un scanner mas rapido  para esto usaremos 10, winsock crea uno  copy y pega 9
mas.

Cantidad: 10

:.:  COMDLG32 ( Microsoft  Common Dialog  Controls )  .- con  este componente 
abriremos  la lista  de los  sites es  decir con  esto se  abrira la  caja de
dialogo de abrir guardar como. 

Cantidad: 1
Nombre: cd

:.: List Box.-  Control  que vamos usar  para poner  los sites que  van hacer 
explorados.

Cantidad: 1
Nombre: Site

:.: TextBox.- aca se pondran los sites que contengan los sitios vulnerables.

Cantidad: 1
Nombre: Bugados

:.: Command Button

Cantidad: 5
*  Nombre: Adicionar
   Caption: Adicionar
*  Nombre: Limpiar
   Caption: Limpiar
*  Nombre: Scannear
   Caption Scannear
*  Nombre: Salvar
   Caption: Salvar
*  Nombre: Limpar_bugados
   Caption: Limpiar


Bueno ahora empezamos el segundo formulario que viene a ser el insertar.

:.: TextBox.- en  esta casilla pondremos los sites que  seran incluidos en la 
lista que va a ser scaneada.

Cantidad: 1
Nombre: TextBox

:.: Command Button

Cantidad: 6
*  Nombre: AddBut
   Caption: Adicionar
*  Nombre: RemoveBut
   Caption: Remover
*  Nombre: NewBut
   Caption: Nova Lista
*  Nombre: OpenBut
   Caption: Abrir Lista
*  Nombre: ClearBut
   Caption: Limpar Lista
*  Nombre: Sair
   Caption: OK

:.: COMDLG32

Cantidad: 1
Nombre: Dialog


Bueno, viendo que hemos llenado todo  los datos, procedemos a la creacion del 
codigo. Para esto solo  basta con hacer doble click en cada  form y pegar las 
siguiente lineas.

------------------------------------  inicio 
---------------------------------

Private Sub Adicionar_Click() 'boton  para adicionar site en la lista...
  Load insertar
  insertar.Show 'muestra el form
  End Sub


  Private Sub Scannear_Click() 'Boton para comenzar el scaneo
  On Error Resume Next 'Si hay un error sigue con el proximo

  For i = 0 To Sites.ListCount
    Load Winsock1(i + 1) 'todos los winsock apartir de su index.
    Winsock1(i).Close
    Winsock1(i).RemoteHost = Sites.List(i)
    Winsock1(i).RemotePort = "80" 'esto abre el puerto 80
    Winsock1(i).Connect 'Ordena la conexion
    Sites.Selected(i) = True
  Next i ' proximo site
  End Sub



  Private Sub salvar_Click()
  Dim Filename As String 'El nombre del archivo como string
  Dim x As Integer 'X es un entero
  On Error Resume Next 'eso es si en caso que ocurra un error siga el 
programa
  CD.Filter = "Swp Files(*.CMT)|*.CMT|Texto(*.txt)|*.txt|Todo los archivos 
(*.*)|*.*"
  CD.InitDir = App.Path 'Directorio inicial
  CD.Filename = "scan log" 'con eso salva
  CD.ShowSave 'Esto habre una caja de dialogo de salvar como

  Open CD.Filename For Output As #1 'abre si no existe lo creara
    Print #1, "SwP scanner 1.0" 'Esta son lineas adicionales para el txt
    Print #1, "Posibles paginas con el bug:"
    Print #1, ""
    Print #1, Me.Bugados.Text
    Print #1, ""
    Print #1, ":.:  Fin :.:"
    Print #1, "Made in Peru"

  Close #1 'Con esto cerramos el archivo

  End Sub


  Private Sub Winsock1_Connect(Index As Integer) ' cuando el winshock se 
conecta con los site en la lista
  Winsock1(Index).SendData "Get " & "/_vti_bin/_vti_aut/author.dll" & " 
HTTP/1.0" & vbCrLf & vbCrLf
  'esto envia la peticion al servidor
  End Sub



  Private Sub Winsock1_DataArrival(Index As Integer, ByVal bytesTotal As 
Long)
  On Error Resume Next ' eso es en caso que ocurra un error...
  Dim Dados As String 'declara los datos recibidos como texto
  Winsock1(Index).GetData Dados

  If InStr(1, Dados, "200 OK") Then
  'Vier o "200 OK", quiere decir que fue encontrado el archivo
   Bugados = Bugados + Winsock1(Index).RemoteHost + vbCrLf ' esto adiciona 
el site a la lista
  End If


  End Sub



   Private Sub Limpar_Click()
   Sites.Clear 'Limpa a lista de sites
    End Sub


   Private Sub Limpar_bugados_Click()
    Bugados.Text = "" ' Limpia la lista de bugados
   End Sub


   Private Sub Winsock1_Error(Index As Integer, ByVal Number As Integer, 
Description As String, ByVal Scode As Long, ByVal Source As String, ByVal 
HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
   Select Case Number 'con eso verificamos los errores

   Case Is = 1004
   MsgBox "Error: La operacion fue cancelada."
   Winsock1(i).Close

   Case Is = 10035
   MsgBox "Error: el socket esta bloqueado o la conexion fue negada."
   Winsock1(i).Close

   Case Is = 10036
   MsgBox "Error. la operacion fue negada."
   Winsock1(i).Close

   Case Is = 10048
   MsgBox "Error. esta en uso la conexion."
   Winsock1(i).Close

   Case Is = 10049
   MsgBox "Error. La conexion local no lo soporta."
   Winsock1(i).Close

   Case Is = 10051
   MsgBox "Error. El host no pudo ser encontrado."
   Winsock1(i).Close


   Case Is = 10053
   MsgBox "Error: La conexion fue abortada"
   Winsock1(i).Close


   Case Is = 10056
   MsgBox "Error. El socket ya esta conetado."
   Winsock1(i).Close

   Case Is = 10057
   MsgBox "Error. El Socket No conectado."
   Winsock1(i).Close


   Case Is = 10061
   MsgBox "Error. La conexion fue rechazada por el Host: " + 
Winsock1(i).RemoteHost
   Winsock1(i).Close


   Case Is = 11001
   MsgBox "Error. Host No encontrado."
   Winsock1(i).Close

   Case Is = 11002
   MsgBox "Error. host encontrado autorizacion negada."
   Winsock1(i).Close


   Case Else
   MsgBox "Error. Error Desconocido"
   Winsock1(i).Close

   End Select
   End Sub
----------------------------------------------------------------------------


bueno ahora el codigo de insertar

------------------------------------  insertar 
---------------------------------

Dim AbovePos As String
   Dim SelfPos As String
   Dim BelowPos As String
   Dim AbovePosIndex As Integer
   Dim SelfPosIndex As Integer
   Dim BelowPosIndex As Integer
   Dim LineText, FilePath As String '
   Dim Opened As Boolean 'Declara la variable Opened como boolean.


   Public Function Data()
   AbovePos = inicio.Sites.List(Sites.ListIndex - 1) 'aqui estan las 
variable usadas por el programa
   SelfPos = inicio.Sites.List(Sites.ListIndex)
   BelowPos = inicio.Sites.List(Sites.ListIndex + 1)
   AbovePosIndex = inicio.Sites.ListIndex - 1
   SelfPosIndex = inicio.Sites.ListIndex
   BelowPosIndex = inicio.Sites.ListIndex + 1
   End Function


   Public Function MakeFalse()
   NewBut.Enabled = False
   RemoveBut.Enabled = False
   SaveBut.Enabled = False
   End Function

   Public Function MakeTrue()
   NewBut.Enabled = True
   RemoveBut.Enabled = True
   End Function

   Private Sub AddBut_Click()
   If TextBox.Text = "" Then   'esto impide que se active cuando no halla 
nada en el textbox
   MsgBox "Debes escribir un site por lo menos" 'abre la caja de mensaje de 
error.
   Else 'Caso cotnrario
   If TextBox.Text <> "" Then
    inicio.Sites.AddItem (TextBox.Text) 'adiciona el site en a lista
    TextBox.Text = "" 'limpia el textbox
    TextBox.SetFocus 'se coloca como foco en el textbox
    Call MakeTrue
   End If
   End If
   End Sub

   Private Sub ClearBut_Click() 'boton limpiar
   inicio.Sites.Clear 'Limpia la lista de sites
    TextBox.Text = "" 'Limpia el textbox
    TextBox.SetFocus  'se coloca como foco en el texbox
   End Sub

   Private Sub NewBut_Click()
   'esto pregunta si desea crear una nueva lista
   Response = MsgBox("Desea crear una nueva lista?", vbQuestion + vbYesNo, 
"ListBox Controle")
   If Response = vbYes Then ' en caso si la respuesta es si
    inicio.Sites.Clear 'Limpia la lista
    Call MakeFalse
    Opened = False
    FilePath = "" 'Limpa la variable
   End If
   End Sub


  Private Sub OpenBut_Click() 'Boton adicionar
    Dialog.ShowOpen 'Abre la caja de dialogo de abrir
    FilePath = Dialog.Filename
    Opened = True
   If FilePath <> "" Then Call LoadList(inicio.Sites) 'en caso que contenga 
algo
                                                     'Esta funcion agregara 
los site a la lista
  End Sub

  Public Function LoadList(ListBoxName As ListBox) 'Esta funcion inclue los 
sites a la lista
  On Error GoTo ErrorHandler 'Caso que ocurra un error

    Open FilePath For Input As #1
    While Not EOF(1) 'en cuanto existan lineas en el archivo
        Line Input #1, LineText 'esto pega las lineas en la variable 
linetext
        If Trim$(LineText) <> "" Then Form1.Sites.AddItem LineText
    Wend 'Continua con lectura del archivo
    Close #1
   If Form1.Sites.ListCount >= 1 Then Call MakeTrue
AfterLoadList:
    Exit Function
ErrorHandler:
   MsgBox "Ocorreu um erro ao adicionar a lista!."
   Resume AfterLoadList
  End Function


   Private Sub RemoveBut_Click() 'boton renover
    Selected = inicio.Sites.ListIndex + 1 'Declara la variable selected
   If inicio.Sites.ListCount <= 1 Then 'si la lista contine menos o igual a 
un 1
    inicio.Sites.Clear 'Esto limpia la lista
    Call MakeFalse
  Else 'Caso contrrio
    Call RemoveItem 'Llama a la funcion renover
    Items = inicio.Sites.ListCount
    If Selected <= Items Then
        inicio.Sites.Selected(SelfPosIndex) = True
    Else
        inicio.Sites.Selected(AbovePosIndex) = True
    End If
   End If
   End Sub

   Private Sub salir_Click() 'eso ya saben todos
   Unload Me
   End Sub

   Private Sub TextBox_Change()
   If TextBox.Text = "" Then 'si no hay nada digitado
    ClearBut.Enabled = False
    AddBut.Enabled = False
   Else 'si hay algo digitado
    ClearBut.Enabled = True
    AddBut.Enabled = True
   End If
  End Sub

  Private Sub TextBox_KeyDown(KeyCode As Integer, Shift As Integer) 'cuando 
presionas enter
  If KeyCode = 13 Then Call AddBut_Click 'Este llama a la funcion adicionar
  End Sub

  Public Function RemoveItem() 'Renover
  If inicio.Sites.SelCount > 0 Then 'en caso que la lista tenga mas de un 
archivo selecionado
   inicio.Sites.RemoveItem (inicio.Sites.ListIndex) 'renueve los sites 
selecionados por el user
  Else 'caso contrario
    errmsg "Selecione los site y repita la operacion." 'pide que repita
  End If
  End Function

-----------------------------------------------------------------------------

Como veran, el desarrollo de este scanner puede ser modificado para poder ver 
otros tipos de bugs, eso ya se los dejo a la imaginacion de cada uno.


Bueno gente  eso ha sido  todo por el  momento, espero haber podido  guiar en
algo  a quienes  desean desarrollar  algunas  herramientas de  testeo por  su
cuenta. Cualquier duda/consulta haganmela llegar a mi correo que gustosamente
atendere. 


--------------> crackman@eml.cc


Exitos, nos vemos en la proxima SWP.

								CraCkman


   ______   ______   ______   ______   ______   ______   ______   ______
  |  ____| |  ____| |  ____| |  ____| |  ____| |  ____| |  ____| |  ____|      
__| |______| |______| |______| |______| |______| |______| |______| |______
--------------------------------------------------------------------------

                      --                             --
			 Security Wari Projects / SWP  |
		      (c) Todos los Derechos Reservados
		     |     PERU / 2002 - 2004           
                      --                              --
