Сбой при попытке запустить WebGoat с Java-агентом - PullRequest
0 голосов
/ 07 июня 2018

В настоящее время я изучаю, как загрузить веб-приложение с помощью Java-агента для мониторинга.

Выбранное мной веб-приложение было WebGoat и работало с WebGoat с java -jar webgoat-server-8.0.0.M17.jar, как указано вREADME WebGoat прекрасно работает.

Однако, когда я пытаюсь добавить своего агента, я получаю следующий беспорядок журнала ошибок:

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::       (v1.5.12.RELEASE)

2018-06-06 22:36:08.528  INFO 3741 --- [           main] org.owasp.webgoat.StartWebGoat           : Starting StartWebGoat v8.0.0.M17 on MacBook-Pro.local with PID 3741 (/Users/andrewfan/Desktop/Lang Agent Dev Proj help info/webgoat-server-8.0.0.M17.jar started by andrewfan in /Users/andrewfan/Desktop/Lang Agent Dev Proj help info)
2018-06-06 22:36:08.531  INFO 3741 --- [           main] org.owasp.webgoat.StartWebGoat           : No active profile set, falling back to default profiles: default
2018-06-06 22:36:08.844  INFO 3741 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@1376c05c: startup date [Wed Jun 06 22:36:08 EDT 2018]; root of context hierarchy
2018-06-06 22:36:11.354  INFO 3741 --- [           main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$8e12590a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-06-06 22:36:11.442  WARN 3741 --- [           main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcConfiguration': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'webgoat.user.directory' in value "${webgoat.user.directory}"
2018-06-06 22:36:11.455  INFO 3741 --- [           main] utoConfigurationReportLoggingInitializer : 

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled.
2018-06-06 22:36:11.464 ERROR 3741 --- [           main] o.s.boot.SpringApplication               : Application startup failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcConfiguration': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'webgoat.user.directory' in value "${webgoat.user.directory}"
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372) ~[spring-beans-4.3.16.RELEASE.jar!/:4.3.16.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1268) ~[spring-beans-4.3.16.RELEASE.jar!/:4.3.16.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.16.RELEASE.jar!/:4.3.16.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.16.RELEASE.jar!/:4.3.16.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:312) ~[spring-beans-4.3.16.RELEASE.jar!/:4.3.16.RELEASE]
    at 

...

Я сократил сообщения об ошибках, так как трассировка занимает несколько страниц, но основная ошибка, кажется, org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mvcConfiguration': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'webgoat.user.directory' in value "${webgoat.user.directory}"


Я запускаю свой агент следующим образом: java -javaagent:/Users/path/to/jar/Spn-LangAgent-0.0.jar -jar webgoat-server-8.0.0.M17.jar --server.port=8080 --server.address=localhost

Мой агент выглядит следующим образом:

package com.spnlangagent.langagent;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLClassLoader;
import java.lang.reflect.Field;
import java.lang.instrument.Instrumentation;
import java.lang.instrument.UnmodifiableClassException;

import com.google.monitoring.runtime.instrumentation.AllocationRecorder;

public class LangAgent {

    public static void premain(String agentArgs, Instrumentation inst) throws Exception {
        System.out.println("LangAgent: premain now running");
        setupInstrumentation(agentArgs, inst);
        startRuntime(agentArgs);
    }

    private static void setupInstrumentation(String agentArgs, Instrumentation inst) throws Exception {
        System.out.println("setupInstrumentation: now running with agentArgs: " + agentArgs);
    }

    private static void startRuntime(String agentArgs) throws Exception {
        System.out.println("startRuntime: now running with agentArgs: " + agentArgs);
    }
}

Исходное содержимое агента было закомментировано, за исключением нескольких операторов печати, но, тем не менее, даже при этом WebGoat падает при запуске.

Я попробовал другой агент с WebGoat, и он работал нормально, поэтому я могу думать только о том, что что-то не так с моим агентом или с тем, как он упаковывается.

IЯ использую Maven, и мой файл MANIFEST.MF выглядит следующим образом:

Manifest-Version: 1.0
Premain-Class: com.spnlangagent.langagent.LangAgent
Can-Redefine-Classes: true
Can-Retransform-Classes: true

После запуска mvn package пакет MANIFEST, упакованный в .jar, выглядит следующим образом:

Manifest-Version: 1.0
Premain-Class: com.spnlangagent.langagent.LangAgent
Built-By: andrewfan
Can-Redefine-Classes: true
Can-Retransform-Classes: true
Created-By: Apache Maven 3.5.3
Build-Jdk: 1.8.0_172

В моемpom.xml, я делаю следующее, чтобы добраться до манифеста:

         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>3.1.0</version>
            <configuration>
                <archive>
                    <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
                </archive>
            </configuration>
        </plugin>

Если бы кто-то мог указать мне правильное направление, чтобы выяснить, почему происходит сбой WebGoat, или если бы кто-то мог предоставить больше информации опочему то, что я сейчас делаю, неправильно, это было бы очень признательно.

Спасибо.

Примечание. Если остальная часть моего файла pom.xml необходима для отладки, я с радостью предоставлю его;просто вопрос уже очень длинный как есть.

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Webgoat (а также в большинстве приложений на основе Spring) использует файл свойств (обычно в формате properties или yaml) для выполнения поиска заполнителя.

Симптом в вашей ошибке означает, что Spring не удалосьпоиск свойств для обработки заполнителей.

Учитывая, что поиск заполнителей работает хорошо без присутствия JAR вашего агента и с информацией, упомянутой вами в комментарии, проблема вызвана

  • вашим агентомJAR предоставил application.properties (который имеет конфликт имен с файлом свойств, используемым Webgoat для заполнителя)
  • Агент JAR будет частью classpath и, возможно, даже появится раньше, чем основной JAR
  • yourпусто application.properties "затенено" в главном JAR Webgoat.Это означает, что когда Webgoat запускается, Spring забирает ваш пустой application.properties для его обработки заполнителя, следовательно, не удается.
0 голосов
/ 07 июня 2018

Решение было mvn clean

Ранее у меня был application.properties, который автоматически добавлялся как часть Spring Boot Initializr.Само присутствие этого файла в моем агенте .jar, даже если внутри ничего нет, похоже, стало причиной того, что WebGoat взбесился.Теперь, когда его больше нет, WebGoat работает нормально через java -javaagent:/Users/path/to/jar/Spn-LangAgent-0.0.jar -jar webgoat-server-8.0.0.M17.jar --server.port=8080 --server.address=localhost

. Я хотел бы поблагодарить Адриана Шума за упоминание application.properties, так как я удалил его некоторое время назад.mvn package на самом деле не восстановил .jar, когда я его запустил, так что я проверял тот, который все еще содержал application.properties.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...