Переходим ко второй атаке, которая связана с двоичной сериализацией в Java. Мы, как ты помнишь, были несколько ограничены в возможностях: да, поменять данные объектов можно, а вот отправлять произвольные объекты и получить в итоге RCE (как бывает в случае других языков) можем лишь при определенных условиях :).

Java, как мы видим, берет на себя все необходимое для сериализации и десериализации. Но это не всегда удобно. Есть ряд ситуаций, когда программисту необходимо дополнить или изменить эти механизмы. Например, добавить шаги, выполняемые несериализуемым родителем класса в конструкторе с параметрами. Для этих целей программист может переопределить для класса методы readObject и writeObject и добавить туда необходимые команды.

private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException{
    in.defaultReadObject();
    System.out.println("It happens");
}

Самый важный момент для нас с точки зрения атаки в том, что readObject всегда вызывается раньше приведения типа (casting) объекта.

ObjectInputStream ois = new ObjectInputStream(fis);
Employee emp1 = (Employee) ois.readObject();

Другими словами, сначала будет вызван readObject и создастся некий объект, а уже его попробуют привести к нужному классу.

Эти два факта нам дают вот что. В приложение мы можем отправлять любой объект, класс которого «известен» приложению (то есть в classpath приложения), и при этом будет вызван readObject этого класса.

Правда, вторая необходимая для атаки часть зависит от конкретных уязвимостей. Нужен класс с уязвимым readObject. Поясню на примере. Есть такая библиотека, как Apache Common Uploads, она используется для управления загрузкой файлов на сервер и очень распространена. В ней есть куча различных классов. Один из них — DiskFileItem.

Продолжение доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

Вариант 2. Купи один материал

Заинтересовала информация, но нет возможности оплатить подписку? Тогда этот вариант для тебя! Обрати внимание: этот способ покупки доступен только для материалов, опубликованных более двух месяцев назад.


Оставить мнение

Check Also

Хакеры скомпрометировали LabCorp, крупнейшую в США сеть диагностических лабораторий

Крупнейшая в США сеть диагностических лабораторий, LabCorp, в начале текущей недели была а…