Autor Tema: como puedo tratar de encontrar un backdoor en un source?  (Leído 180 veces)

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

Desconectado hardcore

  • No Grade
  • *
  • Topic Author
  • Mensajes: 24
  • ar
  • Agradecimientos: 1
  • Cronica: : interlude
  • Revision: 370
  • S.O: Windows 10
  • Serverpack : ACIS
como puedo tratar de encontrar un backdoor en un source?
« en: Abril 03, 2019, 08:08:58 pm »
gracias
Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    hola a todos. bueno les cuento hace unos dias venia feliz trabajando un pack que encontre y solo con unos pequeños errores nada grave , pero hoy me di cuenta que posiblemente tenga una especie de backdoor o puerta trasera como le digan xD.

    ¿ porque pienso esto ? bueno hoy los personajes que tenia para testiar clases y eso "NORMALES" hoy tienen acceso nivel 8 de admin master y no  me explico porque.

    estoy usando este projecto llamado l2jnetwork  rev 374 de acis , alguno sabe donde podria comenzar a buscar dentro del core ? o es posible que estea por todas partes y sea inutil todo ?...

    muchas gracias !!

    aqui dejo el link del pack que  estoy usando por si quieren revisarlo ...

    http://www.mediafire.com/file/5zjw2nncw65ddwp/L2jNetwork+Revision+32.rar

    Desconectado ValfiernO

    • Vip
    • *
    • Mensajes: 212
    • ar
    • Agradecimientos: 11
    • - Nunca es tarde para aprender..!!!
    • Cronica: : Scions of Destiny
    • Revision: Privada
    • S.O: Windows Server 2012
    • Serverpack : L2JAdmins
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #1 en: Abril 03, 2019, 11:01:06 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    No te fijaste si la opcion de que los pj que entran son gm automaticamente?

    Desconectado hardcore

    • No Grade
    • *
    • Topic Author
    • Mensajes: 24
    • ar
    • Agradecimientos: 1
    • Cronica: : interlude
    • Revision: 370
    • S.O: Windows 10
    • Serverpack : ACIS
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #2 en: Abril 03, 2019, 11:51:45 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
  • No te fijaste si la opcion de que los pj que entran son gm automaticamente?

    sip fue lo primero que revise ademas me pegue una revisada por todo el datapack compilado y no parece aver nada de esto...


    Código: [Seleccionar]
    #=============================================================
    #                       GMs / Admin Stuff
    #=============================================================

    # Set the default access level for ALL users. Default is 0.
    DefaultAccessLevel = 0

    el problema es que no lo te da el acceso nivel 8 hasta que pasen unos dias , yo estoy testiando esto y lo hace entre 4 y 5 dias que el personaje lleva en el juego...

    encontre algo raro en un comando .repair con algo relacionado al accesslevel


    Código: [Seleccionar]
    	public static boolean checkPunish(Player activeChar, String repairChar)
    {
    boolean result = false;
    int accessLevel = 0;
    int repCharJail = 0;
    Connection con = null;
    try
    {
    con = L2DatabaseFactory.getInstance().getConnection();

    PreparedStatement statement = con.prepareStatement("SELECT accesslevel,punish_level FROM characters WHERE char_name=?");
    statement.setString(1, repairChar);
    ResultSet rset = statement.executeQuery();
    if (rset.next())
    {
    accessLevel = rset.getInt(1);
    repCharJail = rset.getInt(2);
    }
    rset.close();
    statement.close();

    }
    catch (SQLException e)
    {
    e.printStackTrace();
    }
    finally
    {
    Mysql.closeQuietly(con);
    }
    if (repCharJail == 1 || accessLevel < 0) // 0 norm, 1 chat ban, 2 jail, 3....
    result = true;
    return result;
    }

    y este es el codigo entero


    Código: [Seleccionar]
    package net.sf.l2j.gameserver.handler.voicedcommandhandlers;

    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.logging.Logger;

    import net.sf.l2j.L2DatabaseFactory;
    import net.sf.l2j.gameserver.data.cache.HtmCache;
    import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;
    import net.sf.l2j.gameserver.model.actor.instance.Player;
    import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
    import net.sf.l2j.gameserver.util.Mysql;

    public class Repair implements IVoicedCommandHandler
    {
    static final Logger _log = Logger.getLogger(Repair.class.getName());

    private static final String[] _voicedCommands =
    {
    "repair"
    };

    @Override
    public boolean useVoicedCommand(String command, Player activeChar, String target)
    {
    if (activeChar == null)
    return false;

    // Send activeChar HTML page
    if (command.startsWith("repair"))
    {
    String htmContent = HtmCache.getInstance().getHtm("data/html/mods/repair/repair.htm");
    NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(5);
    npcHtmlMessage.setHtml(htmContent);
    npcHtmlMessage.replace("%acc_chars%", getCharList(activeChar));
    activeChar.sendPacket(npcHtmlMessage);
    return true;
    }
    // Command for enter repairFunction from html

    // _log.warning("Repair Attempt: Failed. ");
    return false;
    }

    public static String getCharList(Player activeChar)
    {
    String result = "";
    String repCharAcc = activeChar.getAccountName();
    Connection con = null;
    try
    {
    con = L2DatabaseFactory.getInstance().getConnection();
    PreparedStatement statement = con.prepareStatement("SELECT char_name FROM characters WHERE account_name=?");
    statement.setString(1, repCharAcc);
    ResultSet rset = statement.executeQuery();
    while (rset.next())
    {
    if (activeChar.getName().compareTo(rset.getString(1)) != 0)
    result += rset.getString(1) + ";";
    }
    // _log.warning("Repair Attempt: Output Result for searching characters on account:"+result);
    rset.close();
    statement.close();
    }
    catch (SQLException e)
    {
    e.printStackTrace();
    // return result;
    }
    finally
    {
    Mysql.closeQuietly(con);
    }
    return result;
    }

    public static boolean checkAcc(Player activeChar, String repairChar)
    {
    boolean result = false;
    String repCharAcc = "";
    Connection con = null;
    try
    {
    con = L2DatabaseFactory.getInstance().getConnection();
    PreparedStatement statement = con.prepareStatement("SELECT account_name FROM characters WHERE char_name=?");
    statement.setString(1, repairChar);
    ResultSet rset = statement.executeQuery();
    if (rset.next())
    {
    repCharAcc = rset.getString(1);
    }
    rset.close();
    statement.close();

    }
    catch (SQLException e)
    {
    e.printStackTrace();
    }
    finally
    {
    Mysql.closeQuietly(con);
    }
    if (activeChar.getAccountName().compareTo(repCharAcc) == 0)
    result = true;

    return result;
    }

    public static boolean checkPunish(Player activeChar, String repairChar)
    {
    boolean result = false;
    int accessLevel = 0;
    int repCharJail = 0;
    Connection con = null;
    try
    {
    con = L2DatabaseFactory.getInstance().getConnection();

    PreparedStatement statement = con.prepareStatement("SELECT accesslevel,punish_level FROM characters WHERE char_name=?");
    statement.setString(1, repairChar);
    ResultSet rset = statement.executeQuery();
    if (rset.next())
    {
    accessLevel = rset.getInt(1);
    repCharJail = rset.getInt(2);
    }
    rset.close();
    statement.close();

    }
    catch (SQLException e)
    {
    e.printStackTrace();
    }
    finally
    {
    Mysql.closeQuietly(con);
    }
    if (repCharJail == 1 || accessLevel < 0) // 0 norm, 1 chat ban, 2 jail, 3....
    result = true;
    return result;
    }

    public static boolean checkKarma(Player activeChar, String repairChar)
    {
    boolean result = false;
    int repCharKarma = 0;
    Connection con = null;
    try
    {
    con = L2DatabaseFactory.getInstance().getConnection();
    PreparedStatement statement = con.prepareStatement("SELECT karma FROM characters WHERE char_name=?");
    statement.setString(1, repairChar);
    ResultSet rset = statement.executeQuery();
    if (rset.next())
    {
    repCharKarma = rset.getInt(1);
    }
    rset.close();
    statement.close();
    }
    catch (SQLException e)
    {
    e.printStackTrace();
    }
    finally
    {
    Mysql.closeQuietly(con);
    }
    if (repCharKarma > 0)
    result = true;
    return result;
    }

    public static boolean checkChar(Player activeChar, String repairChar)
    {
    boolean result = false;
    if (activeChar.getName().compareTo(repairChar) == 0)
    result = true;
    return result;
    }

    public static void repairBadCharacter(String charName)
    {
    Connection con = null;
    try
    {
    con = L2DatabaseFactory.getInstance().getConnection();

    PreparedStatement statement;
    statement = con.prepareStatement("SELECT obj_Id FROM characters WHERE char_name=?");
    statement.setString(1, charName);
    ResultSet rset = statement.executeQuery();

    int objId = 0;
    if (rset.next())
    {
    objId = rset.getInt(1);
    }
    rset.close();
    statement.close();
    if (objId == 0)
    {
    Mysql.closeQuietly(con);
    return;
    }
    statement = con.prepareStatement("UPDATE characters SET x=17867, y=170259, z=-3503 WHERE obj_Id=?");
    statement.setInt(1, objId);
    statement.execute();
    statement.close();
    statement = con.prepareStatement("DELETE FROM character_shortcuts WHERE char_obj_id=?");
    statement.setInt(1, objId);
    statement.execute();
    statement.close();
    statement = con.prepareStatement("UPDATE items SET loc=\"INVENTORY\" WHERE owner_id=? AND loc=\"PAPERDOLL\"");
    statement.setInt(1, objId);
    statement.execute();
    statement.close();
    }
    catch (Exception e)
    {
    _log.warning("GameServer: could not repair character:" + e);
    }
    finally
    {
    Mysql.closeQuietly(con);
    }
    }

    @Override
    public String[] getVoicedCommandList()
    {
    return _voicedCommands;
    }

    }

    tambien encontre esto y no se entiende bien su funcion en accesslevel.java


    Código: [Seleccionar]
    	/**
    * Set the child of a {@link AccessLevel} if not existing, then verify if this access level is associated to AccessLevel set as parameter.
    * @param access : The AccessLevel to check.
    * @return true if a child access level is equals to access, otherwise false.
    */
    public boolean hasChildAccess(AccessLevel access)
    {
    // No child access has been found ; we check if a child level has been set. If yes, then we dig into AdminData to find back the AccessLevel and we set it for future usage.
    if (_childAccess == null && _childLevel > 0)
    _childAccess = AdminData.getInstance().getAccessLevel(_childLevel);

    return _childAccess != null && (_childAccess.getLevel() == access.getLevel() || _childAccess.hasChildAccess(access));
    }
    « Última modificación: Abril 04, 2019, 01:27:08 am por hardcore »

    Conectado ReynalDev

    • Administrator
    • *
    • Mensajes: 5043
    • mx
    • Agradecimientos: 1777
    • I took a pill in Ibiza
      • ReynalDev
    • Cronica: : Interlude
    • Revision: HEAD
    • S.O: Linux CentOS
    • Serverpack : L2jFrozen 1.5
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #3 en: Abril 04, 2019, 01:17:58 am »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Modifica el metodo setAccesLevel o como se llame, dentro coloca una validacion, donde si el nombre del personaje es  NOMBRE_DE_TU_GM  le de el acceso, sino, no pasa nada.
    Hay dos caminos; aprender a hacer lo que quieres o pagar para que alguien más lo haga.
    WTS Servicios de desarrollo
    - Facebook: https://goo.gl/DCzNiG
    - Youtube: https://goo.gl/a7m6tc
    - Messenger: https://goo.gl/QzgEBe

    Desconectado hardcore

    • No Grade
    • *
    • Topic Author
    • Mensajes: 24
    • ar
    • Agradecimientos: 1
    • Cronica: : interlude
    • Revision: 370
    • S.O: Windows 10
    • Serverpack : ACIS
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #4 en: Abril 04, 2019, 01:22:56 am »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Modifica el metodo setAccesLevel o como se llame, dentro coloca una validacion, donde si el nombre del personaje es  NOMBRE_DE_TU_GM  le de el acceso, sino, no pasa nada.

    disculpa no logre entenderte estas hablando del core o los SQL?

    Desconectado FanaticoLineage2

    • Grado D
    • *
    • Mensajes: 64
    • ar
    • Agradecimientos: 8
    • Cronica: : Interlude, C4
    • Revision: HEAD
    • S.O: Windows 7
    • Serverpack : L2j ACIS, L2j Admins
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #5 en: Abril 04, 2019, 05:09:03 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Puede ser en la pagina, hace poco tuve ese problema, fijate los derechos que le pones a la pagina, etc, yo lo tuve con el frozen 1.5 de reynaldo, tambien si quieres un buen anti hack, te recomiendo l2jguard. muy bueno y muy buena atención

    Conectado ReynalDev

    • Administrator
    • *
    • Mensajes: 5043
    • mx
    • Agradecimientos: 1777
    • I took a pill in Ibiza
      • ReynalDev
    • Cronica: : Interlude
    • Revision: HEAD
    • S.O: Linux CentOS
    • Serverpack : L2jFrozen 1.5
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #6 en: Abril 04, 2019, 05:17:13 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Puede ser en la pagina, hace poco tuve ese problema, fijate los derechos que le pones a la pagina, etc, yo lo tuve con el frozen 1.5 de reynaldo, tambien si quieres un buen anti hack, te recomiendo l2jguard. muy bueno y muy buena atención

    Si ese es el caso, el problema es una inyeccion de SQL, no del servidor Lineage 2.
    Hay dos caminos; aprender a hacer lo que quieres o pagar para que alguien más lo haga.
    WTS Servicios de desarrollo
    - Facebook: https://goo.gl/DCzNiG
    - Youtube: https://goo.gl/a7m6tc
    - Messenger: https://goo.gl/QzgEBe

    Desconectado FanaticoLineage2

    • Grado D
    • *
    • Mensajes: 64
    • ar
    • Agradecimientos: 8
    • Cronica: : Interlude, C4
    • Revision: HEAD
    • S.O: Windows 7
    • Serverpack : L2j ACIS, L2j Admins
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #7 en: Abril 04, 2019, 05:24:44 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Puede ser en la pagina, hace poco tuve ese problema, fijate los derechos que le pones a la pagina, etc, yo lo tuve con el frozen 1.5 de reynaldo, tambien si quieres un buen anti hack, te recomiendo l2jguard. muy bueno y muy buena atención

    Si ese es el caso, el problema es una inyeccion de SQL, no del servidor Lineage 2.

    Claro, por eso le dije que empiece por la web (Pagina)  :06:

    Desconectado hardcore

    • No Grade
    • *
    • Topic Author
    • Mensajes: 24
    • ar
    • Agradecimientos: 1
    • Cronica: : interlude
    • Revision: 370
    • S.O: Windows 10
    • Serverpack : ACIS
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #8 en: Abril 04, 2019, 05:27:21 pm »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Puede ser en la pagina, hace poco tuve ese problema, fijate los derechos que le pones a la pagina, etc, yo lo tuve con el frozen 1.5 de reynaldo, tambien si quieres un buen anti hack, te recomiendo l2jguard. muy bueno y muy buena atención

    Si ese es el caso, el problema es una inyeccion de SQL, no del servidor Lineage 2.

    Claro, por eso le dije que empiece por la web (Pagina)  :06:

    no tengo web y las cuentas son creadas automaticamente pero como ya explique antes no lo hace al crear el personaje si no unos dias despues y estoy revisando los comandos y esas cosas que segun me contaron es lo primero donde puede aver una especie de backdoor... pero hasta ahora no encuentro nada relacionado con accesslevel...

    @ReynalDev  es muy dificil hacer una restriccion como me dices para que yo coloque los nombres de los personajes que quiera que sean gm o admin ?
    « Última modificación: Abril 04, 2019, 05:29:21 pm por hardcore »

    Conectado Fissban

    • AdminSite
    • *
    • Mensajes: 5656
    • ar
    • Agradecimientos: 1667
      • Mis Proyectos
    • Cronica: : Scions of Destiny
    • Revision: Last
    • S.O: Windows 10
    • Serverpack : L2jAdmins
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #9 en: Abril 05, 2019, 07:48:01 am »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    comienza con descargar la ultima version del svn oficial del proyecto...es la mejor forma de lograr lo q buscas.

    Desconectado hardcore

    • No Grade
    • *
    • Topic Author
    • Mensajes: 24
    • ar
    • Agradecimientos: 1
    • Cronica: : interlude
    • Revision: 370
    • S.O: Windows 10
    • Serverpack : ACIS
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #10 en: Abril 11, 2019, 12:47:30 am »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    comienza con descargar la ultima version del svn oficial del proyecto...es la mejor forma de lograr lo q buscas.

    lo acabo de hacer y la verdad no puedo encontrar nada diferente o extraño , e revisado enterword , todos los comandos , character create , sql y no logro encontrarlo lamentablemente voy a tener que comenzar a trabajar con otra rev .... pero gracias de todos modos

    Desconectado Kimeraweb

    • AdminSite
    • *
    • Mensajes: 2460
    • de
    • Agradecimientos: 796
    • Kimeraweb
      • http://l2devsadmins.net
    • Cronica: : Alfa
    • Revision: Alfa
    • S.O: Windows 10
    • Serverpack : Desarrollo interno
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #11 en: Abril 13, 2019, 01:35:36 am »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    hola a todos. bueno les cuento hace unos dias venia feliz trabajando un pack que encontre y solo con unos pequeños errores nada grave , pero hoy me di cuenta que posiblemente tenga una especie de backdoor o puerta trasera como le digan xD.

    ¿ porque pienso esto ? bueno hoy los personajes que tenia para testiar clases y eso "NORMALES" hoy tienen acceso nivel 8 de admin master y no  me explico porque.

    estoy usando este projecto llamado l2jnetwork  rev 374 de acis , alguno sabe donde podria comenzar a buscar dentro del core ? o es posible que estea por todas partes y sea inutil todo ?...

    muchas gracias !!

    aqui dejo el link del pack que  estoy usando por si quieren revisarlo ...

    http://www.mediafire.com/file/5zjw2nncw65ddwp/L2jNetwork+Revision+32.rar


    He bajado el pack y le he echado un vistazo. Lamentablemente, no he encontrado nada. Hay innumerables maneras de esconder unas cuentas líneas de instrucciones.

    Mi consejo, usa netstat para saber a donde conecta tu PC. Si yo programase algo así, me gustaría saber dónde está el server para acceder a el. Así que el server debe de informar de alguna manera que está instalado en la IP xxx a alguien. Usa también un cortafuegos para detectar conexiones salientes y ubicación.

    Sin embargo, si no detectas nada, es que se trata de una configuración del servidor. De nada sirve poner PJs admins si no pueden ser usados.  :ok:
    "Sólo existen dos días al año en los que no se puede hacer nada: ayer y mañana" (Dalai Lama)

    Desconectado maattkz

    • No Grade
    • *
    • Mensajes: 18
    • 00
    • Agradecimientos: 1
    • Cronica: : H5
    • Revision: 1
    • S.O: Windows Server 2012
    • Serverpack : L2jSunrise
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #12 en: Abril 13, 2019, 03:03:23 am »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Pone un par de identificadores o logs dentro del metodo que setea el accesslevel y a medida que vaya pasando fiajte que info podes recolectar

    Desconectado Kimeraweb

    • AdminSite
    • *
    • Mensajes: 2460
    • de
    • Agradecimientos: 796
    • Kimeraweb
      • http://l2devsadmins.net
    • Cronica: : Alfa
    • Revision: Alfa
    • S.O: Windows 10
    • Serverpack : Desarrollo interno
    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #13 en: Abril 15, 2019, 03:33:54 am »
    gracias
    Este post tiene 0 agradecimientos
  • Añade a tus favoritos
    Pone un par de identificadores o logs dentro del metodo que setea el accesslevel y a medida que vaya pasando fiajte que info podes recolectar

    Si fuera un backdoor, no confiaría en que usase las APIs del server, ya que al decirnos

    Citar
    hoy los personajes que tenia para testiar clases ... hoy tienen acceso nivel 8 de admin master

    me lleva a pensar que se pudo usar un query. Cuando el server reinició, los pjs aparecieron editados. Esto no aparecería en los logs.

    Un query se puede esconder en cualquier parte del código.

    Siendo creativos, un PJ podría convertirse en admin llevándolo a un sitio en el mapa, o matando a un mob en concreto. No hay límites en cuanto al "cómo". Lo que es invariable, es que sin saber donde se instala el server, estos backdoors, son inservibles. Confiaría más en un firewall para tracear el PC.
    "Sólo existen dos días al año en los que no se puede hacer nada: ayer y mañana" (Dalai Lama)

    Desconectado maattkz

    • No Grade
    • *
    • Mensajes: 18
    • 00
    • Agradecimientos: 1
    • Cronica: : H5
    • Revision: 1
    • S.O: Windows Server 2012
    • Serverpack : L2jSunrise
    A Kimeraweb le gusta este post.

    Re:como puedo tratar de encontrar un backdoor en un source?
    « Respuesta #14 en: Abril 15, 2019, 12:06:56 pm »
    gracias
    Este post tiene 1 agradecimientos
  • Añade a tus favoritos
    Pone un par de identificadores o logs dentro del metodo que setea el accesslevel y a medida que vaya pasando fiajte que info podes recolectar

    Si fuera un backdoor, no confiaría en que usase las APIs del server, ya que al decirnos

    Citar
    hoy los personajes que tenia para testiar clases ... hoy tienen acceso nivel 8 de admin master

    me lleva a pensar que se pudo usar un query. Cuando el server reinició, los pjs aparecieron editados. Esto no aparecería en los logs.

    Un query se puede esconder en cualquier parte del código.

    Siendo creativos, un PJ podría convertirse en admin llevándolo a un sitio en el mapa, o matando a un mob en concreto. No hay límites en cuanto al "cómo". Lo que es invariable, es que sin saber donde se instala el server, estos backdoors, son inservibles. Confiaría más en un firewall para tracear el PC.


    Si, es cierto lo que decis, pero si se fija que metodos tiene el source para setear el accesslevel y los va rastreando quizas pueda encontrar por donde venga el problema, a menos que sea externo al source y lo hagan desde afuera, cosa que seria raro pero es posible