Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - WHK

#3981
Nivel Web / Re: como evitar la inyeccion sql
20 Abril 2009, 01:02 AM
Cita de: CICOLO_111234 en 19 Abril 2009, 16:16 PM
hola!

tengo este codigo:

if (isset($_GET['ID'])) {
  $colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['ID'] : addslashes($_GET['ID']);
}
mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = sprintf("SELECT * FROM noticias WHERE ID = %s", $colname_Recordset1);


y me gustaria como evitar la inyeccion sql.

salu2

Eso tiene sql inyección ya que el addslashes solo agrega slashses a carácteres que puedan influir en la query, en este caso reemplazaría las comillas dobles y simples pero en el ejemplo que tu pusiste no se necesita una comilla para lanzar la sql inyección.


Código (php) [Seleccionar]

$_GET['ID'] = '-1 union select 1,concat(shell_en_dword),3 into outfile test.php --';

if (isset($_GET['ID'])) {
  $colname_Recordset1 = (get_magic_quotes_gpc()) ? $_GET['ID'] : addslashes($_GET['ID']);
}
mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = sprintf("SELECT * FROM noticias WHERE ID = %s", $colname_Recordset1);


Para poder evitar esto necesitas encerrar el valor entre comillas y de todas formas tendrías problemas con los slashses asi que simplemente puedes utilizar mysql_real_escape_string:
Código (php) [Seleccionar]

if(isset($_GET['ID'])) $colname_Recordset1 = $_GET['ID']; else die('No hay valor');

mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = sprintf("SELECT * FROM noticias WHERE ID = '%s'", mysql_real_escape_string($colname_Recordset1));


O también:
Código (php) [Seleccionar]

if(isset($_GET['ID'])) $colname_Recordset1 = $_GET['ID']; else die('No hay valor');

mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = 'SELECT * FROM noticias WHERE ID = \''.mysql_real_escape_string($colname_Recordset1.'\'';


Ahra si ID es un valor numérico puedes hacer:
Código (php) [Seleccionar]

if(isset($_GET['ID'])) $colname_Recordset1 = $_GET['ID']; else die('No hay valor');

mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = 'SELECT * FROM noticias WHERE ID = '.(int)$colname_Recordset1;


O también:

Código (php) [Seleccionar]

if(isset($_GET['ID'])) $colname_Recordset1 = $_GET['ID']; else die('No hay valor');

mysql_select_db($database_prueba, $prueba);
$query_Recordset1 = 'SELECT * FROM noticias WHERE ID = '.(int)preg_replace('|[^0-9.]|i', '', $colname_Recordset1);

De esta forma tomará carácteres válidos y no devolverá error si realmente hay un valor numérico.
#3982
Hola, tengo un pequeño problema,
_hize un control de diseño y este no se sobrepone a un label asi que intenté crear otro control con un label nuevo que se comportara exatamente igual pero quería hacerlo transparente para que pudiera verse como un label cualquiera, al hacerlo solo pude poner transparente el control pero no el label o si no desaparece y si pongo transparente el label y no el control se ve normal... alguien sabe como hacer que todo se vea transparente menos las letras?

También lo intenté con una caja de texto ya que este tiene un manejador de objeto asociado pero el Getwindowa no me modifica la transparencia, debe ser porque no se interpreta en los controles de usuario o que se yo.

alguien puede darme una mano?

La idea principal era crear enlaces estilo web donde uno pueda hacer click en el label para hacer ciertas acciones ya que es un menú lateral y no se vería muy bién con un botón.

Gracias.
#3983
No se vale.. mad se va a llevar el primer segundo y tercer lugar  :xD
Esto es un monopolio  :¬¬
#3984
Cita de: Nphacks en 17 Abril 2009, 05:28 AM
donde se hace la presentacion?

Te haces un nuevo tema y le mandas la url a E0N por privado para que te lo agrege.
#3985
jaja si porque ahi solo posteé como dos veces pero el de acá tiene mas de 20 incluyendo carácteres especiales.
En el archivo que subí de muestra no le incluí mi verdadero pass, obio.
#3986
Cita de: Jubjub en 13 Abril 2009, 21:43 PM
Jugoso.. ahora si que me entraron ganas de ver el source, la parte de inicio de sesion llevaba tiempo planeando usarla para un juguete :rolleyes:
Cita de: Carloswaldo en 14 Abril 2009, 01:17 AM
WHK, tienes que enseñarme a hacer eso del login, escríbeme por el msn cuando estés en linea.

Esto lel login lo hize en un proyecto aparte, cuando lo terminé solo copié las funciones al proyecto del ghost.

Código (vb) [Seleccionar]
Private Sub Command1_Click()
Winsock.RemoteHost = separar_host(Text3.Text, "host")
Winsock.RemotePort = "80"
Winsock.Connect
Estado.Caption = "Conectando ..."
End Sub

Private Sub Command2_Click()
End
End Sub

Public Function separar_host(Ruta As String, Tipo As String) As String
Dim Datos() As String
If Not Left$(Ruta, 7) = "http://" Then
Ruta = "http://" & Ruta
End If
If Tipo = "host" Then
Datos = Split(Ruta, "/")
separar_host = Datos(2)
ElseIf Tipo = "ruta" Then
Datos = Split(Ruta, separar_host(Ruta, "host"))
separar_host = Datos(1)
End If
End Function

Private Sub Winsock_Connect()
Dim Post_Data As String
Estado.Caption = "Enviando datos ..."
Post_Data = "user=" & URLEncode(Text1.Text) & "&passwrd=" & URLEncode(Text2.Text)

Winsock.SendData _
"POST " & separar_host(Text3.Text, "ruta") & "?action=login2 HTTP/1.1" & vbCrLf & _
"Host: " & separar_host(Text3.Text, "host") & vbCrLf & _
"User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-ES; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729)" & vbCrLf & _
"Connection: Close" & vbCrLf & _
"Content-Type: application/x-www-form-urlencoded" & vbCrLf & _
"Content-Length: " & Len(Post_Data) & vbCrLf & vbCrLf & _
Post_Data & vbCrLf
End Sub

Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
Dim Paquetes As String
Estado.Caption = "Obteniendo paquetes ..."
Winsock.GetData Paquetes
If Not Eregi("302 Found", Paquetes) Then Estado.Caption = "Error de datos"

Text4.Text = Obtener_Cookies(Paquetes)
DoEvents
Winsock.Close
Estado.Caption = "Finalizado"
End Sub

Private Function Obtener_Cookies(Buffer As String) As String
Rebuscar:
Cookie = InStr(1, Buffer, "Set-Cookie: ")
If Cookie = 0 Then
Exit Function
Else
Buffer = Mid$(Buffer, Cookie, Len(Buffer))
Cookie = InStr(1, Buffer, ";")
Temporal = Mid$(Buffer, 1, Cookie)
Buffer = Mid$(Buffer, Cookie, Len(Buffer))
Temporal = Replace(Temporal, "Set-Cookie: ", "")
Obtener_Cookies = Obtener_Cookies & " " & Temporal
Pause "0.01"
GoTo Rebuscar
End If
End Function

Public Function Eregi(Condicion As String, Buffer As String) As Boolean
If InStr(1, Buffer, Condicion) > 0 Then Eregi = True Else Eregi = False
End Function


Public Function URLEncode(sRawURL As String) As String

    On Error GoTo Catch
    Dim iLoop As Integer
    Dim sRtn As String
    Dim sTmp As String
    Const sValidChars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:/.?=_-$(){}~&"


    If Len(sRawURL) > 0 Then
        ' Loop through each char


        For iLoop = 1 To Len(sRawURL)
            sTmp = Mid(sRawURL, iLoop, 1)


            If InStr(1, sValidChars, sTmp, vbBinaryCompare) = 0 Then
                ' If not ValidChar, convert to HEX and p
                '     refix with %
                sTmp = Hex(Asc(sTmp))

                If sTmp = "20" Then
                    sTmp = "+"
                ElseIf Len(sTmp) = 1 Then
                    sTmp = "%0" & sTmp
                Else
                    sTmp = "%" & sTmp
                End If

            End If

            sRtn = sRtn & sTmp
        Next iLoop

        URLEncode = sRtn
    End If

Finally:
    Exit Function
Catch:
    URLEncode = ""
    Resume Finally
End Function

Public Sub Pause(interval)
On Error Resume Next
Dim atime
atime = Timer
Do While Timer - atime < Val(interval)
  DoEvents
Loop
End Sub


Les dejo el ejemplo ejecutable y su fuente acá.



Si tienen alguna duda pueden preguntar en el subforo de visual basic.
#3987
Hola, hize algunos cambios en el programa ya que habian algunos foros que impedian el ingreso y solo dejaban ver los temas a los usuarios registrados asi que....



:D Ahora le di la opción de ingresar sesión a los fantasmas jajaja.
Las instrucciones siguen en el primer post al igual que la descarga.

Cualquer duda, consulta, reclamo no duden en decirlo.

PD: dejé un video también en el primer post.
#3988
PHP / Re: Duda con simplexml_load_file
13 Abril 2009, 08:47 AM
Bueno olvidenlo  :P no lo arreglé asi que procesé los datos de forma manual con explode y ahi si funciona bién.

De todas formas quedé intrigado xD
#3989
PHP / Duda con simplexml_load_file
13 Abril 2009, 07:33 AM
Hola, tengo una pequeña duda..

Estoy cargando un archivo XML desde simplexml_load_file() pero este no me debuelve los valores en blanco y si necesito que los considere para poder crear las tablas, es como si fuera un excel donde hay columnas vacías que pueden ser datos extras pero no las toma y al procesarlo me indica como si la siguiente columna lo reemplazara.

Se que hay un valor "LIBXML_NOBLANKS" que es "Remove blank nodes" o sea que no los muestre pero yo quiero todo lo contrario.. que si los muestre.

Alguien tiene alguna idea?
#3990
No, no se puede pero por eso depende mucho del sitio web porque si está dentro de un input o un código javascript puedes hacer un xss igual sin esos carácteres.

https://foro.elhacker.net/nivel_web/temas_mas_destacados_fallas_y_explotaciones_a_nivel_web_actualizado_10409-t244090.0.html
Puedes leer los temas que tengan relación con XSS para que tengas mas claro como hacerlo.