Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Обсудим [HELP!!!] Новый, пока не известный кубо-миру Exploit

Тема в разделе "Управление сервером Bukkit", создана пользователем Aнатолий, 8 окт 2016.

  1. Автор темы
    Aнатолий

    Aнатолий Старожил Пользователь

    Баллы:
    103
    Skype:
    sasay1337
    Имя в Minecraft:
    4epB9Ik
    Есть некий сервер.
    На нем есть "постоянный" игрок (VPN, ChangeHWID и остальные прелести обходов бана)
    Заходя на сервер - спавнит лут в сундуках по указанным координатам
    (Все что в этой теме есть - перекрыто)
    2жды пересматривали IC на косяк (ибо ну очень похоже), там все чисто..
    Логов естественно не каких (100% действует какой то мод, это обьясняет появление предметов даже с вырезанным крафтом)
    Из списка модов глаза упали на 3 мода (DraconicEvolution, а так же ZTones и Vending [барт подсказал])
    Список модов:

    Технические
    :
    Applied Energistics 2 (+ AE2 Stuff, ExtraCells)
    Big Reactors
    Buildcraft 7
    Draconic Evolution
    EnderIO
    Forestry
    IndustrialCraft 2 Experimental (+ Advanced Solar Panels, Nuclear Control; Combo Armors; Gravitation Suite; IC2 Backpack HUD)
    Mekanism 9
    OpenBlocks
    OpenComputers (+ Computronics, OpenGlasses, OpenPrinter)
    OpenSecurity
    OpenModularTurrets
    PowerConverters
    Project Red
    Railcraft
    Tinkers Construct (+ Tinker’s Mechworks, ExtraTiC)
    Thermal Expansion
    Wireless Redstone Chicken Bones Edition

    Декоративные:
    Biomes O’Plenty
    Carpenter’s Blocks
    Chisel 2 (+ ChiselTones)
    CustomNPCs
    Dragon’s Radio Mod
    Hats
    MalisisAdvert
    MalisisDoors
    MrCrayfish’s Furniture Mod
    Realistic World Gen
    Streams
    Ztones

    Интерфейс:
    Damage Indicators Mod
    Inventory Tweaks
    Mouse Tweaks
    NEI (+ NEI Addons)
    Rei’s Minimap Mod
    Waila

    Производительность:
    Fastcraft
    Optifine

    Утилитарные:
    Dynmap (+ Factions Addon)
    Ender Storage
    IronChests
    JumpPad++
    OmniWrench
    Pam’s HarvestCraft
    TooManyDanyOres
    No More Recipe Conflicts
    Vending Blocks

    Но самые большие подозрения упали на мод DraconicEvolution, у него есть свой обработчик TileEntity, к тому же он умеет обновлять NBT своих сундуков со стороны клиента по некоторым параметрам..
    (Я не разбираюсь в модо-писании клиент/сервер так что не ругайтесь, это лишь предположение основанное на логике)
    Код обработчика тайлов
    Код:
    package com.brandon3055.draconicevolution.common.network;
    
    import com.brandon3055.draconicevolution.common.container.ContainerDataSync;
    import com.brandon3055.draconicevolution.common.tileentities.TileObjectSync;
    import com.brandon3055.brandonscore.common.utills.DataUtills;
    import cpw.mods.fml.common.network.simpleimpl.IMessage;
    import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
    import cpw.mods.fml.common.network.simpleimpl.MessageContext;
    import cpw.mods.fml.relauncher.Side;
    import io.netty.buffer.ByteBuf;
    import net.minecraft.client.Minecraft;
    
    /**
     * Created by Brandon on 14/11/2014.
     */
    public class TileObjectPacket implements IMessage {
    
        int x;
        int y;
        int z;
        short index;
        short dataType = -1;
        Object object;
        boolean isContainerPacket;
    
        /**
         * Used for Tile and Container synchronization
         */
        public TileObjectPacket() {
        }
    
        public TileObjectPacket(TileObjectSync tile, byte dataType, int index, Object object) {
            this.isContainerPacket = tile == null;
            if (!isContainerPacket) {
                this.x = tile.xCoord;
                this.y = tile.yCoord;
                this.z = tile.zCoord;
            }
            this.dataType = dataType;
            this.object = object;
            this.index = (short) index;
        }
    
        @Override
        public void toBytes(ByteBuf bytes) {
            bytes.writeBoolean(isContainerPacket);
    
            if (!isContainerPacket) {
                bytes.writeInt(x);
                bytes.writeInt(y);
                bytes.writeInt(z);
            }
    
            bytes.writeByte(dataType);
            bytes.writeShort(index);
    
            DataUtills.instance.writeObjectToBytes(bytes, dataType, object);
    
        }
    
        @Override
        public void fromBytes(ByteBuf bytes) {
            isContainerPacket = bytes.readBoolean();
    
            if (!isContainerPacket) {
                x = bytes.readInt();
                y = bytes.readInt();
                z = bytes.readInt();
            }
    
            dataType = bytes.readByte();
            index = bytes.readShort();
    
            object = DataUtills.instance.readObjectFromBytes(bytes, dataType);
        }
    
        public static class Handler implements IMessageHandler<TileObjectPacket, IMessage> {
    
            @Override
            public IMessage onMessage(TileObjectPacket message, MessageContext ctx) {
                if (ctx.side == Side.CLIENT) {
                    if (message.isContainerPacket) {
                        ContainerDataSync container = Minecraft.getMinecraft().thePlayer.openContainer instanceof ContainerDataSync ? (ContainerDataSync) Minecraft.getMinecraft().thePlayer.openContainer : null;
                        if (container == null) return null;
                        container.receiveSyncData(message.index, (Integer) message.object);
                    } else {
                        if (!(Minecraft.getMinecraft().theWorld.getTileEntity(message.x, message.y, message.z) instanceof TileObjectSync))
                            return null;
                        ((TileObjectSync) Minecraft.getMinecraft().theWorld.getTileEntity(message.x, message.y, message.z)).receiveObjectFromServer(message.index, message.object);
                    }
                } else {
                    if (message.isContainerPacket) {
                        ContainerDataSync container = ctx.getServerHandler().playerEntity.openContainer instanceof ContainerDataSync ? (ContainerDataSync) ctx.getServerHandler().playerEntity.openContainer : null;
                        if (container == null) return null;
                        container.receiveSyncData(message.index, (Integer) message.object);
                    } else {
                        if (!(ctx.getServerHandler().playerEntity.worldObj.getTileEntity(message.x, message.y, message.z) instanceof TileObjectSync))
                            return null;
                        ((TileObjectSync) ctx.getServerHandler().playerEntity.worldObj.getTileEntity(message.x, message.y, message.z)).receiveObjectFromClient(message.index, message.object);
                    }
                }
                return null;
            }
        }
    }
    
    

    Подскажите может быть дело в чем то другом, или ваши предположения того как он меняет содержимое контейнеров не имея ни каких полномочий.
    Заранее благодарен..
     
    Последнее редактирование: 8 окт 2016
  2. Хостинг MineCraft
    <
  3. Автор темы
    Aнатолий

    Aнатолий Старожил Пользователь

    Баллы:
    103
    Skype:
    sasay1337
    Имя в Minecraft:
    4epB9Ik
    P.S Версии подозреваемых модов:
    [Draconic-Evolution] 1.7.10 v1.0.2h
    [Vending] 1.7.10 v1.2.3
    [ZTones] 1.7.10 v2.2.1
    -=======-
    [IndustrialCraft 2] 1.7.10 v2.2.814
     
  4. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Да не новый он, все тот же пайлоад. И дыру ты уже сам нашел, тот пакет в спойлере.
     
  5. Автор темы
    Aнатолий

    Aнатолий Старожил Пользователь

    Баллы:
    103
    Skype:
    sasay1337
    Имя в Minecraft:
    4epB9Ik
    Новый однако не эксплоит, а находка его в данном моде.
    Жалко конечно мод. Вынуждены убирать

    Людей готовых сделать фикс-заказ за денежку наверняка нет, а сами от данной темы пока далеки :(
     
  6. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Тупо удаляешь этот класс и стираешь его использование в остальных клаассах. Или просто оставь пустым методы toBytes и fromBytes. Пруфит.
     
  7. Автор темы
    Aнатолий

    Aнатолий Старожил Пользователь

    Баллы:
    103
    Skype:
    sasay1337
    Имя в Minecraft:
    4epB9Ik
    Этот класс юзают все тайлы данного мода (ах их там около десятка)
    Без них - мод смысла не имеет.
    Нужно либо как то отслеживать клиент и посылать на*** -
    Либо весь мод под снос
     
  8. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Тогда выбрасывай, ибо там полная клоака получается. Если во все те тайлы можно сетать блоки отослав пакет.
     
  9. Автор темы
    Aнатолий

    Aнатолий Старожил Пользователь

    Баллы:
    103
    Skype:
    sasay1337
    Имя в Minecraft:
    4epB9Ik
    Можно ли как то проверить откуда отправлен пакет? (Сделать типо белый адрес, а от остальных адресов игнорить)
     
  10. GoodCoder

    GoodCoder Активный участник Пользователь

    Баллы:
    76
    В пакете есть только одно, чему модно доверять - игрок от которого он пришёл. Либо принимай пакеты только от администраторов сервера, либо переписывать логику мода, чтобы данные не проходили через клиент.
    Клиенту никогда нельзя доверять.
     
  11. Автор темы
    Aнатолий

    Aнатолий Старожил Пользователь

    Баллы:
    103
    Skype:
    sasay1337
    Имя в Minecraft:
    4epB9Ik
    Разве этот пакет не сервер отсылает сам себе? (вроде системного общения) как это было в библио-крафте и индастриале?
    Я думал это внутренний протокол мода который решили использовать со стороны клиента "Хаком"

    Чтоб проще было понять что за бред я несу - Изначально клиент отсылает такие пакеты на сервер? (Не поправленые)

    --------------------
    Походу я совсем не догоняю как оно работает :(
    Обьясните цепь кто разобрался.. Плез
     
  12. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Так клиент их и шлет, сервер читает.
    publicstaticclass Handler implements IMessageHandler<TileObjectPacket, IMessage>{ отправка пакета клиентом} --> IMessage
     
    Последнее редактирование: 10 окт 2016
  13. L4c05t

    L4c05t Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    Lacost
    Как то говорилось об Vending что в нем естьподобная уязвимость.

    Если это мод на торговые аппараты то это в полне может быть он. Он всегда был проблемный.
     
  14. Автор темы
    Aнатолий

    Aнатолий Старожил Пользователь

    Баллы:
    103
    Skype:
    sasay1337
    Имя в Minecraft:
    4epB9Ik
    Не подскажешь, для чего оно используется в моде? (в чистом виде)
    Неужели "Вижу блок - загружаю блок. Если вижу значит полюбому есть"
    Мля ну вообще не понимаю, зачем нужен такой пакет с клиента.
    Как будто специально Backdoor написали..[DOUBLEPOST=1476073383,1476072725][/DOUBLEPOST]
    С Vending'ом по проще будет..
    Там очевидно для чего такой пакет..
    Он кладет в контейнер выбранный игроком предмет, создает так сказать из воздуха..
    Слот куда кладет - якобы защищен от извлечения наружу..
    Но в пакете указывается слот куда класть - что тупо
    Можно спокойно на клиенте изменить слот указанный в пакете, и он будет класть в те слоты - которые игроку доступны на вынимание от туда предметов..
    Что собственно дает нам возможность спавна абсолютно любого предмета в любых количествах..

    Vending - был выкинут сразу.

    Осталось разобраться окончательно с 2мя другими модами..

    (В ZTones например есть подозрения о таком пакете который строит на указанных координатах булыжник, а то и вовсе любой блок. И если постараться можно сделать скрипт - который попросту застроит все свободное пространство в мире каким либо блоком..
    Но это теория)

    ((В DraconicEvolution не один такой стремный пакет, там так же есть функция установки блока как собственной витрины "Так сказать повешать предмет на стену" (их можно ставить и в воздухе) тоесть - так же застроить к херам весь мир))
     
  15. GoodCoder

    GoodCoder Активный участник Пользователь

    Баллы:
    76
    Это идиотизм. Пакеты нужны для взаимодействия по сети, а с чем взаимодействовать кроме как клиента. Для взаимодействиях модов внутри сервера есть API, событие IMCMessage (ну или как там его).

    Это рукожопость. Моды пишут те же школьники, пусть иностранные.
     
  16. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Это нужно смотреть полностью мод, чтоб увидеть, для чего конкретно передается пакет. Хотя и так очевидно же, по топу как чел дропился. Получаем координаты тайла и кладем вещи из воздуха. Хотя там все еще проще, при входе и прогрузке чанков клиент и так получает координаты тайлов вокруг себя. остается их продропить вещами.
     
  17. Автор темы
    Aнатолий

    Aнатолий Старожил Пользователь

    Баллы:
    103
    Skype:
    sasay1337
    Имя в Minecraft:
    4epB9Ik
    Откуда берется лист нужного дропа на клиенте?
    Я пологал что списки всех сундуков хоронятся на сервере..
    Вопрос, для чего их отсылать на клиент чтоб тот обратно вернул пакет с этими же данными?
    Почему нельзя оставить "Содержимое" на стороне сервера, и брать значение конкретно от туда а не от клиента?
     
  18. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Я не изучал этот мод. Но да, клиент получает объекты тайлов целиком.
     
  19. Автор темы
    Aнатолий

    Aнатолий Старожил Пользователь

    Баллы:
    103
    Skype:
    sasay1337
    Имя в Minecraft:
    4epB9Ik
    Чисто теоретически, можно ли сделать так чтоб клиент отправлял лишь координаты тайла, а сервер сам уже наполнял его дропом по списку который хорониться там (без передачи на клиент) ?
     
  20. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Я даже не знаю для чего оно юзается. Ковыряй мод и смотри. И мне не интересно.
     
  21. Автор темы
    Aнатолий

    Aнатолий Старожил Пользователь

    Баллы:
    103
    Skype:
    sasay1337
    Имя в Minecraft:
    4epB9Ik
    Окей. :eek: Спасибо и на том что уже рассказал. В очень многом помог:rolleyes:
     

Поделиться этой страницей