Cheat engine en html/js/php?

Iniciado por SrTrp, 28 Agosto 2017, 02:34 AM

0 Miembros y 1 Visitante están viendo este tema.

SrTrp

Bueno resulta que tengo un ranking de puntajes en una web y pues un tester que tengo ha podido cambiar el valor de ese puntaje que se aloja en una bd de sql solo con una dll y el cheat engine como puedo bloquear que se hagan estos tipos de "hackeo" o cambio?
este ranking lo tengo en una pagina php puro
en cuanto lo de javascript también quisiera saber como bloquearlo ya que tengo esa duda por que también puedo editarlo sin dll.

engel lex

no entiendo como cambiaste desde cliente un valor en una DB con cheat engine, eso claramente indica que la pagina es vulnerable por donde se mire...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

gAb1

Primero que nada, para estar seguros, ¿estás diciendo que un tester ha podido cambiar el valor de un puntaje en la base de datos y no solo en su navegador? ¿Si entras a la base de datos lo ves cambiado?

No entiendo, ¿que tiene que ver una librería dll con todo esto?

El hecho de que haya sido con Cheat Engine es algo bastante desconcertante pero porque no es lógico (es complicar innecesariamente algo sencillo, a menos que haya sido alguien que no tiene ni idea pero que usa este programa en juegos y haya decidido usarlo en una web...). CE no hace requests a servidores, solamente cambia valores de la memoria RAM del cliente... Lo mismo puede hacerse fácilmente desde las herramientas de desarrollador del navegador, cambiando los parámetros y simplemente reenviando el paquete. Esto último no lo puede hacer CE, tienes que usar javascript o un formulario o botón, etc de la página que envíe una petición con los parámetros modificados... Sinceramente, no le veo el sentido a usar CE por ninguna parte.

El problema está claramente en el script PHP que está aceptando guardar datos incondicionalmente o a través de un descuido del programador...

¿Has escrito tú la aplicación PHP?

No tienes que preguntar como bloquear CE, CE con DLL o javascript, si no compartir el código fuente para que podamos ver donde está el fallo.

javascript es un lenguaje de cliente, ¿sabes lo que significa esto? Solo afecta al ordenador desde el que se accede a la web por lo que es imposible cambiar nada en el servidor si la aplicación web está bien escrita. Tu puedes desactivar JS en tu navegador y ninguna página podrá ejecutar sus scripts cuando las visites. El servidor web envía estos scripts al cliente y estos podrán ser ejecutados o no (depende de la configuración del usuario). No depende de nadie que un usuario ejecute (o no) scripts en su navegador, ya sean los que vienen del servidor o los que él quiera. Esto es muy importante entenderlo bien a la hora de desarrollar aplicaciones web. Ya que un usuario tiene control total con lo que pasa en su ordenador/navegador, por lo que el servidor tiene que desconfiar de todo lo que llega de fuera, en cualquier casos. Por lo que para guardar datos, primero deben de cumplirse una serie de condiciones.

SrTrp

Cita de: engel lex en 28 Agosto 2017, 02:41 AM
no entiendo como cambiaste desde cliente un valor en una DB con cheat engine, eso claramente indica que la pagina es vulnerable por donde se mire...
Ni siquiera yo sigo sin entender como pudo hacer esto eh intentado yo mismo intentar cambiar valores con el CE pero nada según yo la DB la tenia toda prevenida para inyecciones sql, pero ahora me estoy informando con mi tester que me explique que ha echo para tomar preventivas :s

Cita de: gAb1 en 29 Agosto 2017, 01:07 AM
Primero que nada, para estar seguros, ¿estás diciendo que un tester ha podido cambiar el valor de un puntaje en la base de datos y no solo en su navegador? ¿Si entras a la base de datos lo ves cambiado?

No entiendo, ¿que tiene que ver una librería dll con todo esto?

El hecho de que haya sido con Cheat Engine es algo bastante desconcertante pero porque no es lógico (es complicar innecesariamente algo sencillo, a menos que haya sido alguien que no tiene .....
Para la primera pregunta si ha echo eso claramente el me lo ha comentado de 1 momento de tener 30 de score paso a tener 300.000..

Según antes de hacerlo me dijo que probaría inyectandole una dll que trae por defecto el CE y después de eso fue cuando sucedió el cambio de valor drástico

Si eh echo yo la aplicación php y js te muestro la parte de ajax para mandar el score
Código (javascript) [Seleccionar]
function sendscore(score){
       var datos= {
               "score" : score
       };
       $.ajax({
               data:  datos,
               url:   'control/sendscore.php',
               type:  'GET',
               beforeSend: function () {
                       $("#resultado").html("Waiting...");
               },
               success:  function (response) {
                       $("#resultado").html(response);
               }
       });
}

el php
Código (php) [Seleccionar]

require("conex.php");
$user = $_SESSION['usuario'];
$SCORES = $_GET['score'];
if($SCORES >= 1){
    $act1 = "UPDATE usersgames SET scores= scores + '$SCORES' WHERE usernamegame='$user'";
$link->query($act1);
$resultado = "TRUE = $SCORES";
echo $resultado;

Lo se no entiendo como pudo hacer eso, ya se que el CE se supene que actua en la parte del cliente o sea solo es visual y por otra parte es el servidor que no debería de afectar esto.

Y pues para terminar este tester que me dijo esto la verdad no tiene conocimientos sobre que pudiera hacer una inyeccion sql.

#!drvy

Bueno, ese codigo es super vulnerable y es posible que lo haga con cheat engine o incluso simplemente mandando una petición GET al archivo PHP con el score de por si.

Vamos, que el amigo tuyo se ha complicado la vida innecesariamente porque con tener sesión iniciada y poner en el navegador control/sendscore.php?score=999999 habria funcionado. Que como lo ha hecho con cheat engine ? Facil, solo ha modificado la memoria del navegador para que en vez de 30, relfleje 30000 pero ya te digo, no es que su CE haya accedido a la BD, es que el script permite de por si ese tipo de valores y cambios.

Saludos

SrTrp

Cita de: #!drvy en 29 Agosto 2017, 04:40 AM
Bueno, ese codigo es super vulnerable y es posible que lo haga con cheat engine o incluso simplemente mandando una petición GET al archivo PHP con el score de por si.

Vamos, que el amigo tuyo se ha complicado la vida innecesariamente porque con tener sesión iniciada y poner en el navegador control/sendscore.php?score=999999 habria funcionado. Que como lo ha hecho con cheat engine ? Facil, solo ha modificado la memoria del navegador para que en vez de 30, relfleje 30000 pero ya te digo, no es que su CE haya accedido a la BD, es que el script permite de por si ese tipo de valores y cambios.

Saludos
Oohh gracias, tengo también otra duda también ha logrado hacerlo desde una pagina "puntajes" donde desgloso una tabla mostrando los scores de cada usuario ahi solo creo llamada para la conexion a base de datos y luego hago la instrucción de mostrar los usuarios de mayor a menor con los puntajes.

gAb1

Lo que yo dije, tu script PHP está aceptando incondicionalmente cualquier valor que venga de fuera y guardándolo en la base de datos...

Tienes que tener en cuenta que es difícil (o imposible, depende, no sé como funciona tu sistema de rankings) impedir que hagan trampas si el valor del puntaje es enviado desde el cliente, ya que es muy fácil modificar ese valor y ponerse lo que uno quiera.

El script PHP es el encargado de decidir si ese puntaje es aceptado y guardado o descartado si no se cumplen las condiciones (trampas o algún fallo, etc), aquí es donde tienes que implementar la seguridad e integridad de tu sistema de ranking.

Si nos dices sobre que trata el ranking y como funciona, podremos darte soluciones. Si es posible puede moverse al servidor.

SrTrp

Entonces como podria hacer que estos valores no pasaran se lidiar con lo del "control/sendscore.php?score=999999" pero como puedo hacer que no pase cualquier valor que venga fuera?
Este el codigo del ranking no se si tenga algo que ver que este conectando desde aquí la bd igualmente si afecta esto
Código (php) [Seleccionar]

$servername = "server";
$username = "user";
$password = "password";
$dbname = "bd";
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT usernamegames, scores FROM usersgames order by scores desc";
$result = $conn->query($sql);

$number = 1;

<?php
if (
$result->num_rows 0) {
    echo 
"<table CELLSPACING=10 class=tabla><tr><th>TOP</th><th>Usuario</th><th>Score</th></tr>";
    while(
$row $result->fetch_assoc()) {
        echo 
"<tr><td>$number</td><td>".$row["usernamegame"]."</td><td>".$row["scores"]."</td></tr>";
        
$number++;
    }
    echo 
"</table>";
} else {
    echo 
"No se encuentran ningún usuario en el ranking";
}
$conn->close();
?>




gAb1

No necesitamos más código, ya sabemos donde está el problema.

Lo que necesitamos ahora es que nos digas que tipo de ranking es y como funciona, para saber como implementarlo de forma decente, o mejor aún, enseñarte como hacerlo. ¿Es un juego no? Explícanos un poco de que va, para hacernos una idea. Si no, no vamos a poder ayudarte...

SrTrp

El juego va de matar enemigos por cada enemigo matar dan +2 scores, consta de 3 variables principales las cuales son el "score" la "vida" y la "munición" como que otra cosa mas tendrías la duda?